Опубликован: 18.05.2011 | Доступ: свободный | Студентов: 965 / 104 | Оценка: 4.40 / 4.20 | Длительность: 12:30:00
Лекция 19:

Oбъектно-opиентированное управление решениями дифференциальных уравнений

< Лекция 18 || Лекция 19: 12 || Лекция 20 >
Аннотация: Рассмотрены вопросы управления правыми частями дифференциальных уравнений. Приведены общие постановки задач управления решениями. Дана объектно-ориентированная реализация методов управления решениями дифференциальных уравнений. Проведены вычислительные эксперименты.

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

Многие процессы, описываемые дифференциальными уравнениями, являются управляемыми системами. Дадим формальное описание управляемой системы.

Пусть D, D_\Bbb{T} имеют тот же смысл, что и в прошлой лекции. Пусть теперь еще выделено семейство множеств U(x,t)\subset\Bbb{R}^m, где x\in\Bbb{R}^n и t\in[0,\Bbb{T}] являются параметрами. Множество U(x,t) называется множеством допустимых управлений.

Пусть теперь задана функция f(x,u,t), которая определена при x\in\overline{D}, u\in\bigcup\limits_{x\in\overline{D},t\in[0,\Bbb{T}]}U(x,t), t\in[0,\Bbb{T}]. Будем рассматривать обыкновенное дифференциальное уравнение с управлением

\begin{array}{c}
y'(t)=f(y(t),u(t),t), \\
\\
u(t)\in U(y(t),t)\ t\in[0,\Bbb{T}].\\
\end{array} ( 18.1)
и начальным условием
y(0)=y^0,\ y_0\in D. ( 18.2)
Решением задачи 18.1-18.2 на [0,T] является измеримая функция u(t)\in U(y(t),t) и абсолютно непрерывная функция y(t)\in \overline{D}, t\in[0,T], и эти функции удовлетворяют 18.1-18.2.

Мы сформулировали задачу на управления решениями дифференциальных уравнений в довольно общем виде. Однако, как правило, управление осуществляется с некоторой целью. Для этого вводится так называемый целевой функционал. Целевым функционалом называется любая числовая функция определенная на решении задачи 18.1-18.2. Обозначим этот функционал следующим образом

I=I(y,u)\in\Bbb{R}.
При наличии целевого функционала мы приходим к задаче оптимального управления, то есть задаче о нахождении такого решения, которое доставляет максимум (или минимум) целевому функционалу. На практике, однако, часто применяется понятие решение задачи управления, удовлетворительное с точки зрения целевого функционала. Мы будем говорить, что решение задачи управления --- пара функций y и u является удовлетворительным с точки зрения целевого функционала, если
I(y,u)\in G,
где G\subset\Bbb{R} называется удовлетворительной областью значения целевого функционала. Заметим, что G может быть произвольным непустым множеством.

Обратимся к моделированию задач управления. Общая схема такова

  1. Задаем начальное управление
  2. Решаем систему дифференциальных уравнений с начальным управлением на одном шаге методом Рунге-Кутты
  3. По полученному решению на очередном шаге меняем (в случае необходимости) управление
  4. Повторяем шаги 2-3 до тех пор пока решение и управления не станут удовлетворительными с точки зрения целевого функционала

Следует отметить, что далеко не всегда удовлетворительное с точки зрения целевого функционала решение задачи управления является оптимальным решением. Более того, существует такие задачи управления решениями, для которых не существует оптимального решения.

Реализуем эту схему в виде абстрактного класса, который мы создадим, как наследник класса TRungeKutta.

\begin{verbatim}
    abstract class TControlSystem : TRungeKutta
    {
        public int M;
        public double[] U;
        public TControlSystem(int N, int M) : base(N)
        {
            this.M = M;
            U = new double[M];
        }

        abstract public void SetU();

        public override void NextStep(double dt)
        {
            SetU();
            base.NextStep(dt);
        }
    }
\end{verbatim}

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

y''(t)+u(t)y'(t)+y(t)=0,
с начальными условиями
y(0)=1,
y'(0)=0.
Здесь управление осуществляет изменением коэффициента затухания. Мы будем рассматривать множество допустимых управлений состоящее всего из двух точек:
U=\{0,1\}\subset\Bbb{R}.
Нулевое значение управления соответствует отсутствию затухания в системе, а равное единице - наличию постоянного затухания. При отсутствии затухания наша система будет совершать гармонические колебания. Предположим, что наша цель состоит в том, чтобы поддерживать гармонические колебания с амплитудой 0.2. Мы будем использовать так называемое программное управление, т.е. будем выбирать наше управление зависящим от текущего положения системы. Будем использовать следующую формулу нашего управления:
u(y,t)=\left\{%
\begin{array}{ll}
    0, & |y|\le 0.2 \\
    1, & |y|>0.2 \\
\end{array}%
\right.
Таким образом, если положение осциллятора меньше заданного, то мы не используем затухания, а в случае, когда положение осциллятора больше заданного, мы используем затухание. Реализуем сказанное.

\begin{verbatim}
    class TOscControl : TControlSystem
    {
        public TOscControl() : base(2, 1)
        {
            U[0] = 0;
        }

        public override void SetU()
        {
            if (Math.Abs(Y[0]) > 0.2)
            {
                U[0] = 1;
            }
            else
            {
                U[0] = 0;
            }
        }

        public override void F(double t, double[] Y,
        ref double[] FY)
        {
            FY[0] = Y[1];
            FY[1] = -Y[0] - U[0] * Y[1];
        }
    }
\end{verbatim}

И проведем вычислительный эксперимент.

\begin{verbatim}
TOscControl Osc = new TOscControl();
Osc.SetInit(0, new double[2] { 1, 0 });

double h = 0.01;

StreamWriter F = File.CreateText("control.txt");
while (Osc.GetCurrent() < 50.0 + h / 2.0)
{
    Console.WriteLine("{0}\t{1}\t{2}\t{3}",
    Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]);
    F.WriteLine("{0}\t{1}\t{2}\t{3}",
    Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]);

    Osc.NextStep(h);
}
F.Close();
\end{verbatim}
< Лекция 18 || Лекция 19: 12 || Лекция 20 >