Функция затрат является MATLAB® функция, которая оценивает ваши требования к проекту с помощью проекта значений переменных. После записи и сохранения функции затрат можно использовать ее для оценки, оптимизации или анализа чувствительности в командной строке.
Когда вы оптимизируете или оцениваете параметры модели, вы обеспечиваете сохраненную функцию затрат как вход sdo.optimize
. При каждой итерации оптимизации, sdo.optimize
вызывает эту функцию и использует выход функции, чтобы решить направление оптимизации. Когда вы выполняете анализ чувствительности, используя sdo.evaluate
, вы генерируете выборочные значения конструктивных переменных и оцениваете функцию затрат для каждого выборочного значения используя sdo.evaluate
.
Чтобы понять части функции затрат, рассмотрите следующую выборочную функцию myCostFunc
. Для переменного проекта x, myCostFunc
оценивает целевую x2 и ограничение нелинейности x2- 4 <reservedrangesplaceholder0> +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
Эта функция затрат выполняет следующие задачи:
Определяет входы функции затрат.
Функция затрат должна иметь в качестве входа params
, вектор проектных переменных, которые будут оценены, оптимизированы или использованы для анализа чувствительности. Конструктивные переменные являются объектами параметров модели (param.Continuous
объекты) или моделировать начальные состояния (param.State
объекты).
Поскольку функция стоимости вызывается неоднократно во время оценки, оптимизации или оценки, можно задать дополнительные входы функции стоимости, чтобы помочь уменьшить избыточность кода и вычислительные затраты. Для получения дополнительной информации смотрите Задать входные параметры функции затрат.
Вычисляет требования.
Требования могут быть целями и ограничениями, основанными на параметрах модели, сигналах модели или линеаризированных моделях. В этой выборке функции затрат потребности основаны на проекте переменной x, параметре модели. Функция затрат сначала извлекает текущие значения конструктивных переменных, а затем вычисляет требования.
Для получения информации об вычислении требований на основе параметров модели, сигналов модели или линеаризированных моделей, см. «Вычислительные требования».
Задает значения требований как выходы, 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® Проектируйте 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
метод этих объектов для оценки цели и нарушений ограничений. Список доступных объектов потребности см. в разделе Объекты удобства в качестве дополнительных входных параметров.
Если у вас есть требования к параметрам модели, в функции затрат вы сначала извлекаете текущие значения параметров, а затем вычисляете требования.
Извлеките текущее значение параметров из params
.
x = params.Value;
Вычислите требование и укажите его следующим vals
, выход функции затрат.
Предположим, что вычисляемая цель x2 и ограничением является ограничение нелинейности x2- 4 <reservedrangesplaceholder0> +1.
vals.F = x.^2; vals.Cleq = x.^2-4*x+1;
В контексте оптимизации x2 минимизируется при условии удовлетворения ограничениям. Для анализа чувствительности стоимость и ограничения оцениваются для всех значений параметра params
.
Для получения дополнительной информации о выходе функции затрат см. раздел «Определение выходов функции затрат».
Пример функции затрат с требованиями, основанными на параметрах, см. в разделе Оптимизация проекта для достижения пользовательской цели (код). В этом примере вы минимизируете площадь поперечного сечения цилиндра, проекта, переменная в гидравлическом цилиндре.
Если у вас есть требования к сигналам модели, в функции стоимости вы симулируете модель с помощью текущих проектных значений переменных, извлеките интересующий сигнал и вычислите требование к сигналу.
Симулируйте модель с помощью текущего проекта значений переменных в param
. Существует несколько способов моделирования вашей модели:
Используя sdo.SimulationTest
объект - Если sdo.SimulationTest
объект, simulator
, является входным параметром функции затрат, вы обновляете значения параметров модели с помощью Parameters
свойство симулятора. Затем используйте sim
для симуляции модели.
simulator.Parameters = params; simulator = sim(simulator);
Для получения примера смотрите Оптимизация проекта для достижения пользовательской цели ( Кода).
Используя sdo.Experiment
объект - Если вы выполняете оценку параметра на основе входно-выходных данных, определенных в sdo.Experiment
объект, exp
, обновляйте значения конструктивных переменных, сопоставленные с экспериментом, используя setEstimatedValues
способ. Создайте симулятор, используя createSimulator
метод и моделирование модели с помощью обновлённого строения модели.
exp = setEstimatedValues(exp,params); simulator = createSimulator(exp,simulator); simulator = sim(simulator);
Для получения примера смотрите Оценку параметров модели по эксперименту (Коду).
Используя sim
команда - Если вы не используете sdo.SimulationTest
или sdo.Experiment
объекты, использование sdo.setValueInModel
чтобы обновить значения параметров модели, а затем вызвать sim
для симуляции модели.
sdo.setValueInModel('model_name',param); LoggedData = sim('model_name');
Извлеките интересующий логгирование сигнал, SignalOfInterest
.
Используйте SignalLoggingName
Параметр модели для получения имени журнала моделирования.
logName = get_param(simulator.ModelName,'SignalLoggingName'); simLog = get(simulator.LoggedData,logName); Sig = get(simLog,'SignalOfInterest')
Вычислите потребность и укажите ее как выход функции затрат.
Для примера, если вы задали переходную характеристику, связанную с сигналом, используя 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
. Для оптимизации решатель обеспечивает Cleq
≤ 0
.
Ceq
- Значение нелинейных нарушений ограничений равенства, оцененных в param
. Для оптимизации решатель обеспечивает Ceq = 0
.
leq
- Значение линейных нарушений ограничений неравенства, оцененных в param
. Для оптимизации решатель обеспечивает leq
≤ 0
.
eq
- Значение нарушений линейного ограничения равенства, оцененное в param
. Для оптимизации решатель обеспечивает eq = 0
.
Log
- Дополнительная необязательная информация от оценки.
Если у вас есть несколько ограничений одного типа, соедините значения в вектор и задайте этот вектор как соответствующее значение поля. Для образца, если у вас есть гидравлический цилиндр, можно задать нелинейные ограничения неравенства на положении поршня (Cleq1
) и давление в гидроцилиндре (Cleq2
). В этом случае задайте Cleq
поле структуры output vals
как:
vals.Cleq = [Cleq1; Cleq2];
Для получения примера смотрите Оптимизация проекта для достижения пользовательской цели ( Кода).
По умолчанию, sdo.optimize
команда вычисляет градиенты цели и ограничений с помощью числового возмущения. Вы также можете опционально вернуть градиенты как выход дополнительной функции затрат, derivs
. Где derivs
должна содержать производные от всех применимых целей и нарушений ограничений и определяется как структура с одним или несколькими из следующих полей:
F
- Производные от стоимости или цели.
Cleq
- Производные нелинейных ограничений неравенства.
Ceq
- Производные нелинейных ограничений равенства.
Производные не требуются для анализа чувствительности. Для оценки или оптимизации задайте GradFcn
свойство sdo.OptimizeOptions
как 'on'
.
Программное обеспечение Simulink Design Optimization не поддерживает многоцелевую оптимизацию. Однако можно вернуть целевое значение (vals.F
) как вектор, который представляет несколько целевых значений. Программа суммирует элементы вектора и минимизирует эту сумму. Исключение из этого поведения - в использовании нелинейных методов наименьших квадратов (lsqnonlin
) метод оптимизации. Нелинейный метод наименьших квадратов, используемый для оценки параметра, требует, чтобы вы вернули невязки ошибок в качестве вектора. В этом случае программное обеспечение минимизирует квадрат суммы этого вектора. Если вы отслеживаете несколько сигналов и используете lsqnonlin
затем объедините невязки ошибок для различных сигналов в один вектор. Задайте этот вектор как F
значение поля.
Для примера оптимизации с одной целью с использованием метода градиентного спуска, смотрите Оптимизацию проекта, чтобы соответствовать пользовательской цели (код).
Для примера многоцелевой оптимизации с использованием нелинейного метода наименьших квадратов смотрите Оценку параметров модели по эксперименту (Code).
Функция затрат должна иметь в качестве входа params
, вектор проектных переменных, которые будут оценены, оптимизированы или использованы для анализа чувствительности. Можно задать дополнительные входы функции затрат с помощью объектов удобства, предоставленных программным обеспечением Simulink Design Optimization. Вы создаете объекты удобства один раз и передаете их как вход в функцию затрат, чтобы уменьшить избыточность кода и вычислительные затраты. Для получения информации об указании дополнительных входов для функции затрат, смотрите Задать несколько входных параметров.
Объект удобства | Имя класса | Описание |
---|---|---|
Simulator objects | sdo.SimulationTest | Используйте объект симулятора, чтобы симулировать модель с помощью альтернативных входов, параметров модели и значений начального состояния без изменения модели. Используйте В функции затрат используйте Для получения примера смотрите Оптимизация проекта для достижения пользовательской цели ( Кода). Примечание Чтобы выполнить оценку, оптимизацию или оценку с помощью быстрого перезапуска Simulink, необходимо создать симулятор перед функцией стоимости, а затем передать симулятор в функцию стоимости. |
Requirements objects | Используйте эти объекты, чтобы задать затраты или ограничения во временной и частотной областях, которые зависят от значений конструктивных переменных. В функции затрат используйте Для получения примера смотрите Оптимизацию проекта, чтобы соответствовать Переходная характеристика требованиям ( Кодам). | |
Experiment objects | sdo.Experiment | Используйте объект эксперимента, чтобы задать входно-выходные данные, параметры модели и значения начального состояния для оценки параметра. В функции затрат обновите значения конструктивных переменных, сопоставленные с экспериментом, используя Для получения примера смотрите Оценку параметров модели по эксперименту (Коду). |
param.Continuous
| sdo.evaluate
| sdo.Experiment
| sdo.optimize
| sdo.OptimizeOptions
| sdo.setValueInModel
| sdo.SimulationTest