exponenta event banner

Пример исследования бензина Проект эксперимента

В этом примере показано, как спроектировать эксперимент для задачи исследования примера бензина с помощью интерфейса командной строки к основанным на модели Toolbox™ калибровки. Тематическое исследование бензина описывает, как систематически разрабатывать набор оптимальных статических таблиц калибровки двигателя с помощью программного обеспечения Model-Based Calibration Toolbox™.

Создайте проект и План тестирования

project = mbcmodel.CreateProject('GasolineCaseStudy');
% Define Inputs for test plan
localInputs = mbcmodel.modelinput(...
    'Symbol', 'S',...
    'Name', 'SPARK',...
    'Range', [0 50]);
globalInputs = mbcmodel.modelinput(...
    'Symbol', {'N','L','ICP','ECP'},...
    'Name',   {'SPEED','LOAD','INT_ADV','EXH_RET'},...
    'Range',  {[500 6000],[0.0679 0.9502],[-5 50],[-5 50]});
% Create test plan
TP = CreateTestplan( project, {localInputs,globalInputs} );

Создайте проект заполнения пространства

CreateDesign по умолчанию используется для создания проекта для внешнего (глобального) уровня.

sfDesign = CreateDesign(TP, ...
    'Type', 'Latin Hypercube Sampling',...
    'Name', 'Space Filling');

Добавление граничных ограничений

Загрузка граничных ограничений из другого файла проекта и добавление к проекту.

projectFile = [matlabroot,'\toolbox\mbc\mbctraining\Gasoline_project.mat'];
otherProject = mbcmodel.LoadProject( projectFile );
boundaryConstraints = otherProject.Testplans(1).BoundaryModel('global');
% Design constraints are specified as an array of
% mbcdoe.designconstraint objects.
sfDesign.Constraints = boundaryConstraints;

Изменение критериев выбора проекта LHS

Получите свойства проекта и измените SelectionCriteria на 'minimax'. Возврат измененных свойств в проект приводит к обновлению проекта.

designGenerator = sfDesign.Generator;
% Use "minimax" 
designGenerator.SelectionCriteria = 'minimax'
designGenerator = 
Latin Hypercube Sampling design generator
sfDesign.Generator = designGenerator;

Получение необходимого количества точек для ограниченного проекта.

Как и в Design Editor, когда у проекта есть ограничения, трудно достичь требуемого числа точек. В Design Editor вы пробуете разное количество точек и регенерируете. В командной строке можно использовать ConstrainedGenerate способ для этого.

Сгенерируйте проект

Использование ConstrainedGenerate чтобы сделать проект 200 точек.

sfDesign = ConstrainedGenerate( sfDesign, 200, ...
    'UnconstrainedSize', 800, ...
    'MaxIter',10  );

% How did we do?
finalNumberOfPoints = sfDesign.NumberOfPoints
finalNumberOfPoints = 202
% How many points did we need in total?
totalNumberOfPoints = sfDesign.Generator.NumberOfPoints
totalNumberOfPoints = 751

Сгенерируйте проект для припаркованных кулачковых фазеров

Сделайте другой проект для некоторых точек с припаркованными кулачковыми фазерами. Эти точки важны, потому что вам нужна точная модель, когда кулачки припаркованы.

parkedCamsDesign = sfDesign.CreateDesign( 'Name', 'Parked' );
parkedCamsDesign = ConstrainedGenerate( parkedCamsDesign, 10, ...
    'UnconstrainedSize', 40, ...
    'MaxIter',10  );

% Explicitly set ECP and ICP to 0 - this changes the 'Type' to 'Custom'
designTypeBefore = parkedCamsDesign.Type
designTypeBefore = 
'Latin Hypercube Sampling'
parkedCamsDesign.Points(:,3:4) = 0;
designTypeAfter = parkedCamsDesign.Type
designTypeAfter = 
'Custom'
% Merge with first design to create a new design
mainDesign = Merge( sfDesign, parkedCamsDesign );
mainDesign.Name = 'Main Design';

Проекты графика

Scatter2D является методом mbcdoe.design.

designPoints = mainDesign.Points;
inputs = mainDesign.Inputs;
subplot(2,1,1)
Scatter2D( mainDesign, 1, 2 );
subplot(2,1,2)
Scatter2D( mainDesign, 3, 4 );

Добавьте проекты к плану тестирования

Тестовые планы имеют свойство проекта, которое является массивом ячеек (по одной камере для каждого этапа). Здесь вы добавляете проекты ко второй ступени.

TP.Design{2} = [sfDesign parkedCamsDesign mainDesign];
get(TP)
                 Data: []
               Levels: 2
     InputSignalNames: [5×1 string]
       InputsPerLevel: [1 4]
            Responses: [0×0 mbcmodel.abstractnode]
             Boundary: []
    SummaryStatistics: [0×0 table]
               Inputs: {[1×1 mbcmodel.modelinput]  [4×1 mbcmodel.modelinput]}
              Designs: {[1×0 mbcdoe.design]  [1×3 mbcdoe.design]}
           BestDesign: {[]  []}
        DefaultModels: {[1×1 mbcmodel.localmodel]  [1×1 mbcmodel.linearmodel]}
       ValidationData: [0×0 mbcmodel.data]
        ResponseNames: {1×0 cell}
                 Name: 'Two-Stage'
              Project: [1×1 mbcmodel.project]

Установите BestDesign

Тестовые планы также имеют свойство BestDesign (также массив ячеек). Установите лучший проект для 2-й ступени.

TP.BestDesign{2} = mainDesign
TP = 
  testplan with properties:

                 Data: []
               Levels: 2
     InputSignalNames: [5×1 string]
       InputsPerLevel: [1 4]
            Responses: [0×0 mbcmodel.abstractnode]
             Boundary: []
    SummaryStatistics: [0×0 table]
               Inputs: {[1×1 mbcmodel.modelinput]  [4×1 mbcmodel.modelinput]}
              Designs: {[1×0 mbcdoe.design]  [1×3 mbcdoe.design]}
           BestDesign: {[]  [1×1 mbcdoe.design]}
        DefaultModels: {[1×1 mbcmodel.localmodel]  [1×1 mbcmodel.linearmodel]}
       ValidationData: [0×0 mbcmodel.data]
        ResponseNames: {1×0 cell}
                 Name: 'Two-Stage'
              Project: [1×1 mbcmodel.project]

Создайте проект валидации

Сделайте еще один пространственный проект для сбора валидации данных.

validationDesign = sfDesign.CreateDesign( 'Name', 'Validation' );
validationDesign = ConstrainedGenerate( validationDesign, 25,...
    'UnconstrainedSize', 100, ...
    'MaxIter',10  );

% Add the parked cams point.
validationDesign.Points(end+1,:) = [3500 0.5 0 0];
% Add this to testplan as well - when you add one design only, using
% AddDesign is more convenient. By default this adds the design to 2nd
% stage. 
% Note: alternatively, you could add the design to TP.Design{2} directly.
TP.AddDesign(validationDesign);
% The list of designs for the 2nd stage
allDesigns = TP.Design{2}
allDesigns=1×4 object
  1×4 design array with properties:

    Style
    Type
    NumPoints
    NumInputs
    Name
    Points
    PointTypes
    Inputs
    Generator
    Constraints
    Model

Похожие темы