Динамическая задача оптимизации
Под динамическими будем понимать задачи, в которых соотношения между параметрами и целевой функцией выражаются с помощью дифференциальных уравнений или функционалов от функций времени. В качестве первого примера рассмотрим следующую задачу: Задан динамический объект, описываемый дифференциальным уравнением; Входным воздействием на объект является функция времени, содержащая неизвестный параметр Функция
Требуется найти такое значение параметра входного воздействия Строго говоря, приведенная задача не является задачей на нахождение минимума, но ее можно переформулировать как задачу минмизации при сохранении исходного смысла. Переформулировка заключается в том, что мы потребуем найти такое значение параметра входного воздействия, которое обеспечит минимальное значение Решение поставленной задачи реализовано в MATLAB c помощью следующих скриптов: Файл Main7.m %Для определения значения параметра um, программа вызывает %функцию поиска минимума (fminsearch) %Предполагается, что функция fmsfun7, на которую ссылается %fminsearch, вычисляет квадрат состояния объекта, %соответствующего моменту времени t=4 global t t1 x x0 u t1=2; x0=10; um=fminsearch(@fmsfun7, 1) plot(t, x, t, u)
Файл fmsfun7.m %Основное назначение программы – вычислить квадрат значения %состояния объекта, соответствующего моменту времени t=4. %Для вычисления значений состояния объекта используется %функция %ode45 которая реализует метод численного решения %соответствующего дифференциального уравнения. %Функция ode45fun8, на которую ссылается ode45, предназначена %для вычисления значений правой части дифференциального %уравнения объекта. function f=fmsfun7(um) global t t1 x x0 u umax umax=um; t=[]; x=[]; u=[]; [t, x]=ode45(@odefun7, [0 2*t1], [x0]); for i=1: length(t), if t(i)< t1 u(i)=(um/t1)*t(i); else u(i)=-(um/t1)*t(i)+2*um; end end f=x(length(t))*x(length(t));
Файл odefun7.m function f=odefun7(t, x) global t1 umax if t< t1 u=(umax/t1)*t; else u=-(umax/t1)*t+2*umax; end f=-0.5*x+u;
|