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

Функция стоимости является функцией 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.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 этих объектов оценить ограничительные нарушения и цель. Для списка доступных объектов требования смотрите Объекты Удобства как Дополнительные Входные параметры.

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

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

  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.

Задайте Выходные параметры функции стоимости

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

function [vals,derivs] = myCostFunc(params)

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

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

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

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

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

  • 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 objectssdo.SimulationTest

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

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

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

Примечание

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

Requirements objects

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

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

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

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

Experiment objectssdo.Experiment

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

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

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

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

| | | | | |

Похожие темы