Оптимизируйте типы данных Используя несколько сценариев симуляции

В этом примере показано, как создать несколько сценариев симуляции и использовать сценарии, чтобы оптимизировать типы данных с фиксированной точкой системы.

Откройте модель. В этом примере вы оптимизируете типы данных Подсистемы контроллера. Модель настраивается, чтобы использовать или вход пандуса или случайный вход.

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:

                  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);