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

Этот пример показывает, как разработать эксперимент для проблемы тематического исследования бензина с помощью интерфейса командной строки для Model-Based Calibration 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');

Добавьте граничные ограничения

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

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

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

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

designGenerator = sfDesign.Generator;
% Use "minimax"
designGenerator.SelectionCriteria = 'minimax'
sfDesign.Generator = designGenerator;
designGenerator = 

Latin Hypercube Sampling design generator

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

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

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

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

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

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

   202


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
parkedCamsDesign.Points(:,3:4) = 0;
designTypeAfter = parkedCamsDesign.Type
% Merge with first design to create a new design
mainDesign = Merge( sfDesign, parkedCamsDesign );
mainDesign.Name = 'Main Design';
designTypeBefore =

    'Latin Hypercube Sampling'


designTypeAfter =

    'Custom'

Постройте точки проекта

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 );

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

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

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

Установите BestDesign

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

TP.BestDesign{2} = mainDesign
TP = 

  testplan with properties:

                Data: []
              Levels: 2
    InputSignalNames: [5x1 string]
      InputsPerLevel: [1 4]
       DefaultModels: {[1x1 mbcmodel.localmodel]  [1x1 mbcmodel.linearmodel]}
           Responses: [0x0 mbcmodel.abstractnode]
            Boundary: []
              Inputs: {[1x1 mbcmodel.modelinput]  [4x1 mbcmodel.modelinput]}
             Designs: {[1x0 mbcdoe.design]  [1x3 mbcdoe.design]}
          BestDesign: {[]  [1x1 mbcdoe.design]}
                Name: 'Two-Stage'
             Project: [1x1 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 = 

  1x4 design array with properties:

    Style
    Type
    NumPoints
    NumInputs
    Name
    Points
    PointTypes
    Inputs
    Generator
    Constraints
    Model