exponenta event banner

Пример разработки эксперимента по бензину

В этом примере показано, как с помощью интерфейса командной строки с Toolbox™ Калибровка на основе модели создать эксперимент по проблеме примера бензина. В тематическом исследовании по бензину описывается систематическая разработка набора оптимальных установившихся таблиц калибровки двигателя с использованием программного обеспечения 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

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

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

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

Как и в Редакторе проектирования, когда конструкция имеет ограничения, трудно достичь требуемого количества точек. В редакторе проектирования попробуйте использовать разное количество точек и выполнить регенерацию. В командной строке можно использовать 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 );

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

Testplans имеют свойство Design, которое является массивом ячеек (по одной ячейке для каждого этапа). Здесь проекты добавляются на 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

Testplans также имеют свойство 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

Связанные темы