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

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

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

Смотрите также

Функции

Классы

Похожие темы