Функция стоимости является функцией MATLAB®, которая оценивает ваши конструктивные требования с помощью значений переменных проекта. После записи и сохранения функции стоимости, можно использовать его в оценке, оптимизации или анализе чувствительности в командной строке.
Когда вы оптимизируете или оцениваете параметры модели, вы обеспечиваете сохраненную функцию стоимости как вход к sdo.optimize
. В каждой итерации оптимизации, sdo.optimize
вызывает эту функцию и использует функциональный выход, чтобы решить направление оптимизации. Когда вы выполняете анализ чувствительности с помощью sdo.evaluate
, вы генерируете демонстрационные значения переменных проекта и оцениваете функцию стоимости для каждого демонстрационного значения с помощью sdo.evaluate
.
Чтобы изучить части функции стоимости, рассмотрите следующий демонстрационный функциональный myCostFunc
. Для переменной x проекта, myCostFunc
оценивает объективный x 2 и ограничение нелинейности x 2-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
Эта функция стоимости выполняет следующие задачи:
Задает входные параметры функции стоимости.
Функция стоимости, должно быть, как ввела, 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® Design Optimization™. Вы создаете объекты удобства однажды и передаете их как вход к функции стоимости, чтобы уменьшать сокращение кода и стоимость расчета.
Например, можно создать средство моделирования (sdo.SimulationTest
объект), чтобы симулировать вашу модель с помощью альтернативных параметров модели, не изменяя модель и передать средство моделирования функции стоимости.
simulator = sdo.SimulationTest(model) myCostFunc2 = @(params) myCostFunc_mult_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
, выход функции стоимости.
Предположим, что целью, которая будет вычислена, является x 2, и ограничение является ограничением нелинейности x 2-4x+1.
vals.F = x.^2; vals.Cleq = x.^2-4*x+1;
В контексте оптимизации x 2 минимизирован удовлетворяющий удовлетворению ограничениям. Для анализа чувствительности стоимость и ограничения оценены для всех значений параметра 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 быстро перезапускают режим, вы не можете использовать 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
значение поля.
Для примера одно-объективной оптимизации с помощью метода градиентного спуска смотрите Оптимизацию Проекта, чтобы Достигнуть Пользовательской Цели (Код).
Для примера нескольких - объективная оптимизация с помощью метода нелинейного метода наименьших квадратов, смотрите Оценочные Параметры модели На Эксперимент (Код).
Функция стоимости, должно быть, как ввела, params
, вектор переменных проекта, которые будут оценены, оптимизировал или использовал в анализе чувствительности. Можно задать дополнительные входные параметры к функции стоимости с помощью объектов удобства, обеспеченных программным обеспечением Simulink Design Optimization. Вы создаете объекты удобства однажды и передаете их как вход к функции стоимости, чтобы уменьшать сокращение кода и стоимость расчета. Для получения информации об определении дополнительных входных параметров к функции стоимости смотрите, Задают Несколько Входных параметров.
Объект удобства | ClassName | Описание |
---|---|---|
Simulator objects | sdo.SimulationTest | Используйте объект средства моделирования симулировать модель с помощью альтернативных входных параметров, параметров модели и значений начального состояния, не изменяя модель. Используйте В функции стоимости используйте Для примера смотрите Оптимизацию Проекта, чтобы Достигнуть Пользовательской Цели (Код). ПримечаниеЧтобы выполнить оценку, оптимизация или оценка с помощью Simulink быстро перезапускает, необходимо создать средство моделирования перед функцией стоимости, и затем передать средство моделирования функции стоимости. |
Requirements objects | Используйте эти объекты задать временной интервал и затраты частотного диапазона или ограничения, которые зависят от значений переменных проекта. В функции стоимости используйте Для примера смотрите Оптимизацию Проекта, чтобы Удовлетворить Требования Переходного процесса (Код). | |
Experiment objects | sdo.Experiment | Используйте объект эксперимента задать данные ввода - вывода, параметры модели и значения начального состояния для оценки параметра. В функции стоимости обновите значения переменных проекта, сопоставленные с экспериментом с помощью Для примера смотрите Оценочные Параметры модели На Эксперимент (Код). |
param.Continuous
| sdo.Experiment
| sdo.OptimizeOptions
| sdo.SimulationTest
| sdo.evaluate
| sdo.optimize
| sdo.setValueInModel