В этом примере показано, как создать несколько сценариев симуляции и использовать сценарии, чтобы оптимизировать типы данных с фиксированной точкой системы.
Откройте модель. В этом примере вы оптимизируете типы данных Подсистемы контроллера. Модель настраивается, чтобы использовать или вход пандуса или случайный вход. Модель использует блок Assertion вместо того, чтобы использовать допуски сигнала, чтобы проверить числовое поведение реализации фиксированной точки. Для получения дополнительной информации смотрите, Задают Поведенческие Ограничения.
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] ObjectiveFunction: BitWidthSum UseParallel: 0 Advanced Options AdvancedOptions: [1x1 struct]
Задайте входные объекты симуляции как сценарии симуляции в расширенных настройках.
options.AdvancedOptions.SimulationScenarios = si;
Во время оптимизации программное обеспечение выводит области значений для всех сценариев симуляции, заданных в расширенных настройках. Программное обеспечение проверяет решения по каждому входному сценарию симуляции.
result = fxpopt(model, [model '/Controller'], options)
+ Checking for unsupported constructs. + Preprocessing + Modeling the optimization problem - Constructing decision variables + Running the optimization solver - Evaluating new solution: cost 1936, meets the tolerances. - Updated best found solution, cost: 1936 + Optimization has finished. + Fixed-point implementation that met the tolerances found. - Total cost: 1936 - Maximum absolute difference: 0.000000 - 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 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);