exponenta event banner

Запись функции затрат

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

При оптимизации или оценке параметров модели функция сохраненных затрат предоставляется в качестве входных данных для sdo.optimize. При каждой итерации оптимизации sdo.optimize вызывает эту функцию и использует выходные данные функции для определения направления оптимизации. При выполнении анализа чувствительности с использованием sdo.evaluate, вы генерируете значения образцов конструктивных переменных и оцениваете функцию затрат для каждого значения образца с помощью sdo.evaluate.

Анатомия функции затрат

Чтобы понять части функции затрат, рассмотрим следующую функцию-образец myCostFunc. Для конструктивной переменной x myCostFunc вычисляет цель x2 и ограничение нелинейности x2-4x + 1 < = 0.

function [vals,derivs] = myCostFunc(params)
% Extract the current design variable values from the parameter object, params.
x = params.Value;
% Compute the requirements (objective and constraint violations) and 
% assign them to vals, the output of the cost function. 
vals.F = x.^2;
vals.Cleq = x.^2-4*x+1;
% Compute the cost and constraint derivatives.
derivs.F = 2*x;
derivs.Cleq = 2*x-4;
end

Эта функция затрат выполняет следующие задачи:

  1. Определяет входные данные функции затрат.

    Функция затрат должна иметь в качестве входных данных: paramsвектор конструктивных переменных, которые должны быть оценены, оптимизированы или использованы для анализа чувствительности. Конструктивными переменными являются объекты параметров модели (param.Continuous объекты) или исходные состояния модели (param.State объекты).

    Поскольку функция затрат вызывается неоднократно во время оценки, оптимизации или оценки, можно указать дополнительные входные данные функции затрат, чтобы уменьшить избыточность кода и затраты на вычисления. Дополнительные сведения см. в разделе Указание входных данных функции затрат.

  2. Вычисляет требования.

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

    Сведения о требованиях к вычислениям на основе параметров модели, сигналов модели или линеаризованных моделей см. в разделе Требования к вычислениям.

  3. Указывает значения требований в качестве выходных данных, vals и derivs, функции затрат.

    Функция затрат должна быть возвращена valsструктура с одним или несколькими полями, задающими значения нарушений цели и ограничения.

    Выходные данные могут дополнительно включать derivsструктура с одним или несколькими полями, задающими значения градиентов нарушений цели и ограничений. Дополнительные сведения см. в разделе Указание выходных данных функции затрат.

После сохранения функции затрат в виде файла MATLAB myCostFunc.m, чтобы выполнить оптимизацию, используйте функцию затрат в качестве входных данных для sdo.optimize.

[param_opt,opt_info] = sdo.optimize(@myCostFunc,params)

При выполнении анализа чувствительности для вычисления требований в функции затрат для диапазона значений образцов конструктивных переменных paramsamples, использовать функцию затрат в качестве входных данных для sdo.evaluate.

[y,info] = sdo.evaluate(@myCostFunc,paramsamples)

Определение входных данных функции затрат

Функция выборочных затрат myCostFunc принимает один вход, params.

function [vals,derivs] = myCostFunc(params)

Функция затрат должна иметь в качестве входных данных: paramsвектор конструктивных переменных, которые должны быть оценены, оптимизированы или использованы для анализа чувствительности. Конструктивными переменными являются объекты параметров модели (param.Continuous объекты) или исходные состояния модели (param.State объекты). Вы получаете params с помощью sdo.getParameterFromModel и sdo.getStateFromModel команды.

Указать несколько входов

Поскольку функция затрат вызывается неоднократно во время оценки, оптимизации или оценки, можно указать дополнительные входные данные функции затрат, чтобы уменьшить избыточность кода и затраты на вычисления. Однако sdo.optimize и sdo.evaluate принять функцию затрат только с одним входным аргументом. Для использования функции затрат, которая принимает несколько входных аргументов, используется анонимная функция. Предположим, что myCostFunc_multi_inputs.m файл определяет функцию затрат, которая принимает params и arg1 в качестве входных данных. Например, можно сделать имя модели входным аргументом, arg1и сконфигурируйте функцию затрат, которая будет использоваться для нескольких моделей. Затем, если все входные аргументы являются переменными в рабочей области, укажите анонимную функцию myCostFunc2и использовать его в качестве входных данных для sdo.optimize или sdo.evaluate.

myCostFunc2 = @(params) myCostFunc_multi_inputs(params,arg1);
[param_opt,opt_info] = sdo.optimize(@myCostFunc2,params);

Можно также указать дополнительные входные данные с помощью удобных объектов, предоставляемых программным обеспечением Simulink ® Design Optimization™. Объекты удобства создаются один раз и передаются как входные данные функции затрат для уменьшения избыточности кода и затрат на вычисления.

Например, можно создать симулятор (sdo.SimulationTest объект) для моделирования модели с использованием альтернативных параметров модели без изменения модели и передачи симулятора в функцию затрат.

simulator = sdo.SimulationTest(model)
myCostFunc2 = @(params) myCostFunc_multi_inputs(params,arg1,arg2,simulator);
[param_opt,opt_info] = sdo.optimize(@myCostFunc2,params);

Дополнительные сведения о доступных объектах удобства см. в разделе Объекты удобства как дополнительные вводы. Пример см. в разделе Оптимизация конструкции для достижения пользовательской цели (код).

Требования к вычислениям

Функция выборочных затрат myCostFunc вычисляет требования на основе параметра модели x. Как правило, требования могут быть целями или ограничениями, основанными на параметрах модели, сигналах модели или линеаризованных моделях. Как видно в myCostFuncдля вычисления требований можно использовать функции MATLAB. Можно также использовать объекты требований, предоставляемые программой Simulink Design Optimization. Эти объекты позволяют задать такие требования, как характеристики ступенчатого отклика, пределы усиления и запаса по фазе и границы величины Боде. Вы можете использовать evalRequirement метод этих объектов для оценки нарушений целей и ограничений. Список доступных объектов требований см. в разделе Объекты удобства как дополнительные вводы.

Требования на основе параметров

При наличии требований к параметрам модели в функции затрат сначала извлекаются текущие значения параметров, а затем вычисляются требования.

  1. Извлечь текущее значение параметра из params.

    x = params.Value;
  2. Вычислите требование и укажите его как vals, вывод функции затрат.

    Предположим, что вычисляемой целью является x2, а ограничением является ограничение нелинейности x2-4x + 1.

    vals.F = x.^2;
    vals.Cleq = x.^2-4*x+1;

    В контексте оптимизации x2 минимизируется при условии удовлетворения ограничений. Для анализа чувствительности затраты и ограничения оцениваются для всех значений параметра. params.

    Дополнительные сведения о выводе функции затрат см. в разделе Указание выходов функции затрат.

Пример функции затрат с требованием на основе параметров см. в разделе Оптимизация конструкции для соответствия пользовательской цели (код). В этом примере минимизируется площадь поперечного сечения цилиндра - конструктивного параметра в гидравлическом цилиндре.

Требования к модельному сигналу

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

  1. Моделирование модели с использованием текущих значений конструктивных переменных в param. Существует несколько способов моделирования модели:

    • Используя sdo.SimulationTest object - если sdo.SimulationTest объект, simulator, является вводом функции затрат, значения параметров модели обновляются с помощью Parameters свойство тренажера. Затем использовать sim для моделирования модели.

      simulator.Parameters = params;
      simulator = sim(simulator);

      Пример см. в разделе Оптимизация конструкции для достижения пользовательской цели (код).

    • Используя sdo.Experiment object - при выполнении оценки параметров на основе данных ввода-вывода, определенных в sdo.Experiment объект, exp, обновить значения конструктивных переменных, связанных с экспериментом, с помощью setEstimatedValues способ. Создание симулятора с помощью createSimulator и смоделировать модель с использованием обновленной конфигурации модели.

      exp = setEstimatedValues(exp,params);
      simulator = createSimulator(exp,simulator);
      simulator = sim(simulator);

      Пример см. в разделе Оценка параметров модели в эксперименте (код).

    • Используя sim command - Если вы не используете sdo.SimulationTest или sdo.Experiment объекты, использование sdo.setValueInModel для обновления значений параметров модели и последующего вызова sim для моделирования модели.

      sdo.setValueInModel('model_name',param);
      LoggedData = sim('model_name');
  2. Извлеките интересующий регистрируемый сигнал, SignalOfInterest.

    Используйте SignalLoggingName для получения имени журнала моделирования.

    logName = get_param(simulator.ModelName,'SignalLoggingName');
    simLog = get(simulator.LoggedData,logName);
    Sig = get(simLog,'SignalOfInterest')
  3. Проанализируйте потребность и укажите ее как вывод функции затрат.

    Например, если задан шаг-отклик на сигнал с помощью sdo.requirements.StepResponseEnvelope объект, StepResp, вы можете использовать evalRequirement метод объекта для оценки нарушений цели и ограничения.

    vals.Cleq = evalRequirement(StepResp,SignalOfInterest.Values);

    Пример см. в разделе Оптимизация конструкции для удовлетворения требований к ответу на шаг (код). Дополнительные сведения о выводе функции затрат см. в разделе Указание выходов функции затрат.

Требования, основанные на линеаризации

При оптимизации или оценке требований к частотной области в функции затрат выполняется линеаризация модели и вычисление значений требований. Для линеаризации модели требуется программное обеспечение Simulink Control Design™.

Используйте SystemLoggingInfo имущество sdo.SimulationTest задание линейных систем для регистрации при моделировании модели. Пример см. в разделе Оптимизация конструкции для соответствия требованиям частотной области (код). В качестве альтернативы можно использовать linearize (Simulink Control Design) для линеаризации модели.

Примечание

Для моделей в режиме быстрого перезапуска Simulink нельзя использовать linearize команда.

Определение выходных данных функции затрат

Функция выборочных затрат myCostFunc продукция vals- структура с полями, задающими значения нарушений цели и ограничений. Второй выход - derivs- структура с полями, задающими производные цели и ограничения.

function [vals,derivs] = myCostFunc(params)

Функция затрат должна выводиться vals, структура с одним или несколькими из следующих полей, которые определяют значения нарушений цели и ограничения:

  • F - Значение стоимости или цели, оцененной в param.

  • Cleq - Значение нарушений ограничений нелинейного неравенства, оцениваемых в param. Для оптимизации решатель обеспечивает Cleq0.

  • Ceq - Значение нарушений ограничений нелинейного равенства, оцениваемых в param. Для оптимизации решатель обеспечивает Ceq = 0.

  • leq - Значение нарушений ограничения линейного неравенства, оцениваемое в param. Для оптимизации решатель обеспечивает leq0.

  • eq - Значение нарушений ограничения линейного равенства, оцениваемое в param. Для оптимизации решатель обеспечивает eq = 0.

  • Log - Дополнительная дополнительная информация из оценки.

При наличии нескольких ограничений одного типа объедините значения в вектор и укажите этот вектор в качестве соответствующего значения поля. Например, при наличии гидравлического цилиндра можно задать нелинейные ограничения неравенства для положения поршня (Cleq1) и давление в цилиндре (Cleq2). В этом случае укажите Cleq поле структуры вывода vals как:

vals.Cleq = [Cleq1; Cleq2];

Пример см. в разделе Оптимизация конструкции для достижения пользовательской цели (код).

По умолчанию sdo.optimize вычисляет целевой градиент и градиент зависимости, используя числовое возмущение. Можно также дополнительно вернуть градиенты как вывод дополнительной функции затрат. derivs. Где derivs должен содержать производные всех применимых нарушений целей и ограничений и указан как структура с одним или несколькими из следующих полей:

  • F - Производные от стоимости или цели.

  • Cleq - Производные нелинейных ограничений неравенства.

  • Ceq - Производные нелинейных ограничений равенства.

Производные не требуются для анализа чувствительности. Для оценки или оптимизации укажите GradFcn имущество sdo.OptimizeOptions как 'on'.

Несколько целей

Программное обеспечение Simulink Design Optimization не поддерживает многоцелевую оптимизацию. Однако можно вернуть целевое значение (vals.F) как вектор, который представляет несколько целевых значений. Программа суммирует элементы вектора и минимизирует эту сумму. Исключением из этого поведения является использование нелинейных наименьших квадратов (lsqnonlin) метод оптимизации. Нелинейный метод наименьших квадратов, используемый для оценки параметров, требует возврата остатков ошибок в виде вектора. В этом случае программное обеспечение минимизирует суммарный квадрат этого вектора. При отслеживании нескольких сигналов и использовании lsqnonlin, затем объедините остатки ошибок для различных сигналов в один вектор. Укажите этот вектор как F значение поля.

Пример оптимизации с одной целью с использованием метода градиентного спуска см. в разделе Оптимизация конструкции для соответствия пользовательской цели (код).

Пример многоцелевой оптимизации с использованием нелинейного метода наименьших квадратов см. в разделе Оценка параметров модели в эксперименте (код).

Удобные объекты в качестве дополнительных входных данных

Функция затрат должна иметь в качестве входных данных: paramsвектор конструктивных переменных, которые должны быть оценены, оптимизированы или использованы для анализа чувствительности. Можно указать дополнительные входные данные функции затрат с помощью объектов удобства, предоставляемых программным обеспечением Simulink Design Optimization. Объекты удобства создаются один раз и передаются как входные данные функции затрат для уменьшения избыточности кода и затрат на вычисления. Сведения об указании дополнительных входных данных для функции затрат см. в разделе Указание нескольких входных данных.

Объект удобстваИмя классаОписание
Объекты симулятораsdo.SimulationTest

Объект симулятора используется для моделирования модели с использованием альтернативных входных данных, параметров модели и значений начального состояния без изменения модели. Используйте SystemLoggingInfo имущество sdo.SimulationTest задание линейных систем для регистрации при наличии требований к частотной области.

В функции затрат используйте sim метод моделирования модели. Затем извлеките отклик модели из объекта и проанализируйте требования.

Пример см. в разделе Оптимизация конструкции для достижения пользовательской цели (код).

Примечание

Чтобы выполнить оценку, оптимизацию или оценку с помощью быстрого перезапуска Simulink, необходимо создать симулятор перед функцией затрат, а затем передать симулятор функции затрат.

Объекты требований

 Доступные объекты требований

Эти объекты используются для определения затрат или ограничений во временной и частотной областях, зависящих от значений конструктивных переменных.

В функции затрат используйте evalRequirement метод объекта для оценки того, насколько точно текущие конструктивные переменные удовлетворяют требованиям проекта.

Пример см. в разделе Оптимизация конструкции для удовлетворения требований к ответу на шаг (код).

Экспериментальные объектыsdo.Experiment

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

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

Пример см. в разделе Оценка параметров модели в эксперименте (код).

См. также

| | | | | |

Связанные темы