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