Этот пример показывает, как создать несколько сценариев симуляции и использовать сценарии, чтобы оптимизировать типы данных с фиксированной точкой системы.
Откройте модель. В этом примере вы оптимизируете типы данных Подсистемы контроллера. Модель настраивается, чтобы использовать или вход пандуса или случайный вход.
model = 'ex_controllerHarness';
open_system(model);
Создайте объект Simulink.SimulationInput
, который содержит различные сценарии. Используйте обоих вход пандуса, а также четыре различных seed для случайного входа.
si = Simulink.SimulationInput.empty(5, 0); % scan through 4 different seeds for the random input rng(1); seeds = randi(1e6, [1 4]); for sIndex = 1:length(seeds) si(sIndex) = Simulink.SimulationInput(model); si(sIndex) = si(sIndex).setVariable('SOURCE', 2); % SOURCE == 2 corresponds to the random input si(sIndex) = si(sIndex).setBlockParameter([model '/Random/uniformRandom'], 'Seed', num2str(seeds(sIndex))); % scan through the seeds si(sIndex) = si(sIndex).setUserString(sprintf('random_%i', seeds(sIndex))); end % setting SOURCE == 1 corresponds to the ramp input si(5) = Simulink.SimulationInput(model); si(5) = si(5).setVariable('SOURCE', 1); si(5) = si(5).setUserString('Ramp');
Чтобы задать опции для оптимизации, такие как количество итераций и метода для набора области значений, используют объект fxpOptimizationOptions
. Этот пример использование вывел анализ области значений, чтобы собрать области значений для системы.
options = fxpOptimizationOptions('MaxIterations', 3e2, 'Patience', 50); options.AdvancedOptions.PerformNeighborhoodSearch = false; % use derived range analysis for range collection options.AdvancedOptions.UseDerivedRangeAnalysis = true
options = fxpOptimizationOptions with properties: MaxIterations: 300 MaxTime: 600 Patience: 50 Verbosity: High AllowableWordLengths: [1x127 double] UseParallel: 0 Advanced Options AdvancedOptions: [1x1 struct]
Задайте входные объекты симуляции как сценарии симуляции в расширенных настройках.
options.AdvancedOptions.SimulationScenarios = si;
Во время оптимизации программное обеспечение выводит области значений для всех сценариев симуляции, заданных в расширенных настройках. Программное обеспечение проверяет решения по каждому входному сценарию симуляции.
result = fxpopt(model, [model '/Controller'], options)
+ Preprocessing + Modeling the optimization problem - Constructing decision variables + Running the optimization solver - Evaluating new solution: cost 1960, meets the tolerances. - Updated best found solution, cost: 1960 + Optimization has finished. + Fixed-point implementation that met the tolerances found. - Total cost: 1960 - Maximum absolute difference: 0.000000 - Use the explore method of the result to explore the implementation. result = OptimizationResult with properties: FinalOutcome: 'Fixed-point implementation that met the tolerances found.' OptimizationOptions: [1x1 fxpOptimizationOptions] Solutions: [1x1 DataTypeOptimization.OptimizationSolution]
Можно исследовать каждое решение, когда оно выдерживает сравнение с каждым сценарием симуляции, который вы задали. Исследуйте лучшее найденное решение и просмотрите его с входом симуляции пандуса. Вход пандуса является сценарием симуляции пять.
solutionIndex = 1; % get the best found solution scenarioIndex = 5; % get the 5th scenario (ramp) solution = explore(result, solutionIndex, scenarioIndex);