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

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

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

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

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 в 'минимакс'. Откладывание измененных свойств в проект заставляет проект обновляться.

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

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

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

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

Похожие темы