Функция стоимости является функцией 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.getStateFromModel
и sdo.getParameterFromModel
.
Поскольку функция стоимости называется неоднократно во время оценки, оптимизации или оценки, можно задать дополнительные входные параметры к функции стоимости, чтобы помочь уменьшать сокращение кода и стоимость вычисления. Однако 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
.
Демонстрационный vals
выходных параметров myCostFunc
функции стоимости, структура с полями, которые задают значения ограничительных нарушений и цели. Вторым выводом является 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
.
Журнал
Дополнительная дополнительная информация от оценки.
Если вы имеете несколько ограничений одного типа, конкатенируете значения в вектор и задаете этот вектор как значение соответствующего поля. Например, если у вас есть гидравлический цилиндр, можно задать нелинейные ограничения неравенства на поршневое положение (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. Вы создаете объекты удобства однажды и передаете их как вход к функции стоимости, чтобы уменьшать сокращение кода и стоимость вычисления. Для получения информации об определении дополнительных входных параметров к функции стоимости смотрите, Задают Несколько Входных параметров.
Объект удобства | 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