/
Text
веских систем сложной
Во второй части изучаются объектно-ориентированные реализации поня-
тий, связанных с линейными дискретными и непрерывными системами управ-
ления, оптимизируемыми по квадратичному критерию оптимальности с учетом
изопериметрических ограничений.
Часть 1. ОБЪЕКТНО - ОРИЕНТИРОВАННЫЙ ПОДХОД К
МОДЕЛИРОВАНИЮ ДИНАМИЧЕСКИХ СИСТЕМ
последовательности векторов состояния математической модели с некоторым
шагом по времени.
Непрерывная модель обычно задается системой обыкновенных диффе-
ренциальных уравнений, которая в векторной форме имеет вид
функция; 10 и Т устанавливают интервал времени существования модели.
Начальный вектор состояния Х(1$ считается заданным. Принято называть
ltob иногда
ределенностью физического смысла независимой переменной будем называть
ее «системным временем».
где Xt = A’l/,) - вектор состояния; F - векторная функция, устанавливающая
число шагов.
Для получения вектора состояния модели (1.1) в конечный момент систем-
дифференциальных уравнений на интервале ее существования при заданных
начальных условиях. В результате приходим к модели вида (1.2), в которой
ti=tc. t2=T. N~l, a Ffj - оператор интегрирования.
Численное интегрирование уравнений заключается в реализации итераци-
онного процесса
(1.3)
где I - номер шага интегрирования; М - число шагов; приращение, вы-
Нетрудно видеть, что модель процесса интегрирования аналогична (1.2),
При этом
Таким образом, модель (1.1) в конечном счете сводится к модели (1.2). Это
позволяет принять модель (1.2) за основу, т.е. рассматривать ее как абстрактное
понятие, дающее начало цепочке классов математических моделей различной
рашение дискретного процесса (1.2) скрыто в самой модели, а приращение
процесса (1.3) определяется методом численного интегрирования уравнений
дить признаком, который одназначно идентифицирует ее тип.
отнесен вектор значений функций правой части и правило вычисления нового
вектора. Таким образом, информационная модель динамической системы
номер текущего шага моделирования;
число шагов на интервале моделирования;
♦ правило вычисления компонент вектора правых частей;
♦ признак дискретности модели.
Отметим, что в общем случае вектор правых частей может быть функцией
всех приведенных выше параметров.
»объекта удобно представить в ан-
Входами модели являются системное время и текущий вектор состояния и
единый вектор входа модели. Текущий вектор входа используется для вычис-
могут быть различными. Первые и компонент вектора входа - зависимые пере-
менные. Остальные компоненты можно использовать для хранения управляю-
нимает первые п его компонент, где п - количество производных в правой
Следует обратить внимание чиателя на то, что библиотека Simulate пред-
лагает те ияи иные возможности. Использовать их или нет - личное дело про-
реальных задачах система уравнений, описывающих математическую
) нужно учитывать силу <
классе модели предусмотрен список методов-процедур, i
зываются последовательно. Составом списка можно управлять в процессе вы-
полнения программы. Таким образом, любая математическая модель может
i структурой соотнес
г иерархическую структуру. До по-
приводить иерархическую модель к одноуровневой до написания программы.
ссылками на объект-владелец подсистемы и на подчиненные подсистемы. По-
этому можно говорить о предопределенной связи космического аппарата с
«надсистемой» или с «внешним миром». Надсистемой может быть космическая
, схема декомпозиции достаточно условна. Так, детализацию можно
: элементы могут обмениваться информацией друг с другом. Это означает,
) в процессе моделирования любая из подсистем имеет доступ к свойствам и
Объекты-дннамические системы являются строительными блоками при-
чиной программы. Они не могут функционировать в отрыве от среды, кото-
Среда моделирования в библиотеке simulate 1.0 представлена классом
улятор». Этот класс инкапсулирует задачу моделирования сложной сис-
путем численного интегрирования дифференциальных уравнений с ис-
> моделей общего вида существуют ли-
। содержит матрицы коэффициентов. Библио*
мизации.
Рассмотрим иерархию классов simulate 1.0, отражающих абстракции
математических моделей. Схема наследования показана на рис Л .2.
Нетрудно видеть, что общим предком всех рассматриваемых здесь клас-
сов является TPersistent. Так рекомендует руководство по Delphi. Первым
представителем (т.е. родительским классом) в библиотеке simulate является
I Owner, которые служат для
зации элементов любой математической модели. Так, TFloatVar - это класс
скалярных переменных с плавающей точкой. Его наследник TAngle трактует
переменную как угловую величину с присущими ей свойствами.
ся переменные типа TFloatVar, а класс TMatrix - матрицу с элементами типа
Класс TProcList является аналогом TList, но его элементами являются
не объекты, а процедуры. Он создан для представления структуры переменного
состава в правой части математической модели.
Класс TCustomPoxat соответствует точке в трехмерном декартовом про-
странстве. Объекты этого класса характеризуются декартовыми и сферически-
Вертикальная ветвь классов содержит абстракции с общим предком
объект обращается к виртуальным методам, с помощью которых можно уста-
новить исходную структуру правой части (метод initAltPart) и задать какие-
структуры. Этот класс владеет списком, элементами которого являются
ссылки на объекты-подсистемы данной системы. При создании представителя
класса TDynamicSyscem, элементам списка можно присваивать ссылку на лю-
TDynamicSyscem. Таким образом поддерживается возможность представления
сложной иерархии математической модели.
пении правых частей. При изменении системного времени сначала устанавли-
екта так, как это показано на рис. 1.4 (здесь SlfS2,...S„ - объекты-подсистемы).
Такая последовательность поддерживает приоритет объекта
ynatnicSystetn над его подсистемами.
Для обслуживания списка подсистем имеются специальные методы. При
TDynsmicSystem. Следовательно, программист может «добраться» до полей и
методов системы верхнего уровня, используя свойство подсистемы Owner. Если
система активируется или пассивизируется изменением свойства Enabled, то
же происходит и со всеми ее подсис-
Например, класс системы диф-
нциальных уравнений второго
порядка
при а^О.1; Ь=1. можно объявить следующим образом:
Класс TCoetoajrterator инкапсулирует итерационный процесс вида (1.2).
1 (1.2) при заданных начальных услови-
следников можно использовать непосредственно. Однако для моделирования
сложной системы следует применять только объект класса TSimulator.
рархической структуры с подсистемами различных видов. При этом численный
метод интегрирования применяется только к тем ее подсистемам, которые
TCustomlterator с учетом признака дискретности модели.
реализующие метод Эйлера (TEuler), Эйлера-Коши (TEuierCauchy), Рунге-
Если потребуется написать собственный
метод численного интегрирования, доста-
/ющий иной
может создавать собственные классы моделей и методов.
Класс TSimulat.oz инкапсулирует общую задачу моделирования динами-
вания. Моделирование осуществляется на интервале времени
[iniTime...SysTune] с шагом step. Ключевыми свойствами класса являются
ссылка на модель (Model) и ссылка на численный метод (Method). По умолча-
нию в качестве метода создается экземпляр TCustomiterator.
Владельцем объекта класса TSimulator может быть как динамическая
система, так и среда прикладной программы, например - диалоговая форма.
В первом случае в составе сложной модели можно иметь подсистему, которая
представлена дифференциальными уравнениями, но с помощью класса
TSimulator она сведена к дискретной. Иными словами, на шаге моделирования
некоторой системы имеется возможность получить выходные параметры ее
Во втором случае мы обеспечиваем связь объекта - симулятора с визуаль-
ными компонентами программы. Эта возможность явно не поддерживается.
Однако она может быть реализована путем создания соответствующей компе-
боту [3]. Р ₽
Для управления процессом моделирования класс TSinulacor имеет ряд
свойств-ссылок на процедуры-обработчики событий типа TNotifyEvent. Их
семантика аналогична событиям, принятым в визуальных компонентах Delphi.
Так, при входе в цикл моделирования возникает событие OnEnter, при измене-
Рассмотрим примеры прикладных программ, которые иллюстрируют ме-
тодику применения классов динамических систем Simulate 1. о.
Для составления программы интегрирования системы обыкновенных диф-
ференциальных уравнений на заданном интервале времени, программист дол-
1) обеспечить доступ своих программ и модулей к модулям библиотеки
simulate i.o с именами ucustom (классы динамических систем),
uCommon (сервисные функции) и uvector (векторы и матрицы) с ломо-
; уравнений и перекрыть
i симулятора,
Необходимо оценить точность численного интегрирования системы вто-
рого порядка
xt(l)=sm(t). xj(t)=cos(t).
решение этой системы имеет вид
объектно- •'{ [ ’г -ур i л примера предста-
вим так, как показано на рис. 2.1. Здесь TSinComp - наследник класса
| TSinAaElfEqn j Уравнения (2.0
| TSlnto«lyt | Функция Sin(t) ~~|
числении абсолютной потреш-
численным решениями.
Класс TSinAsDifEqn-на-
следник класса TDifEquation.
Он реализует систему уравнений (2.1). Класс TSinftnalyt - наследник класса
обработчиком выходных данных своих подсистем.
Главное окно программы данного приме-
ра показано на рис.2.2.
Результаты моделирования отображаются
с помощью компонента Memoi и выводятся в
текстовый файл. Запуск программы осуществ-
Текст программы с комментариями при-
№НИЙ с двумя входами и
для задания начальных условий интегрирования. Метод Dynamics вычисляет
производные при текущих значениях зависимых переменных. Класс
TSinftnalyt определяет подсистему, единственным выходом которой является
текущее значение синуса, вычисляемое с помощью стандартной функции, в те-
«главной» системе нашего примера. Его метод Dynamics вычисляет разность
процедурами-обработчиками событий симулятора OnEnter, onOutput, onExit
итератор (численный метод) в параметре Sender: TObject. Поскольку все клас-
intest.dat, очищает этот файл и компонент
тем на каждом шаге моделирования. Его оператор
fember [ 1 ] для доступа ко второй. В данном примере система интегрируется
истодом Эйлера на интервале времени [О..2п].
На рис.2.3,а показан график, построенный с помощью программы Grapher
L. 09 по текстовому файлу sintest. dat, созданному программой.
Нетрудно видеть, что погрешность метода Эйлера существенна. Заменим t
обработчике события формы TForml .OnButtoniclick строку
: снова выполним программу. Кривые точного и численного решений, пред-
точность метода Эйлера-Коши второго порядка в данной задаче при принятом
шаге интегрирования
§ 2.2. Переход с одной орбиты на другую
мического аппарата (КА) с одной орбиты на другую при непрерывно дейст-
вующем малом реактивном ускорении. Математическая модель движения в
безразмерных переменных имеет вид [5]:
где г -безразмерное расстояние между КА и центром Земли; и, V - безразмер-
ные составляющие орбитальной скорости, направленные по радиусу и нормали
к нему в плоскости движения; (2- долгота восходящего узла; аргумент пе-
ригея; истинная аномалия.
Безразмерная скорость связана с радиусом соотношением
Безразмерные составляющие ускорения зададим следующими функцями вре-
“Д')=°. «.(')= 0«мЛ(')»в»(')=~аsiK*(t)sgnfpofa+&)),
(2.3)
(2-4)
г - номинальное безразмерное ускорение.
Составляющие управляющего ускорения выбраны так, что радиус орбиты
са и наклонения задаются пользователем, а все остальные - нулевые.
Зависимости ускорения от времени, т.е. алгоритм управления системой
(2-2), целесообразно выделить в отдельный объект. Это даст возможность заме-
екта, реализующего уравнения движения. Реализация алгоритмов управления в
непосредственно в процессе моделирования.
В качестве главной системы данного примера выберем дифференциальные
описывается уравнениями (2.3), (2.4). Тогдв главная система будет наследником
TDif Equation, а блок управления - наследником TDynamicOb ject.
В рамках данного примера мы иллюстрируем создание сложной модели с
ставляющими.
На листинге 2.2 приведен модуль классов данного примера.
Вычисление правых частей уравнения движения (2.2) реализует метод
свойству х(index] соответствует производная DxDt[index]. Считается, что
иной равен порядковому номеру уравнения в системе
1(2.3), (2.4). Его свой-
«ние; Аг - ралиаль-
Алгоритм управления запрограммирован в методе Dynamics.
Форма главного окна прикладной программы показана на рис. 2.4, а
п
Labels: TLabel;
edRadius: TEdit
GroupBox2: TGroupBox;
GroupBox3; TGroupBox;
LabelS: TLabel:
tbim ; TSimuiatoi
FOrbSteps
Bevell: TBeve
cbMethod: TCon_.
Label6: TLabel;
FMethodlndex : integer; // Индекс метода интегрирования
'Forml: TForml;
implementation
($R *.DFM}
procedure TForml.OnEnterSim(Sender:TObj ect),
в процессе моделирования
if Stop then
Mentol. Lines. Add (1 Моделирование прервано ’) ;
bCancel.Enabled
bRun.Enabled :=
FMethodlndex := cbMethod.Itemindex;
FSim := TSimulator.Create;
): FSim.Method
L: FSim.Method
TEulerCauchy.Create;
TRungeKutta4,Create;
FSim.Model :»
Передаем модель
•• - StrToFloat (edlncl ination. Text) *utToRad;
1/Sqrt(R);
M. Ini .Assignitems([R, О, V, 0,Incl,0,0]);
FOrbSteps :
FSim.OnStop
FSim.OnEnter ;= OnEnterSim;
FSim.OnOutput :« OnOutputSim;
OnStopSim;
TwoFi/FOrbSteps;
bRun.Enabled
Здесь приведены формальные описания классов динамических систем. В
таблицах ключевых свойств использованы следующие обозначения: во - толь-
§ 3.1. Простой объект
подсистем. Класс TDynamicObject является родительским для пользователь-
ного использования. Его ключевые
не выполняют никаких действий, но они вызываются в блоке моделирования
Любой простой элемент сложной динамической системы, который можно
отнести к элементу непрерывного или типа, должен быть объявлен как наслед-
ник класса TDynamicObject. По умолчанию элемент является непрерывным.
Если эемент имеет дискретную природу, необходимо при его создании уста-
новть свойство Discrete-true. Простой объект может иметь управляемую (т.е. переменную) структуру уравнений динамики (правой части). Для реализации доввида procedure AitItem < Sender:TObject). Процедуры переменной структуры правой части вызываются вслед за ме- тодом Dynamics, поэтому код такой процедуры может модифицировать, значе- ния компонент вектора Out. Ключевые свойства и методы класса приведены в табл. 3.1. Таблица 3.1 Свойства и методы класса TDynamicQbject
Устанавливает тип модели - непрерывная (false) или дис- кретная (true). По умолчанию имеет значение false.
*RWJ Ссылка на объект - вектор начальных условий.
(RW)
Inp (RW) property Inp : TVector; Вектор входов модели.
property InputDim : integer; Размер вектора входов.
proptrty Out : TVector; Вектор выходов модели.
OutputDim Размер вектора выходов.
С”’11"5 property CurTime : TFloat; Время начала очередного шага моделирования.
property CurStepslongint;
екты могут изменять свое состояние при изменении систем- ного времени. По умолчанию Enabled=true.
TimeStep Шаг моделирования (интегрирования).
StepsCount Количество шагов на интервале моделирования.
mo’1" Системное время, на которое необходимо вычислить век- тор выходов модели.
| Терминальное время модели.
Компонента вектора состояния модели с номером index.
0„„0У Создает экземпляр объекта с нулевыми размерностями векторов входов и выходов и с пустым списком процедур Освобождает память, выделенную объекту, уничтожает векторы входов и выходов.
procedure AddAltltern(Item rTNotifyEvent): Добавляет процедуру item в список переменной структу- ры правой части уравнений движения.
AfterStep Вызывается в конце каждого шага перед ModifyAltPart.
procedure De LeteAlcltem(Item: TNotifyEvent); Удаляет ссылку на процедуру item из списка переменной структуры правой части уравнений движения.
procedure Disable: Делает объект «пассивным». Пассивные объекты не могут изменять свое состояние. Вызывайте этот метод тогда, ко-
Dynmle. procedure Dynamics; virtual; Реализует алгоритм изменения состояния модели в зави-
Enable симости от системного времени. Всегда перекрывается. Делает объект активным. Только активные объекты - эле- менты сложной динамической системы могут изменять свое
InitAltPart состояние. procedure InitAltPart; virtual; Создает структуру переменной правой части модели. Пере- крывайте этот метод для инициализации списка процедур
InaertAltltem Item:TNotifyEvent); Используйте этот метод чтобы вставить процедуру в спи- ; сок переменной структуры правой части по индексу.
Init».™. | Вызывается при изменении начального времени модели.
Надо иметь i
моделирования компоненты вектора входов инициализируются значениями
компонент начальных условий автоматически. Если программист при создании
наследника TDynamieobject решает не использовать эти понятия в своей моде-
дает свойством Asstring, которое форматирует вещественное значение в
31
строку. Это свойство удобно использовать для вывода как в текстовые файлы.
§ 3.2. Динамическая система
ческие модели иерархической структуры. Компонентами (подсистемами) моде-
ли могут быть любые объекты - наследники тDynamicobject,
Класс TOynamicSystem наследует все свойства и методы своего родителя.
В табл. 3.2 приведены сведения только о новых свойствах и методах
Таблица 3.2
Свойства и методы класса TDynamicSystem
Количество подсистем данной системы.
Ссылка на подсистему с порядковым номером index. Индекс первой подсистемы равен нулю.
Создает экземпляр главной системы с размерностями вход- ного и выходного векторов AlnputDim и AOutputDim соответ- ственно. Размер входного вектора может превышать размер
Уничтожает список подсистем и освобождает память, вы- деленную под векторы начальных условий, входов и выхо-
procedure AddMember (AMember: TCustomDynamicObject) ; Добавляет подсистему AMember к списку подсистем.
Метод вызывается при изменении текущего времени сис- изменению иерархической структуры модели.
DeleteMember OeleteMember (var Member: TCustomDynamicObject) ; Удаляет AMember из списка подсистем. При этом количе- ство элементов (свойство Count) не изменяется, ссылка на удаленную подсистему принимает значение nil.
для всех подсистем сложной системы с учетом ее иерархии. Пояснения даны ниже.
,.h li! !fl HI IS 01
InsertMember(Be fore,
RemoveMember HP Hi li! Ш fl и
Рассмотрим метод ForEach подробнее. С его помощью одно и то
же действие можно применить ко всем подсистемам, входящим в состав объек-
та. Параметром метода является процедура
преобразует иерархическую структуру сложной системы в линейную. Такое
Им.
1-я зависимая переменная. Отсчет индексов производных и зави- симых переменных ведется с 1.
j ЗА Симулятор
Таблица 3.4
Если. то симулятор выводит начальные условия.
Начальное значение системного времени (интервала модели- рования).
Указатель на динамическую систему.
Указатель на объект - численный метод интегрирования.
Указатель на обработчик события, которое возникает непо- средственно перед входом в цикл моделирования
property OnExit:TNoti fyEvent; Указатель на обработчик события, которое возникает после выхода из цикла моделирования.
“о?*"9' Указатель на обработчик события «изменить состояние систе-
Указатель на обработчик события «проверить условие окон-
step <RWJ , ₽1ШаТ мХелированияГ(интегрирования) по системному време-
ST” Системное время симулятора задает конечное значение интер- вала времени.
Создает экземпляр симулятора.
D““°* Уничтожает все внутренние объекты кроме модели
Напомним, что моделирование начинается сразу как только программа из-
ит значение свойства sysTime симулятора. Стандартная последователь-
Глава 4. Сервисные средства
Рассмотрим классы математических понятий, объявления констант, ти-
со строками и файлами.
рируют понятиями «переменная», «вектор» и «матрица». Соответствующие
классы объявлены в модуле uvector. Объекты этих классов могут быть исполь-
зованы при программировании любых задач научно-технического характера где
необходимо осуществлять действия над векторами и матрицами.
Класс srioatvar определяет понятие «вещественная переменная». Его
предком является TCustomCbject. Данный класс имеет два перегружаемых
constructor create создает переменную с нулевым значением;
значением Initval.
Ключевые свойства класса представлены в табл. 4.1.
Таблица 4.1
FloatToStrF.
Соответствует параметру Digits функции FloatToStrF. По умолчанию Digits = 5; Precision = 15; Format = ftGen-
и!°‘1 Значение переменной как вещественного числа типа TFloat.
Значение переменной в виде строки, отформатированной с помощью функции FloatToStrF при текущих Format,
шественных значений в строки при выводе или при чтении исходных данных с
V TFloatVar.Create
v.Format ffFixed;
V.AsString Forml.I
Таблица 4.2
Свойства класса TAngle
Значение угла в радианах.
(RW) property AsString:string Значение угла в ваде строки, выраженное в в радианной мере.
Digits (RW) Используется при форматировании вещественного числа в строку (см. описание функции FloatTostrF в справочной сис-
IHW) Используется при форматировании вещественного числа в строку (см. описание функции FloatTostrF в справочной системе Delphi).
Format (RW) Код формата (см. описание функции FloatTostrF в справоч- ной системе Delphi).
property AngleFcrmat zTAngleFormat; Код форматирования строки для свойства AsGMSstr. Может принимать одно из значений :af360 - приведение к диапазону [0..360*]; а £180 - приведение к диапазону [-180°.. 180°]; afEW- приведение к диапазону [-180°.. 180*].
Десятичное значение угла, выраженное в угловых трэду-
/^сятичное значение угла, выраженное в угловых градусах
Значение угла в формате sODDomm- ss" . zz где s- знак, опреде-
если ftngleFormat=afEW и угол к востоку от Гринвича.
Следующий пример
свойств класса ТАгд 1е:
щение к элементу вектора v с индексом к в программе можно записывать как
v [к]. Свойства и методы представлены в табл. 43.
Максимальное по модулю значение зелемента вектора.
Минимальное по модулю значение эелемента вектора.
AsStxing Значение элемента вектора с индексом index в виде строки.
шог——I Количество элементов вектора (размерность).
Параметр форматирования значения элемента index в стро- ку (см. класс, TFloatVar свойство Digits ).
Общий для всех элементов параметр TFloatVar. Digits.
Максимальное значение среди всех эелементов вектора.
(RO)
Параметр форматирования значения элемента Index в отроку
If™' Общий для всех элементов параметр TFloatVar. Format.
Указатель на элемент вектора с индексом index. Каждый элемент вектора является объектом типа TFloatVar.
property ME:TFloatVar; Математическое ожидание (среднее значение) всех элементов
Норма вектора - квадратный корень из суммы квадратов всех
Несмещенное среднеквадратическое отклонение элементов
property sununa: TFloatVar; Сумма всех элементов вектора.
uun Параметр форматирования значения элемента index в строку (см. класс TFloatVar, свойство Precision ).
Общий ДЛЯ всех элементов параметр TFloatVar. Precision.
property X (Index: longint ]: TFloaz; default; (число с плавающей точкой).
раметры форматирования числовых значений в строки по умол- чанию ДЛЯ каждого элемента Format=ffGeneral; Precision-15; Digits-2.
Cr““ Создает экземпляр (объект) - вектор размерности High (v) с элементами типа TFloatVar. Все элементы получают значения из списка аргументов конструктора. Параметры форматирования числовых значений в строки по умолчанию Format-ffGeneral; Precision-15; Digits-2 для всех элементов.
Destroy
MdVdo, procedure AddVector(V:TVector); Добавляет к элементам данного вектора элементы вектора v. Если размерности векторов не совпадают, то в суммировании одного из векторов.
AngleWith function AngleWlth(V:TVectcr);TFloat; Вычисляет угол меду данным вектором и вектором v той же
Присваивает элементам вектора значения из списка V.
Cl.„ Присваивает всем элементам вектора нулевые значения.
Copyrzo. Копирует значения элементов из вектора V. Объект V должен падать. Копирование идет с первого элемента до исчерпания ин- дексов одного из векторов.
procedure CopyFromMatrix (Fromlndex, Vcount: longint ; M:TMatrix; ARow,ACol:longint; Direction:TMatrDirection); индекс элемента вектора, начиная с которого копируются эле- менты матрицы; vcount - количество копируемых элементов. Чтобы скопировать все элемента вектора, надо задать рицы, начиная с которого следует копировать. Первый элемент матрицы имеет индексы [1,1]; Direction задает направление выборки элементов матрицы при копировании (см. описание типа TMatrDirection в таблице 4.6).
procedure CopyFromMatrix (Fromlndex, vcount: longint; M•TMatrix; ARow,ACol:longint; Direction:TMatrDirection); Копирует элемены матрицы м в данный вектор. Fromlndex - | индекс элемента вектора, начиная с которого копируются эле- менты матрицы; vcount - количество копируемых элементов. рицы, начиная с которого следует копировать. Первый элемент матрицы имеет индексы [1,1]; Direction задает направление выборки элементов матрицы при копировании (см. описание типа TMatrDirection в таблице 4.6).
С«рут« Копирует значения элементов данного вектора в вектор V. Объ- ект V должен быть создан заранее. Размерности даух векторов .исче^па.ния_ивдексов.одаого из векторов,
43
Нормирует вектор. т.е. делает его единичным.
вектора, можно использовать
константу cGetAll
юный вектор. Fromindex - индекс элемента
: которого копируются элементы записанные в
RRow, ACol: longintz Direction: TMatrDirection) ;
Копирует значения элементов данного вектора в объект-
координаты (строку и столбец) ячейки таблицы, начиная с кото-
всех формальных параметров аналогичен методу GetFromGrid.
и столбцы таблицы
принимают.
Clear Присваивает всем элементам матрицы нулевые значения.
Соругг» Копирует значения элементов матрицы v той же размерности.
CopyTo Копирует свои элементы в матрицу v той же размерности.
FromGrid procedure GetFromGrid (Grid:TStringGrid;
procedure PutOnGrid(Grid:TStringGrid; GridRow.GridCol:longint); Выводит матрицу в таблицу TStringGrid. (см.метод GetFromGrid )
Изменяет размер матрицы. Исходная матрица сохраняется в дыдущие, то добавленные элементы равны нулю.
Вычитает из данной матрицы матрицу V той же размерности.
Умножает все элементы данной матрицы на коэффициент
Меняет местами строки матрицы с номерами Rowi и Row2.
Транспонирует себя. Если исходная матрица имела п строк и m столбцов, то транспонированная матрица будет иметь m строк и
Выполняет операцию r-a+b, где R, а, в — матрицы одинако-
class procedure SubstrMatr(А,В,В:TMatrix); Выполняет операцию r=a - в, где R, а, в - матрицы едина- ковых размеров.
Результат получается в векторе R размером nxl.
R:Tvector); v - вектор размером mxl; R - вектор mxl.
class procedure MultMatr(A,B,R:Tmatrix); Выполняет операцию R= А- В, где A - матрица размером mxn; В - матрица размером nxk; R - матрица размером mxk. Программист должен обеспечить корректность размеров матриц.
procedureVectByVect (V, U: Tvector ; R: Tmatrix) ; Выполняет операцию r=v- и1, где v и и - векторы размером nxl; R - матрица размером пхщ
нятие «квадратная матрица». Квадратная матрица имеет дополнительные свой- ство и методы. Так, свойство Upper3Count целого типа есть суммарное количе- ство элементов верхне-треугольной матрицы. Конструктор constructor Create (ADim : integer) имеет единст- венный параметр, задающий порядок матрицы. вращает алгебраическое дополнение элемента матрицы с индексами i (строка) и /(столбец). годом преобразования матрицы в верхне-треугольную. Функция function IsSymmetrical : boolean возвращает true, если матрица является симметричной. Метод function invert : boolean обращает матрицу (на месте исход- ной) и возвращает true, если матрица неособенная. В противном случае метод возвращает значение false. Метод procedure Makeunit делает матрицу единичной. 48
Метод procedure Resize (ADim:integer) изменяет рамер квадратной
матрицы.
Класс TSysatatxix определяет симметричную квадратную матрицу как
наследника квадратной матрицы. В дополнение к методам предка имеются ме-
Метод-процедура GetFromVector( const v : TVector) формирует
симметричную матрицу, копируя значения ее элементов из вектора V, а проце-
дура Putonvector ( const v : TVector) копирует п(п+1)/2 элементов верх-
элементов.
Функция function QForm( v : TVector) : TFloat возвращает зна-
вести несимметричную квадратную матрицу к симметричному виду.
; предназначен для организации списков с элементами
возвращает ссылку на элемент (вектор) списка по индексу index. Отсчет ни-
которое возвращает ссылку на элемент (матрицу) списка по индексу index. От-
счет индексов ведется от нуля.
§ 4.2. Модуль uCommon
Объявления базовых типов, констант, процедур и функций общего харак-
ном модуле uCortunon. В частности, здесь объявлен стандартный для всех клас-
сов тип вещественных чисел TFloat.
Объявления констант и типов приведены в табл. 4.5 и 4.6. Таблица 4.5 Объявления констант
ulTOD.g 1SC/H Множитель перевода углов из радианной меры в градусную.
Fi/100 Множитель перевода углов из градусной ме- ры в радианную.
TWOP1 2 * Pi Удвоенное значение числа те.
HalfPi 0.5 * Pi Половина числа те.
AlmostZero le-9 Предназначена для проверки вещественных значений на приблизительное равенство нулю.
Таблица 4.6
type TFloat = extended;
T6xivector type T6xlVector = array[1.. 6] of TFloat; Вектор вещественных чисел из 6 элементов (стандарт- ный вектор состояния в декартовой системе координат).
TSxlV.ctor type T3xlVector = array(1. . 3]of TFloat;
T3x3Matrix type T3x3Matrix = array[ 1. .3, 1. .3] of TFloat; Квадратная матрица вещественных чисел 3x3.
T6x6Matrix type T6x6Matrix = array(1. .6,1. .6]of TFloat; Квадратная матрица вещественных чисел 6x6
TAngleFormat type TAngleFcrmat = (af360, af 180, afEW) и методы класса TAngie).
TOnStopBvent type TOnStopEvent - procedure (Caller iTObject; var Stop:boolean) of abject; Тип обработчика события, возникающего в симуляторе при проверке условия окончания процесса моделирования.
Direction type TMatrDireetion-( mdRowRighc, mdRowLeft, Используется в методах GetFromGrid и PutOnGrid классов TVector и TMatrix для указания направления копирования значений: mdRowRight- по строке вправо; mdRowLeft-no строке влево; mdcolDown-по столбцу вниз; mdColUp-no столбцу вверх; mdDiagDcwn - по диагонали вправо - вниз; mdoiagop-no диагонали влево - вверх.
ны-функции вычисляют значения некого-
I стандартном модуле Hath можно найти
то возникает необходимость приведения значения некоторой угловой величины
Главное значение arccos х можно получить с помощью функции
Для вычисления arccos х и приведения результата к интервалу [О..2л]
Для вычисления арктангенса предназначена функция
). Параметры: Sinx - значение синуса
При исследовании относительного движения нескольких спутников Зем-
лы а и ь отсчитываются от нуля и лежат в интервале [О.2л] каждый. При опре-
делении углового расстояния значения а и ь рассматриваются как аргументы
широты первого и второго спутника.
Функция function Sign (х: TFloat): integer возвращает знак вещест-
венного числа: 1, если х50 и -1 - в противном случае.
функция function Tan_(х:TFloat):TFloat возвращает значение тан-
генса угла х, выраженного в радианах. При значениях х близких к л/2 возвра-
щает значение MaxFloat.
Для получения реализаций случайных величин предназначена функция
1 строки, отформатированные по специальным правилам.
Функция
в зависимости от знака вещественного числа к возвращает либо символ «плюс»
(+), либо символ «минус» (-). Знак числа определяется с помощью функции
Функция
function TimeAsHMS(Value : TFloat) : string
Значение value - время, выраженное в секундах.
Функция
г строку вида sdodomm- ss" , zz, т.е. значение угла value, выраженно-
at-af36С или AngleFormat-af180; s-E, если AngleFormat=afEW, а
угол - к западу от Гринвича; s-w, если AngleFormat-afEW и угол - к востоку
от Гринвича; ddd - целое число градусов; мм - целое число угловых минут; ss
- целое число угловых секунд; zz- десятичная дробная часть угловых секунд.
Для специального форматирования целых чисел имеется функция
пределах и позиций. Например, если Num=12, а и=4, функция вернет строку
Файловые функции. Для проверки корректности значения строковой
переменной, значением которой является путь к файлу, используйте
Эта функция возвращает строку value плюс символ \, если его нет i
се Value. Пример:
Для проверки наличия на диске некоторой папки предназначена функция
Чтобы получить в программе полный путь к файлу параметров приложе-
ния используйте функцию function GetlniFile : string. Имя файла па-
раметров совпадает с именем исполняемого файла прикладной программы и
имеет расширение «ini». Файл параметров расположен в той же папки, что и
исполняемый файл прикладной программы, а не в папке windows, как это при-
нято по умолчанию.
предназначена функция
Она возвращает вещественное значение параметра, i
ключевым словом KeyName в секции Section
RefArea=2.55
ременным программы как показано ниже.
'SatelXitel'
Для чтения строковых значений из файла параметров приложения ис-
пользуйте функцию
ет свойства я методы, присущие точке в трехмерном декартовом пространстве.
Онн представлены в таблице 4.7.
Таблица 4.7
‘прямое;»™™
Декартовы координаты точки х, Y, г.
Обобщенный вектор координат точки: [1] -X, [2J-Y, [3]-Z, [4]-R (расстояние), [5] - прямое восхождение (рад), [6]- скло- нение (рад).
Склонение, рад
до точки.
Spherical property Spherical : T3xlVector; Сферическиее координаты точки: [^-расстояние; [2]-прямое восхождение (рад); Pl-склонение (рад).
CartCian Задает декартовы координаты точки X, Y, Z.
Sbp.rie.l Задает сферические координаты точки: [Ц-расстояние; [2]-прямое восхождение (рад); [3}-склонение (рад).
Часть 2. ОПТИМИЗАЦИЯ ЛИНЕЙНЫХ СИСТЕМ УПРАВЛЕНИЯ
Рассматриваемые здесь средства предназначены для разработки приклад-
ных программ в рамках курсового и дипломного проектирования по соответст-
вующей тематике. К ним относятся классы непрерывных и дискретных линеЙ-
тимальности. В непрерывных системах учитывается аддитивное случайное
ется возможность учета изопериметрических ограничений и статистическо-
Прежде всего рассмотрим основные положения теории оптимального
ставленных в библиотеке.
Глава 5. Математический аппарат
§ 5.1. Непрерывные системы
ния линейной непре
рии оптимальности.
лой при квадратичном крите-
времени коэффициентами
-[-.J]
и - вектор управления размерности
шума с матрицей интенсивностей Д.
висят ни от компонент вектора состояния, ни от управления. Вектор состояния
в начальный момент времени задан точно. Если то система
(5.1) называется детерминированной.
Требуется найти оптимальное управление u(t.x), которое минимизирует
7 - м( J[xre(<). . , (S.2)
где g и /g - заданные симметричные матрицы размером
Симметричная матрица Ж имеет размеры (тли). Все матрицы, входящие в
выражение (5.2), должны быть положительно определенными.
мает вид [7]
рассматриваемом случае црини
44^)сН]}
: граничным условием
Я(х,Г)=хг№г*(Г).
(53)
(5.4)
При положительно определенной матрице Wfi) алгоритм оптимального управ-
ления связан с функцией будущих потерь соотношением
«(«)—(3.5)
1 функция будущих потерь имеет вид
(5.6)
где матрица K(t) удовлетворяет матричной системе обыкновенных дифферен-
~-с+к[(И')+4г(«М)-^М)»г-|(')в㹫
(5.7)
с граничным условием к[т) =КТ. (5.8)
В случае детерминированной системы c(t)^O. Иначе функция eft) есть
решение дифференциального уравнения
‘(т)= 0.
С учетом (5.6), алгоритм оптимального управления принимает вид
и(м)-4И).
(5.10)
£(г)=Г-(/)зЧ^(»).
Матрица L(t) называется матрицей коэффициентов обратной связи. Ее
(5.10), получаем уравнение оптимальной замкнутой системы:
-W (S.12)
Численное решение задачи синтеза оптимального управления проводится
в два этапа.
Этап 1. Цель первого этапа ~ вычислить матрицу K^Kfy) и параметр
Q/d- Для этого необходимо проинтегрировать систему дифференциальных
уравнений (5.7), (5.9) при известных граничных условиях на интервале времени
[T./rf. Если задан неслучайный аектор начальных условий хй= *(«<>), находим
функцию будущих потерь
Jtu.j./W.cfc). (5.13)
Значение выражения (5.13) по определению определяет минимум крите-
рия оптимальности (52), который может быть достигнут при движении систе-
Этап 2. Цель второго этапа - получить оптимальную траекторию движе-
ния. Для этого необходимо вычислить компоненты аектора состояния в функ-
ции времени путем моделирования системы (5.12). Для получения одной реа-
лизации необходимо интегрироавть две системы векторно-матричных диффе-
ренциальных уравнений (5.7) и (5.12) с учетом (5.11) при начальных условиях
В случае стохастической системы необходимо провести статистическое
моделирование для получения заданного количества реализаций случайного
процесса (5.12).
ми задач оптимизации непрерывных систем, рассматриваемыми ниже.
Метод оптимизации линейных систем можно применять и при решении
нелинейных задач. Так, часто используется прием линеаризации исходных не-
замкнутую систему, динамика которой описывается нелинейными уравнения-
ми, а управление вычисляется согласно алгоритму, найденному для линейных
уравнений движения.
Согласно методу множителей Лагранжа минимизация критерия (5.16) с
учетом ограничений (5.17) эквивалентна безусловной минимизации обобщен-
ного критерия оптимальности (7,8 ]
где Oj -множители Лагранжа, подлежащие определению с привлечением уело-
Рассмотрим алгоритмы вычисления оптимального управления и ограни-
чений при заданных множителях Лагранжа.
Для определения оптимального управления используется рекуррентное
соотношение метода динамического программирования [7], которое в рассмат-
где а=£«,е.': »;=£«Л; <5-20>
<5-211
(5.22)
Функция будущих потерь имеет квадратичную структуру
(5.23)
= а + " 4ГА; Кн„ = К; (5.24)
С, = с„, 1; =0. (5-25)
ратной связи.
Алгоритм оптимального управления имеет вид
(5 28)
Функции Я/(х.) ДЛЯ любых I и j
(5.23):
где матрицы К‘ и коэффициенты с! вычисляются с помощью рекуррентных
COOTHOlLJHHlj
Kf sq> -аГк^-^к^,
(5-29)
(530)
Г/ = Wf + ВТ К,>„В.(1
(5.31)
Граничными условиями для соотношений (5.29) и (5.30) являются
(5.32)
Применяя рекуррентные соотношения (5.24), (5.25), (5.29) и (5.30), получа-
ем следующие формулы для вычисления функции будущих потерь
(5.33)
которые, по определению, совпадают с левыми частями изопериметрических
ограничений (5.17). Попутно вычисляются и коэффициенты обратной связи
(5.27).
Так же, как и в непрерывном случае, моделирование замкнутой системы
(5.15) с алгоритмом управления (5.28) распадается на два этапа.
Этап 1. Необходимо вычислить матрицы коэффициентов обратной связи
и функции я/fe) при заданных исходных данных - числе шагов, матрицах Ah
рекуррентных соотношений (5.24), (5.25), (5.29), (5.30) при соответствующих
граничных условиях. Матрицы коэффициентов обратной связи на каждом шаге
Этап 2. Получить реализацию процесса (5.15). В случае детерминирован-
ной системы достаточна одна реализация, а в случае стохастической - несколь-
60
ко. При этом управление (5.28) должно вычисляяться по текущему вектору со-
ко вся информация, необходимая их поиска, повучается на первом этапе.
Для решения задач синтеза управления линейными дискретными систе-
мами в библиотеке simulate 1. о имеются классы, реализующие
свойства оптимальной дискретной линейной системы;
замкнутую дискретную систему общего вида с линейным алгоритмом
управления;
• линейную дискретную систему, оптимальную по обобщенному квадра-
и правила их поведения во времени. Все они являются наследниками класса
"DynamicSystem. Поскольку свойствами линейной системы и критериев явля-
ются матрицы, вычислять которые необходимо только в текущий момент вре-
мени, по умолчанию они отнесены к дискретному типу. Схема наследования
1—j TContOpcLinSvsProcs |
Класс TLinSysFrops инкапсулирует свойства линейной системы, причем
программной реализации одинаков. Чтобы вычислить правую часть любого из
Основной задачей объекта этого класса является вычисление элементов матриц,
входящих в правую часть (5.1) или (5.15). Поэтому по умолчанию свойство
Discrete установлено равным true.
Таким образом, к свойствам линейной системы относятся:
♦ матрица коэффициентов при векторе состояния A(i) или 4;
* матрица коэффициентов при аекторе управления B(t) или В,;
• корреляционная матрица аддитивного возмущения D(t) или Д;
♦ среднеквадратическое отклонение (СКО) мультипликативного возму-
Если свойства ураввеннй не зависят от времени, достаточно задать их зна-
При создании объекта конструктор класса TLinSys Frops инициализирует
нулевую корреляционная матрицу аддитивного возмущения: D=0„ и нулевое
СКО мультипликативной ошибки.
TContOptLinsysProps, которые инкапсулируют свойства линейной системы и
первого из них должно иметь:
оптимизируемой по обобщенному критерию (5.18).
Класс TCritPxape инкапсулирует свойства интегротерминалъного квадра-
тичного критерия (5.2) или (5.16). К ним относятся:
По умолчанию вес критерия равен единице, все матрицы - нулевые.
Если свойства критерия не зависят от времени, достаточно задать их зна-
чения в программе. В противном случае необходимо создать наследника
класса TCritProps, перекрыть родительский метод Dynamics, и реализовать в
Класс TCeepiCritPxops реализует критерий Лагранжа как взвешенную
сумму нескольких квадратичных форм. В дополнение к свойствам родитель-
ского класса TCompiCritProps инкапсулирует список, который содержит 1+1
формуле (5.22).
Свойства линейных систем и критериев используются классами динами-
ческих систем, оптимизируемых по квадратичному критерию оптимальности.
Глава 7. Контроллеры линейных систем
Под контроллером системы понимается объект, который вычисляет управ-
ляющее воздействие согласно тому или иному алгоритму оптимального управ-
ления. Когда говорят о задаче синтеза оптимального управления, контроллером
является блок управления, включенный в контур обратной связи.
Поскольку алгоритмы управления непрерывными и дискретными систе-
мами различны, имеем два класса контроллеров, схемы наследования которых
Класс TContSyaContzoiier вычисляет правые части дифференциальных
уравнений (5.7) и (5.9). При этом матричное уравнение (5.7) преобразуется в
векторное отображением верхнего треугольника симметричной матрицы K(t) в
Размерность вектора правых частей системы дифференциальных уравне-
ний (5.7), (5.9) равна п(п+1)/2+1. Доступ к свойствам оптимизируемой системы
ной системы вида (5.1), критерия оптимальности (5.2) и «умеет» вычислять
правые части дифференциальных уравнений (5.7) и (5.9). Объект этого класса
может быть только компонентой (подсистемой) замкнутой системы и самостоя-
тельного значения не имеет. Для типовых приложений достаточно создать объ-
ект данного класса в составе объекта типа TContoptsystem или любого его на-
Ключевыми свойствами данного класса являются:
:я корректной тогда, когда в любой мо-
ложительно определенными, а матрица W(t) имеет обратную. Проверка на по-
ложительную определенность этих матриц не осуществляется, но если матрица
§ 7.2. Контроллер дискретной системы
Контроллер дискретной системы TDiscrSysContcollec является наслед-
ником TDynamicSystem. Его задача заключается в вычислении правых частей
рекуррентных соотношений (5.24), (5.25), (5.29), (5.30) и матриц коэффициен-
тов обратной связи (5.27). Доступ к свойствам оптимизируемой системы осу-
решением задачи оптимального управления с изопериметрическими отраниче-
Правые части соотношений (5.24), (5.25),
roiecrsyeconeroiiec (5.29), (5.30) и матрицы (5.27)
| TDis^crOptLinSysProps | Матрицы Bt, Dj И Сщ |
I----j TCcnplCritPrcps | Матрицы Wlf Q„ К |
----| TCritProps | Матрицы w*!, 0°!, К* и <х° |
______________________________________________| TCritProps | Матрицы W\, Q*j, К1 и a1]
----1 TCritProps | Матрицы w\, Q*t, к1 и a1 j
Объект этого класса может быть только подсистемой замкнутой системы и
самостоятельного значения не имеет. Для типовых приложений достаточно
любого его наследника. Ключевыми свойствами данного класса являются:
коэффициенты {с/ }>j = 07.
1Я задач со скалярным управлением дополнительно имеется свойство
нейной дискретной системой считается корректной тогда, когда в любой мо-
мент времени все матрицы, входящие в критерий оптимальности, являются по-
Глава 8. Замкнутая система управления
Замкнутая система управления получается объединением свойств линей-
ной системы (дискретной или непрерывной), критерия оптимальности и кон-
троллера. Поскольку свойства непрерывных и дискретных систем, а также их
TContoptSys и TDiscrOptSys соответственно. Первый класс порожден от
roif Equation, а второй - от TDynamicSystem. Оба класса замкнутых систем не
Как было отмечено выше, линейная система может быть получена линеа-
ризацией исходной нелинейной системы в окрестности некоторой опорной тра-
ной системы, когда :
блоком управления придется создать наследника соответствующего класса и
} 8.1. Непрерывная система
циальных уравнений, в цепи обратной связи которой используется блок синтеза
оптимального управления
пюбои задачи синтеза оптимального управления
этапа, класс TContOptSystem имеет методы Resetcontroller и
roller {То, тк, step) решает задачу синтеза опти-
юй системой (5.1) на интервале времени [Т^Т^ с
....J выбрать любой из имеющихся методов (Эйле-
, Эйлера-Коши, Рунге-Кутты или Дормана-Прниса).
Собственно моделирование замкнутой системы на интервале [Г^Т^ обес-
свойства - ссылки на методы onEnter, ondutput, onExit, Onstop, что по-
зволяет организовать вывод результатов как на этапе синтеза, так и на этапе
моделирования. При этом вывод можно разрешать нни запрещать обращением
к методам EnableLogging или DisableLogging соответственно.
ской моделью непрерывного случайного векторного воздействия типа белого
возмущений. Для учета аддитивных возмущений при статистическом модели-
ровании его необходимо модифицировать с учетом рекомендаций, данных вы-
Если динамические коэффициенты линейной системы и критерия постоян-
ны, в программе можно использовать экземпляры TCcntOptLinSyst класса не-
ходимо объявить свои классы свойств системы и (или) критерия, наследуя их от
совместно с TContOptSystem или TContOptLinSyst.
67
j 8.2. Дискретная система
асе TDiscxCptSystem есть дискретная система, в цепи обратной связи
I используется блок синтеза оптимального управления соответствующей
еквадратического отклонения мультипликативного возмущения сгя , а
: характеристик сложного критерия - матриц w>, Q>, к1, Второй
втоматически при создании объекта класса TDiscroptSystem. Если для реали-
подсистемы, то это можно сделать с помощью метода AddMember.
на рис. 8.2.
Как и в предыдущем случае, решение задачи синтеза оптимального управ-
ления включает два этапа. Класс TDiscroptSystem имеет два соответствующих
| TDiscroptSystem | Модель исследуемой дискретной системы ~ ~ |
-------1 TDiscrOptLinSysProps | Сц1 и матрицы А1,В„Р1
I—[ TCompiCritProps | Структура показана на рис.7.3
Метод Resetcontroller (N) решает задачу синтеза //-шагового оптималь-
ного управления линейной дискретной системой (5.15) при обобщенном крите-
рии (5.18). Собственно моделирование замкнутой системы при обеспе-
чивает метод Simulate.
: результаты как на этапе синтеза, так и на этапе моделирования. Вывод
DxsableLogging соответственно. Отметим, что после обращения к методу
Resetcontroller систему можно моделировать неограниченное число раз, что
открывает возможность статистического моделирования.
рованных гауссовских возмущений при моделировании не вызывает затрудне-
ний. Поскольку фактическая модель дискретной системы еще не определена,
моделирование случайных факторов возлагается на программиста при создании
наследников класса TDiscrOptSystem. В отличие от класса TContoptSystem
. На-
чика случайных чисел RandomGauss.
Специально для исследования стохастических дискретных линейных сис-
(или) критерия, наследуя их от tdi
Глава 9. Примеры программ
моделирования непрерывных и дискретных систем с использованием классов
линейных систем, оптимизируемых по квадратичному критерию оптимально-
Первый пример связан с исследованием i
ой системы второго по-
1 квадратичном кртерии
в форме Больца.
Второй пример иллюстрирует решение задачи перевода стационарного
спутника Земли в заданное положение [5]. Каждый пример сопровождают по-
становка задачи, ее анализ с точки зрения имеющихся возможностей, програм-
§ 9.1. Моделирование непрерывной системы
Дана линейная детерминированная система (9Д)
/ = «>’Л + Х?(Г)+Ж’(Г)->«»Й-
Перейдем к векторно-матричной форме записи модели:
* = At+ Ви. J = wfu2dt+хг(г)кгх[т). (9.2)
"Чй ч?) -и
Несмотря на то что классы свойств линейных систем и критерия опреде-
лены для векторного управления (В и W- матрицы), их можно использовать и
! и критерия
не зависят от времени. Поэтому мы можем использовать i
Листинг 9.1. Текст метода TForml. SoiveExatnpie.
при различных значениях множителя w. элементов матриц Q,, А, Кт я началь-
ных условиях Х(0). Для простоты примем, что все матрицы от времени не зави-
сят Кроме того, требуется вычислить оценку энергозатрат как функцию време-
(9.5)
и оценку
л.(о)=°.
^)=хЧ/Ы4 лДо)=о.
(9.7)
(9-8)
Для учета уравнений (9.7) и (9.8) объявим класс TRiskitems как наслед-
Сиачала интегрируется система уравнении (5./). Но уравнения (У-1) являются
подсистемой объекта TContoptLinSys и на данном этапе их интегрировать не
надо. Класс TContoptLinSys снабжен специальным свойством BackMode бу-
шается задача синтеза. В противном случае объект находится в режиме моде-
мой системы, так и уравнения составляющих критерия будут интегрироваться
совместно с уравнениями (5.7).
На рис. 9.1 показана форма окна программы примера.
Группа исходных данных программы содержит:
♦ метод интегрирования (тсошЬоВох);
• начальный вектор состояния Х(0) (TStringGrid).
В группе результатов представлены:
♦ значение функции будущих потерь (TLabel);
♦ оценка энергозатрат - значение R/Cty (TLabel);
♦ значение второго слагаемого критерия (9.4) (оценка терминальной точ-
Результаты моделирования выводятся в текстовый файл, имя которого
лы, комментарии к нему и фрагмент выходного фейла приведены на листинге
и- и элементов матрицы Q. В табл. 9.1 приведены значения функции бу-
чноЙ точности (Я.?) при Q=0, К(7)=Ь. xt=0, х2=1. Т=5с.
Таблица 9.1
Поскольку в качестве оценки энергозатрат рассматривается интеграл мо-
уля управления, функция будущих потерь не совпадает со взвешенной суммой
На рис. 9.2 и 9.3 показаны переходные процессы и фазовые портреты
системы при w = /hw = O./ соответственно.
Рассмотрим влияние на переходный процесс значений элементов матрицы
Q. Пусть £?п=С»=2, Qn=Qn=0. На рис.9.4 показаны переходный процесс (еле-
предыдущем случае. Энергозатраты (оценка Я,) также уменьшаются. Объясне-
ние эффектов, связанных с динамическими свойствами критерия и системы,
ветствующем теоретическом курсе. Здесь лишь дана иллюстрация возможно-
стей классов оптимизации при проведении разнообразных исследований.
....
Л m J Puc.9 4. Переходный процесс (слева) и фазовьп инг 9 3. Текст модуля программы модели^ >дуль формы, приведенной на рис.9.1 .ndows. Messages, SysUtils, Classes
IbRisk.Caption : = FI.Readstring(ASection,•Risk•,•0');
IbFuel.Caption := FI.Readstring(ASection,•Fuel1,’0’);
// Метод записи свойства Filename
ractFileName(FFileName)+’]’;
procedure TForml.SimSnter(Sender:TObject);
AssignFile(F,Filename);
Rewrite(F);
Writein(F, • Time’: 10, • X1':LO,' X2*:10,a U’:10,
' Ll':10,1 L2':10,
• Kll’:10,• K12’:10,1 K22‘:10,
’ Rl*:10, • R2*:10);
procedure TForml. SimPr int (Sender: TObj ect),
me 0.1 выводить каждый десятый шаг
Trunc(0.1/OS.TimeStep*O.3 J
Write(F,State[1].AsFloat:10:4, State [2].AsFloat:10:4);
Write(F, Controller.![1]:10:4,Controller.L[2]:10:4)7
Controller.K.M[2,2]:10:4);
Write(F, Member[VserMember].State[1].AsString: 10);
Writein(F);
81
OS.AddMember(TRiskIterns.Create);
OS.OnSolverEnter :«= SimEnter;
OS.OnSolverOutput := SimPrint;
Memol.Lines. Add(’Идет моделирование. Ждите. ..
case cbMethod.Itemindex of
0: OS.Method := itEuler;
1: OS.Method itEulerCauchy;
2: OS.Method := ItRungeKutta;
StrToFloat(edWeight.Text);
OS.DisableLogging;
OS.Resetcontroller (StrToFloat (edStart.Text),
OS.Simulate;
Memol.Clear;
Memol .Lines. LoadFrotnFile (Filename) ;
IbRisk.Caption : = FloatToStrF(OS.Risk,ffFixed,18,5);
IbTermRisk.Caption:=
FloatToStrF(OS.Controller.К-QForm(OS.Inp),
procedure TForml.FormCreate(Sender: TObject);
// файла и выравнивает вертикальную разделительную черту
Enablecontrols(false);
mRunl.Enabled false;
Beveil.Width := GroupBoxl.Width;
// Обработчик списка выбора метода интегрирования
procedure TForml.cbMethodChange(Sende г: TObj ect);
ClearDataComponent s;
§ 9.2. Моделирование дискретной системы
логична моделированию непрерывных систем. Разница состоит в том, что ис-
моделирования стохастических систем с мультипликативными и ад-
терий оптимальности может быть взвешенной суммой нескольких частных
критериев. Это означает, что для вычисления значений составляющих исходно-
го критерия не надо создавать свои классы вроде TRiskiterns, как это было в
Рассмотрим в качестве примера задачу оптимизации процесса перевода
тационарного спутника земли (СИСЗ) с помощью корректирующей двига-
ельной установки (КДУ) большой тяги [5].
-И- Ч Ч*)- <91о>
Под оптимизацией процесса перевода СИСЗ понимается определение ал-
>ритма коррекции его орбиты, позволяющего достичь заданного конечного
)стояния (х(=0, х2=0) с требуемой точностью при минимальных энергетиче-
сих затратах. Количество коррекций N задано.
Энергетические затраты оцениваются величиной
(9.12)
<• - длительность пассивного участка i
Требуется найти алгоритм коррекции, обеспечивающий минимум (9.11) с
том изопериметрического ограничения J, <J*. Для решения задачи необхо-
ю составить обобщенный критерий вида (5.18) и применить условие опта-
числе коррекций, интервалах между коррекциями Д*, весовом множителе и па-
Для простаты примем, что интервалы меяц
не зависят от времени (т.е. от номера коррекции).
Поскольку динамические коэффициенты системы (9.9) постоянны, в про-
являются выражения (9.11) и (9.12).
управления. На рис.9.5 показано окно программы примера «Перевод СИСЗ».
пей
Все действия, связанные с подготовкой и решением задачи синтеза, сосре-
доточены в методе формы главного окна TForml.Problemsolver, текст которо-
го с комментариями приведен на листинге 9.4.
Листинг 9 4. Текст метода ProblenSolver
85
Ввод значений параметров из компонент TEdit
Tz StrToFlOat(edKeep.Text); // цикл удержания
Delta := StrToFloat(edDelta.Text); // интервалы
StrToFloat(edSigmaMu.Text); // CKO ошибки p
TDiscrOptLinSyst. Create
OS.OnSc1verExir \= SimExit,-
FloatToStrF(OS.Risk!ij,trGeneral,6,5);
статистическое моделирование процесса перевода СИСЗ при фиксированном
(неслучайном) векторе начальных условий. Результаты статистического моде-
ния. Для определенности примем, что допустимая область конечного состояния
СИСЗ ограничена по координате xt значением Г (по модулю).
жаются результаты статистического моделирования.
Для реализации статистического моделирования в текст метода
Prob lemSolver предыдущего примера после строк, обеспечивающих вывод
критерия и оценок на метки формы, добавлен код:
LbFuel.Caption := 1 ';
IbTerminal.Caption ;= •1;
Memol.Clear;
bRun.Enabled := true;
Image 1 .Canvas.Brush.Color := clWindow;
Imagel.Canvas.FillRect (Rect(0,0,Width,Height))
DrawCross;
procedure TForml.DrawCross;
OldColor : TColor;
begin
with Image1 do
OldColor := Canvas.Pen,Color;
Canvas.Pen.Color := clSrlver;
Canvas.Move To(Width div 2, 0) ;
'Canvas.LineTo(Width div 2, Height);
Canvas.MoveTo(0, Height div 2);
Canvas.LineTo(Width, Height div 2);
Canvas.Pen.Color:’•OldColor;
procedure TForml.DrawTermAr ea;
OldColor : TColor;
const Dxm • 1; // Допустимое угловое отклонение
2/Tz;
with Image1.Canvas do
OldColor := Brush.Color;
MoveTo(GetXplot(-Dxm),GetYplot(0));
LineTo(GetXplot (-Dxm), GetYplot (Vy));
LineTo(GetXplot(Dxm), GetYplot(0));
LineTo(GetXplot(Dxm), GetYplot(-Vy));
LineTo(GetXplot(-Dxm), GetYplot(0)) ;
Brush.Color := clInfoBk;
FloodFill(FXo,FYo, clBlack, fsBorder);
Brush.Color : = OldColor;
DrawCross;
function TForml .GetXplot (X: TFloat) : integer;
begin
Result := FXo + Trunc(FMx * X);
Getxplot;
GetYploc(Y);
Imagel-Height
X : TVector;
Ncorr : integer;
X. GetFromGrid (1, cGetAll, sgXO, 0,0. mdColDown).
StrToFloat(edDelta.Text);
Alpha StrToFloat(edAlpha.Text);
SigmaMu := StrToFloat(edSigmaMu.Text) i
Ncorr StrToInt(edN.Text);
OS ;= TDiscrOptLinSyst.Create;
OS.SystProps := TDiscrOptLinSy*
OS.SystProps.A[1,1] := 1;
OS.SystProps.Bv[l]
OS.SystProps.Bv'2]
SigmaMu;
IbRisk .Caption := FloatToStrF(OS.ComplRisk,ffGeneral,6,5);
IbFuel .caption :- FloatToStrF(OS.Risk(0],ffGeneral,6,5);
IbTerminal.Caption:- FloatToStrF(OS.Risk[1),ffGeneral,6,5)
// Статистическое моделирование 100 реализаций
OS.MultErrorsOn;
OS. DisableLogging;
tok j 1 to 100 do
TForml.bRunClick(Sender: TObject)I
Глава 10. Классы объектов оптимизации
Объявления классов линейных непрерывных и дискретных систем, опти-
мизируемых по квадратичному критерию оптимальности, находятся в модулях
uoptsys и uDSCtrl библиотеки Simulate 1.0. Поскольку все классы, связан-
ные с задачами оптимизации, являются дочерними классами сложных систем, в
данном разделе приводятся сведения только о новых и перекрываемых методах
и свойствах
t управления, матрицы динамических коэффициентов и статистиче-
скис характеристики мультипликативного и аддитивного возмущений. По
умолчанию свойства линейной системы отнесены к дискретному типу.
Сведения о свойствах и методах класса представлены в табл. 10.1.
(RO) Матрица динамических коэффициентов а(!) или А,
««» Матрица динамических коэффициентов B(t) или В*
скалярном управлении.
1К» Корреляционная матрица аддитивного возмущения : Dft) или Д
СКО мультипликативной ошибки управления а-
Размерность вектора управления.
№)“ Размерность вектора состояния линейной системы.
create Создает объекты - свойства линейной системы в соответствии
>..troy Освобождает память, выделенную под объекты- свойства ли- нейной системы.
Если свойства системы управления не зависят от времени, можно исполь-
зовать объекты данного класса непосредственно как показано в примерах пре-
дыдущего раздела. В противном случае создайте наследника
перекройте виртуальный метод Dynamics и реализуйте в нем вычисление эле-
ментов матриц динамических коэффициентов как функций времени. Для не-
задачи (если это необходимо) в методе Dynamics анализируйте свойство Baek-
i 10.2. Свойства квадратичного критерия
Свойства квадратичного критерия инкапсулированы в класс TCritFrcps.
Он является наследником TDynamicSystem и рассматривается как сервер дан-
ных квадратичного критерия вида (5.2), (5.16) , (5.17). Свойствами критерия
являются матрицы Q, W, Кт (К) и вес критерия - множитель а. Сведения о
свойствах и методах прведены в таблице 10.2. Информацию о размерности
тему, которая является владельцем данного критерия. При использовании объ-
ектов этого класса в составе TContOptSystem или TDlscrOpSystem необходи-
мые ссылки устанавливаются автоматически.
Таблица 10.2
Q RO proparty Q : TSquareMatrix; Матрица коэффициентов Q(t) или й.
:( Матрица коэффициентов W(t) или w:.
RO P^er^Kt^TS^areMatrbu^
RW Ссылка на свойства линейной системы.
Haight RW Вес критерия. По умолчанию вес критерия равен 1.
Создает «пустой» объект - сервер свойств квадратичного кри- терия с матрицами неопределенных размеров.
destructor Destroy; override;
Если объект этого класса будет использоваться в программе самостоя-
Последний оператор в приведенном выше фрагменте гарантирует создание
матриц, входящих в критерий, с соответствующими размерами.
Если свойства критерия не зависят от времени, можно применять в
грамме объекты данного класса непосредственно как показано в гл.9. В
тивном случае следует создать наследника, перекрыть метод Dynamics и
как функций времени.
i lit!
110.3. Критерий Лагранжа
Класс TComplCritProps (см. рис. 6.1) инкапсулирует критерий Лагранжа -
задачи синтеза оптимального управления. Задача любого объекта данного клас-
ческой системы показана на рис.7.3.
S(L: integer) устанавливает коли-
имеется свойство
) 10.4. Свойства оптимальных систем
Свойства линейных систем, оптимизируемых по квадратичному критерию
имальности, реализуют классы TContOptLinSysProps и
Класс TCoatoptLinSysProps инкапсулирует линейную систему (5.1) и
критерий (5.2). Таким образом, он является абстракцией оптимальной линейной
непрерывной системы управления при квадратичном критерии опимальности.
Данный класс является наследником TLinsysProps и имеет иерархическую
жащий сервером свойств уравнений (5.1), а подсистемой - сервер свойств кри-
ванных для контроллера.
гимального управления.
зависят от времени, объект этого 1
наследника
ствуюшие действия. I
ления. Связь свойств системы с критерием устанавливается присваиванием
свойству CritProps ссылки наобъект-свойства критерия, например,
(5.15) и критерия (5.18). Тем самым реализуется понятие линейной дискретной
системы, оптимизируемой по квадратичному критерию Лагранжа. Объект этого
свойств Критерия также имеет иерархическую структуру, fcro
продемонстрироваио в примере разд. 9.2. В противном случае следует соз-
> наследника TDiscrOptLinSysProps и перекрыть метод Dynamics, реали-
1в в нем соответствующие действия.
Если динамические коэффициенты критерия зависят от времени, надо соз-
их в список подсистем критерия, доступного через свойство
Объект TDiscrLinSysProps создается конструктором Create (л, mJ, гае и
- число компонент вектора состояния, а т - число компонент вектора управле-
навливает число частных критериев (5.17), включая и основной критерий (5.16).
При составлении программ достаточно применять объекты класса
Далее можно определять свойства самой системы и критериев, например:
MyDSProps .А[1,1] := 1;
МуOSProps.В[1,1] := 2,-
вычисления правых частей матричного дифференциального уравнения (5.7) и
Свойства класса TConlSysCcntroller
(RW) Коэффициент C(t) - решение уравнения (5.9).
(RO) Коэффициент обратной связи по i-й компоненте вектора со-
мент строки коэффициентов обратной связи для случая ска- лярного управления.
Cj (RO) property Cj (Index: integer] : TFloat; Коэффициенты С’ в (5.30). O^ndexil.
Ссылка на свойства обобщенно) критерия (5.18).
GainsLiSt property GainsLiat : TMatrixLiet; Указатель на список матриц коэффициентов обратной связи.
(RO) Номер шага :=/ .N, где w - количество шагов (см. ниже).
(RO) Матрица К, в уравнении (5.24).
So) property Kj (Index:integer]: TSymHatrix; Матрица К? в уравнениях (5.30), o^ndex<!.
(BO> property L(AStep:integer): TMatrix; Матрица коэффициентов обратной связи Lt где AStep есть
<№l property Lv[AStep,Index :integer):TFloat: Значением является коэффициент обратной связи шага AStep по компоненте вектора состояния с номером Index в случае скалярного управления.
(№> Количество шагов, заданное методом Resetcontroller объекта TDiscroptSystem - владельца объекта данного клас-
Ссылка насвойтсва линейной системы
Класс TContOptSystem (наследник TDifEquation) инкапсулирует свойства
и правила моделирования замкнутой системы, блоком управления в которой
является алгоритм синтеза оптимального управления линейной непрерывной
стохастической системой, реализуемый объектом типа TContSysControlier.
100
объект, инкапсулирующий нелинейную систему, траектория движения которой
находится в окрестности заданной опорной траектории, а управляющее воздей-
Подобный объект необходим, например, для составления программ авали-
ния границ приемлемости линеаризации при решении той или иной техниче-
ской задачи. Для изучения теории и практики применения линеаризации урав-
нений возмущенного движения в задачах синтеза оптимального управления
решения задачи синтеза оптимального управления и моделирования замкнутой
ий. Для этого рассматриваемый класс инкапсулирует си-
управления
замкнутой системы класс
(RO) property BackMode : boolean; Флаг этапа решения задачи. Если (гае, то объект в режи- ме решения задачи синтеза (этап 1). В противном случае объект находится в режиме моделирования замкнутой системы (этап 2).
Controller (RO) property Controller:TContSysController; Указатель на объект - контроллер линейной непрерыв-
property Control : TVector; Указатель на объект - вектор управления U(t,xj.
property CritPrcpS : TCritProps; указатель на объект - свойства критерия (5.2).
SystProps (RW) Указатель на объект - свойства линейной непрерывной системы, оптимизируемой по квадратичному критерию.
Конечное системное время интервала моделирования.
property Method : TPropMethod; Определяет метод интегрирования для внутреннего си- мулятора. Допустимы значения: itEuler-метод Эйле- ра; itEulerCauchy - метод Эйлера-Коши; HRungeKutta - метод Рунге-Кутты 4-го порядка.
OnSolverEnter property OnSolverEnter:TNoti fyEvent; Метод - обработчик события onEnter внутреннего си- мулятора.
OnSolverOutput property OnSolverOutput:TNotifyEvent; Метод - обработчик события cmoutput внутреннего си- мулятора.
Обработчик события внутреннего симулятора OnExit.
4^a***S*ep Обработчик события onstop внутреннего симулятора.
Risk""" (RO) property Risk : TFloat; Значение функции будущих потерь (5.13).
Указатель на встроенный симулятор.
(№1 Текущее скалярное управление U(t). Имеет смысл только при прямом моделировании когда работает метод
(№> Компонента index текущего векторного управления U(t). Имеет смысл только при прямом моделировании когда работает метод Simulate.
32
тервале [tn,7]. Уравнения модели должен реализовать ме- При прямом моделировании флаг BackMode-false и уравнения движения интегрируются совместно с уравне- ниями контроллера.
Задача моделирования линейных оптимальных систем инкапсулирована в
класс TContOptLinSys. Он является наследником TContOptSystem и перекры-
На листинге 10.1 приведен исходный код класса TContOptLinSyst. Анали-
линейным блоком управления
Включение объекта реализующего опорную траекторию в состав замкну-
той системы осуществляется оператором вида
MyClosedLoopSystem - объект-наследник класса TContOptSystem.
Внутри класса MyClosedLoopSystem ссылка на объект пользовательского
класса содержится в элементе Member [UserMember ].
105
§ 10.8. Замкнутая дискретная система свойства и правила моделирования замкнутой системы, блоком управления в которой является алгоритм синтеза оптимального управления линейной дис- кретной стохастической системой, реализуемый объектом типа TDiscrSysController. На основе класса TDiscroptSystem можно создать объ- ходится в окрестности заданной опорной траектории, а управляющее воздейст- вие вычисляет объект типа TDiscrSysController. Подобный объект необхо- дим для анализа поведения нелинейной системы с линейным блоком управле- пракгики применения линеаризации уравнений возмущенного движения в за-
комендовать монографии [6.8]. В классе TDiscroptSystem уравнения движения не определены. Так, для альные методы Dynamics и Obtaincontrol. Как было сказано выше, класс TDiscroptSystem инкапсулирует правила решения задачи синтеза оптимального управления и моделирования замкнутой этапа. На каждом из них осуществляется моделирование систем дискретных уравнений. Для этого класс инкапсулирует симулятор TSimulator, свойства и методы которого рассмотрены в §3 4. Для простоты управления моделировани- ем замкнутой системы класс TDiscroptSystem имеет свойства, которые по смыслу аналогичны соответствующим свойствам класса TSimulator. Таблица 10.6
CotqplRisk Значение функции будущих потерь (5.33). Имеет
Controller
(RO) Указатель на вектор управления и/х).
106
§ 10.8. Замкнутая дискретная система свойства и правила моделирования замкнутой системы, блоком управления в которой является алгоритм синтеза оптимального управления линейной дис- кретной стохастической системой, реализуемый объектом типа TDiscrSysController. На основе класса TDiscrOptSystem можно создать объ- ходится в окрестности заданной опорной траектории, а управляющее воздейст- вие вычисляет объект типа TDiscrSysController. Подобный объект необхо- дим для анализа поведения нелинейной системы с линейным блоком управле- пракгики применения линеаризации уравнений возмущенного движения в за-
комендовать монографии [6.8]. В классе TDiscrOptSystem уравнения движения не определены. Так, для альные методы Dynamics и Obtaincontrol. Как было сказано выше, класс TDiscrOptSystem инкапсулирует правила решения задачи синтеза оптимального управления и моделирования замкнутой этапа. На каждом из них осуществляется моделирование систем дискретных уравнений. Для этого класс инкапсулирует симулятор TSimulator, свойства и методы которого рассмотрены в §3 4. Для простоты управления моделировани- ем замкнутой системы класс TDiscrOptSystem имеет свойства, которые по смыслу аналогичны соответствующим свойствам класса Tsimuiator. Таблица 10.6
ComplRisk Значение функции будущих потерь (5.33). Имеет
Controller
(RO) Указатель на вектор управления и/х).
106
(ВИ property Cri tenon (Index: integer]: TCntProps i Ссылка на свойства критерия (5.16) при index-о или на свойства любого критерия (5.17) при Index -
(RO) Текущий шаг на интервале
(RO) Количество шагов N. Задает метод Resetcontroller.
Количество критериев задачи, включая основной.
Указатель на свойства линейной дискретной системы.
Обработчик события симулятора OnEnter.
xlv-t0“tput Обработчик события симулятора OnOutput.
OnSolvezExit Обработчик события симулятора OnExit
Обработчик события симулятора OnStop
Значение составляющей обобщенного критерия опти- мальности при неслучайном начальном векторе состояния -(5.33), (5.34).
property Solver : TSimulator; Указатель на встроенный объект - симулятор.
(RO> Текущее скалярное управление Ц. Имеет смысл только при прямом моделировании когда работает метод
107
(RO) Компонента index текущего векторного управления
U.ezMember (RO> property OserMember : integer;
Создает структуру объекта.
Destroy
AdditiveErrors procedure AdditiveErrorsOff; Отключает режим учета случайных аддитивных оши- бок.
AdditiveErxoreOn Включает режим учета случайных аддитивных ошибок.
DisableLogging Отключает обработчики событий симулятора onEnter, OnOutput, CnExit.
EnebleLogging Активизирует обработчики событий симулятора
MultExroreOff procedure MultErrorsOff; ных ошибок
MultErrorsOn Включает режим учета случайных мультипликатив-
ObtainControl ObtainControl(V:TVector}; vlrtual; Подлежит перекрытию при наследовании. Предна- значен для вычисления управления V в текущий мо-
108
Со»Ио11.г Решает N- шаговую задачу синтеза. После обращения к этому методу возможно моделирование замкнутой сис- вованы только уравнения контроллера.
гов. Уравнения модели должен реализовать метод Dynamics. При прямом моделировании флаг системы BackMode-f al se, уравнения контроллера из цикла мо-
Для моделирования линейной дисктретной замкнутой системы имеется
класс TDiscrOptLinSys. Он является наследником TDiscroptSystem, который
перекрывает только родительский метод Dynamics.
На листинге 102 приведены объявление и описание класса
TDiscrOptLinSys. Здесь иллюстрируется технология моделирования дискрет-
109
стности опорной траектории, аналогична случаю непрерывной системы.
2. КошткаРэй. Создание оригинальных компонент в среде Delphi. К.:НИПФ -
«ДиаСофт Лтд.», 1996.
3. Дарахвелидзе П.Г. Марков ЕЛ. Delphi 4.-СПб.:БХВ -Санкт-Петербург,
1998.
4. Лебедев В.Н. Расчет движения космического аппарата с малой тягоЙ.-М.: ВЦ
АН СССР. Выпуск 5.1968
движением космических летательных аппаратов. - М.:Машиностроение,
1974.
Учебное пособие. - М.: МАИ, 1983.
орбитах / М.Ф.Решетнев,
^Машиностроение, 1988.
110