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

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

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

См. также

Функции

Классы

Похожие темы