В этом примере показано, как создать несколько сценариев симуляции и использовать сценарии для оптимизации типов данных с фиксированной точкой системы.
Откройте модель. В этом примере вы оптимизируете типы данных Подсистемы Контроллера. Модель настроена, чтобы использовать или наклонный вход, или случайный вход. Модель использует блок Assertion, а не допуски сигнала, чтобы проверить численное поведение реализации с фиксированной точкой. Дополнительные сведения см. в разделе «Задание поведенческих ограничений».
model = 'ex_controllerHarness';
open_system(model);

Создайте Simulink.SimulationInput объект, который содержит различные сценарии. Используйте оба входа, а также четыре различных начальных значения для случайного входов.
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]
ObjectiveFunction: BitWidthSum
UseParallel: 0
Advanced Options
AdvancedOptions: [1x1 DataTypeOptimization.AdvancedFxpOptimizationOptions]
Задайте входные объекты симуляции как сценарии симуляции в расширенных опциях.
options.AdvancedOptions.SimulationScenarios = si;
Во время оптимизации программное обеспечение выводит области значений для всех сценариев симуляции, заданных в расширенных опциях. Программное обеспечение проверяет решения по каждому входному сценарию симуляции.
result = fxpopt(model, [model '/Controller'], options)
+ Starting data type optimization...
+ Checking for unsupported constructs.
+ Preprocessing
+ Modeling the optimization problem
- Constructing decision variables
+ Running the optimization solver
- Evaluating new solution: cost 496, does not meet the behavioral constraints.
- Evaluating new solution: cost 976, does not meet the behavioral constraints.
- Evaluating new solution: cost 1936, meets the behavioral constraints.
- Updated best found solution, cost: 1936
+ Optimization has finished.
+ Fixed-point implementation that satisfies the behavioral constraints found. The best found solution is applied on the model.
- Total cost: 1936
- Use the explore method of the result to explore the implementation.
result =
OptimizationResult with properties:
Model: 'ex_controllerHarness'
SystemUnderDesign: 'ex_controllerHarness/Controller'
FinalOutcome: 'Fixed-point implementation that satisfies the behavioral constraints found. The best found solution is applied on the model.'
OptimizationOptions: [1x1 fxpOptimizationOptions]
Solutions: [1x1 DataTypeOptimization.OptimizationSolution]
Можно исследовать каждое решение, поскольку оно сравнивается с каждым заданным сценарием симуляции. Исследуйте лучшее найденное решение и просмотрите его с вход симуляции наклона. Наклонный вход является сценарием симуляции 5.
solutionIndex = 1; % get the best found solution scenarioIndex = 5; % get the 5th scenario (ramp) solution = explore(result, solutionIndex, scenarioIndex);