В этом примере показано, как создать несколько сценариев симуляции и использовать сценарии для оптимизации типов данных с фиксированной точкой системы.
Откройте модель. В этом примере вы оптимизируете типы данных Подсистемы Контроллера. Модель настроена, чтобы использовать или наклонный вход, или случайный вход. Модель использует блок 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);