В этом примере показано, как спроектировать эксперимент для проблемы тематического исследования бензина с помощью интерфейса командной строки для 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;
Получите свойства проекта и измените 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 = 203 totalNumberOfPoints = 852
Сделайте другой проект для некоторых точек с припаркованными фазовращателями бегунка. Эти точки важны, потому что вам нужна точная модель, когда бегунки припаркованы.
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]
Responses: [0x0 mbcmodel.abstractnode]
Boundary: []
SummaryStatistics: [0x0 table]
Inputs: {[1x1 mbcmodel.modelinput] [4x1 mbcmodel.modelinput]}
Designs: {[1x0 mbcdoe.design] [1x3 mbcdoe.design]}
BestDesign: {[] []}
DefaultModels: {[1x1 mbcmodel.localmodel] [1x1 mbcmodel.linearmodel]}
ValidationData: [0x0 mbcmodel.data]
ResponseNames: {1x0 cell}
Name: 'Two-Stage'
Project: [1x1 mbcmodel.project]
Планы тестирования также имеют свойство BestDesign (также массив ячеек). Установите Лучший Проект для 2-го этапа.
TP.BestDesign{2} = mainDesign
TP =
testplan with properties:
Data: []
Levels: 2
InputSignalNames: [5x1 string]
InputsPerLevel: [1 4]
Responses: [0x0 mbcmodel.abstractnode]
Boundary: []
SummaryStatistics: [0x0 table]
Inputs: {[1x1 mbcmodel.modelinput] [4x1 mbcmodel.modelinput]}
Designs: {[1x0 mbcdoe.design] [1x3 mbcdoe.design]}
BestDesign: {[] [1x1 mbcdoe.design]}
DefaultModels: {[1x1 mbcmodel.localmodel] [1x1 mbcmodel.linearmodel]}
ValidationData: [0x0 mbcmodel.data]
ResponseNames: {1x0 cell}
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