Оптимизация симуляции или обыкновенного дифференциального уравнения

Что оптимизирует симуляцию или ОДУ?

Иногда ваша целевая функция или нелинейные ограничительные значения функции доступны только симуляцией или числовым решением обыкновенного дифференциального уравнения (ODE). Такие задачи оптимизации имеют несколько общих характеристик и проблем, обсужденных в Потенциальных проблемах и Решениях.

Для основанного на проблеме примера оптимизации ОДУ сочтите целесообразным ОДУ, Основанное на проблеме. Для основанного на решателе примера сочтите целесообразным Обыкновенное дифференциальное уравнение (ODE).

Чтобы оптимизировать модель Simulink® легко, попытайтесь использовать Simulink Design Optimization™.

Потенциальные проблемы и решения

Проблемы в конечных разностях

Решатели Optimization Toolbox™ используют производные цели и ограничительных функций внутренне. По умолчанию они оценивают эти производные с помощью приближений конечной разности формы

F(x+δ)F(x)δ

или

F(x+δ)F(xδ)2δ.

Эти приближения конечной разности могут быть неточными потому что:

  • Большое значение δ позволяет большей нелинейности влиять на конечную разность.

  • Маленькое значение δ приводит к погрешности из-за ограниченной точности в численных данных.

А именно, для симуляций и числовых решений ОДУ:

  • Симуляции часто нечувствительны к небольшим изменениям в параметрах. Это означает, что, если вы используете слишком небольшое возмущение δ, симуляция может возвратить побочную предполагаемую производную 0.

  • Обе симуляции и числовые решения ОДУ могут иметь погрешности в своих функциональных оценках. Эти погрешности могут быть усилены в приближениях конечной разности.

  • Числовое решение ОДУ вводит шум в значениях, намного больше, чем точность машины. Этот шум может быть усилен в приближениях конечной разности.

  • Если решатель ОДУ использует переменные размеры шага, то иногда количество шагов ОДУ в оценке F (x + δ) может отличаться от количества шагов в оценке F (x). Это различие может привести к побочному различию в возвращенных значениях, дав вводящую в заблуждение оценку производной.

Предложения для конечных разностей

Избегайте Конечных разностей при помощи Прямого Поиска.  Если у вас есть лицензия Global Optimization Toolbox, можно попытаться использовать patternsearch как ваш решатель. patternsearch не пытается оценить градиенты, не страдает от ограничений в проблемах в Конечных разностях.

Если вы используете patternsearch для дорогих (длительных) функциональных оценок используйте Cache опция:

options = optimoptions('patternsearch','Cache','on');

Если вы не можете использовать patternsearch, и имейте относительно низко-размерную проблему безусловной минимизации, попробуйте fminsearch вместо этого. fminsearch не использует конечные разности. Однако fminsearch не быстрый или настраиваемый решатель.

Установите Большие Конечные разности.  Можно иногда избегать проблем в проблемах в Конечных разностях путем делания больших шагов конечной разности, чем значение по умолчанию.

  • Если вы имеете MATLAB® R2011b или позже, устанавливаете опцию размера шага конечной разности на значение, больше, чем sqrt(eps) по умолчанию или eps^(1/3), такой как:

    • Для R2011b–R2012b:

      options = optimset('FinDiffRelStep',1e-3);
    • Для R2013a–R2015b и решателя под названием 'solvername':

      options = optimoptions('solvername','FinDiffRelStep',1e-3);
    • Для R2016a вперед и решателя под названием 'solvername':

      options = optimoptions('solvername','FiniteDifferenceStepSize',1e-3);

    Если вы имеете различные шкалы в различных компонентах, устанавливаете размер шага конечной разности на вектор, пропорциональный шкалам компонента.

  • Если вы имеете MATLAB R2011a или ранее, устанавливаете DiffMinChange опция к большему значению, чем 1e-8 по умолчанию, и возможно набор DiffMaxChange опция также, такая как:

    options = optimset('DiffMinChange',1e-3,'DiffMaxChange',1);

Примечание

Это затрудняет, чтобы знать, как установить эти размеры конечной разности.

Можно также попытаться установить центральные конечные разности:

options = optimoptions('solvername','FiniteDifferenceType','central');

Используйте Функцию Оценки Градиента.  Чтобы избежать проблем оценки конечной разности, можно дать аппроксимированную функцию градиента в объективных и нелинейных ограничениях. Не забудьте устанавливать SpecifyObjectiveGradient опция к true использование optimoptions, и, при необходимости, также набор SpecifyConstraintGradient опция к true.

  • Для некоторых ОДУ можно оценить градиент численно в то же время, что и вы решаете ОДУ. Например, предположите дифференциальное уравнение для своей целевой функции, которая z (t, x)

    ddtz(t,x)=G(z,t,x),

    где x является вектором параметров, по которым вы минимизируете. Предположим, что x является скаляром. Затем дифференциальное уравнение для его производного y,

    y(t,x)=ddxz(t,x)

    ddty(t,x)=G(z,t,x)zy(t,x)+G(z,t,x)x,

    где z (t, x) является решением ОДУ целевой функции. Можно решить для y (t, x) в той же системе дифференциальных уравнений как z (t, x). Это решение дает вам аппроксимированную производную, никогда не беря конечные разности. Для нескалярного x решите один ОДУ на компонент.

    Для теоретических и вычислительных аспектов этого метода смотрите Лейса и Крамера [2]. Для вычислительного опыта с этой и конечной разностью методы см. рисунок 7 Raue и др. [3].

  • Для некоторых симуляций можно оценить производную в рамках симуляции. Например, метод отношения правдоподобия описал в Реимене и Weiss [4] или бесконечно малом аналитическом методе возмущения, анализируемом в Heidelberger, главном администраторе, Zazanis и Сури [1] оценочные производные в той же симуляции, которая оценивает ограничительные функции или цель.

Используйте Более трудные Допуски ОДУ.  Можно использовать odeset установить AbsTol или RelTol Допуски решателя ОДУ к значениям ниже их значений по умолчанию. Однако выбор слишком маленького допуска может вести, чтобы замедлить решения, отказ сходимости или другие проблемы. Никогда не выбирайте допуск меньше, чем 1e-9 для RelTol. Нижний предел на каждом компоненте AbsTol зависит от шкалы вашей проблемы, таким образом, нет никакого совета.

Проблемы в стохастических функциях

Если симуляция использует случайные числа, то оценка цели или ограничительной функции дважды может возвратить различные результаты. Это влияет и на функциональную оценку и на оценку конечной разности. Значение конечной разности может быть во власти изменения из-за случайности, а не изменение из-за различной оценки указывает x и x + δ.

Предложения для стохастических функций

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

function f = mysimulation(x)
rng default % or any other resetting method
...
end

Для получения дополнительной информации смотрите, Генерируют Случайные числа, Которые Повторяемы (MATLAB).

Общее вычисление цели и ограничения

Часто, симуляция выполняет и целевую функцию и ограничения во время той же запущенной симуляции. Или, и объективные и нелинейные ограничительные функции используют тот же дорогой расчет. Решатели, такие как fmincon отдельно выполните целевую функцию и нелинейные ограничительные функции. Это может привести к большому снижению эффективности, потому что решатель вызывает дорогой расчет дважды. Чтобы обойти эту проблему, используйте метод в Объективных и Нелинейных Ограничениях в Той же Функции, или, при использовании подхода, основанного на проблеме, Цели и Ограничений, Имеющих Общую Функцию в Последовательном или Параллельном, Основанном на проблеме.

Отказ в оценке функции цели или ограничения

Ваша симуляция или ОДУ могут перестать работать для некоторых значений параметров.

Предложения для отказов оценки

Установите Соответствующие Границы.  В то время как вы не можете знать все ограничения на пространство параметров, попытайтесь установить соответствующие границы на всех параметрах, и верхних и ниже. Это может ускорить вашу оптимизацию и может помочь решателю избежать проблематичных значений параметров.

Используйте Решатель Который Границы Отношений.  Как описано в Итерациях Может Нарушить Ограничения, некоторые алгоритмы могут нарушить связанные ограничения в промежуточных итерациях. Для оптимизации симуляций и ОДУ, используйте алгоритмы, которые всегда повинуются связанным ограничениям. См. Алгоритмы, Которые Удовлетворяют Связанным Ограничениям.

Возвратите NaN.  Если ваш решатель симуляции или ОДУ успешно не выполняет объективную или нелинейную ограничительную функцию в точке x, имейте свой функциональный возврат NaN. Большая часть Optimization Toolbox и решателей Global Optimization Toolbox имеют робастность, чтобы делать попытку различного итеративного шага, если они сталкиваются с NaN значение. Эти устойчивые решатели включают:

  • fmincon interior-point, sqp, и trust-region-reflective алгоритмы

  • fminunc

  • lsqcurvefit

  • lsqnonlin

  • patternsearch

Некоторые люди испытывают желание возвратить произвольное большое значение целевой функции в неудачной, неосуществимой, или другой плохой точке. Однако эта практика может перепутать решатель, потому что решатель не понимает, что возвращенное значение произвольно. Когда вы возвращаете NaN, решатель может попытаться оценить в различной точке.

Библиография

[1] Heidelberger, P., X.-R. Главный администратор, М. А. Зэзэнис, и Р. Сури. Свойства сходимости бесконечно малых аналитических оценок возмущения. Наука управления 34, № 11, стр 1281–1302, 1988.

[2] Leis, J. R. и Крамер, M.A. Одновременное Решение и Анализ чувствительности Систем, Описанных Обыкновенными дифференциальными уравнениями. ACM Trans. Mathematical Software, Издание 14, № 1, стр 45–60, 1988.

[3] Raue, A. и др. Уроки, Извлеченные из Количественного Динамического Моделирования в Системной биологии. Доступный в http://www.plosone.org/article/info:doi/10.1371/journal.pone.0074335, 2013.

[4] Реимен, M. I. и А. Вайс. Анализ чувствительности через отношения правдоподобия. Proc. 18-я Зимняя Конференция по Симуляции, ACM, Нью-Йорк, стр 285–289, 1986.