Запишите функцию стоимости

Функция стоимости является функцией 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

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

  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_mult_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, выход функции стоимости.

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

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

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

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

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

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

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

  1. Симулируйте модель с помощью текущих значений переменных проекта в 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');
  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 быстро перезапускают режим, вы не можете использовать 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 objectssdo.SimulationTest

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

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

Для примера смотрите Оптимизацию Проекта, чтобы Достигнуть Пользовательской Цели (Код).

Примечание

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

Requirements objects

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

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

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

Для примера смотрите Оптимизацию Проекта, чтобы Удовлетворить Требования Переходного процесса (Код).

Experiment objectssdo.Experiment

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

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

Для примера смотрите Оценочные Параметры модели На Эксперимент (Код).

Смотрите также

| | | | | |

Похожие темы