Этот пример показывает, как разработать эксперимент для проблемы тематического исследования бензина с помощью интерфейса командной строки для 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 = 202 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 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] DefaultModels: {[1x1 mbcmodel.localmodel] [1x1 mbcmodel.linearmodel]} Responses: [0x0 mbcmodel.abstractnode] Boundary: [] Inputs: {[1x1 mbcmodel.modelinput] [4x1 mbcmodel.modelinput]} Designs: {[1x0 mbcdoe.design] [1x3 mbcdoe.design]} BestDesign: {[] []} 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] DefaultModels: {[1x1 mbcmodel.localmodel] [1x1 mbcmodel.linearmodel]} Responses: [0x0 mbcmodel.abstractnode] Boundary: [] Inputs: {[1x1 mbcmodel.modelinput] [4x1 mbcmodel.modelinput]} Designs: {[1x0 mbcdoe.design] [1x3 mbcdoe.design]} BestDesign: {[] [1x1 mbcdoe.design]} 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