В этом примере показано, как спроектировать эксперимент для задачи исследования примера бензина с помощью интерфейса командной строки к основанным на модели 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;
Получите свойства проекта и измените 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.NumberOfPointstotalNumberOfPoints = 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 (также массив ячеек). Установите лучший проект для 2-й ступени.
TP.BestDesign{2} = mainDesignTP =
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