Синтез системы управления спуском космического аппарата на поверхность Марса методом интеллектуальной эволюции

 

Введение


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

Главной задачей данной работы является произвести синтез системы управления для обеспечения безопасного спуска в атмосферу Марса.

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

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

Запланированный на конец текущего года запуск американского аппарата The Mars Science Laboratory (MSL) обещает стать первым шагом на пути реализации управляемого спуска в атмосфере Марса, что позволит обеспечить точное приземление в запланированное место посадки. Однако, метод управления, применяемый для MSL имеет существенные ограничения. Он основан на линеаризации уравнений движения космического аппарата относительно заранее рассчитанной номинальной траектории, таким образом, не существует возможности правильно реагировать на изменение параметров входа в атмосферу, а также места посадки. Параметры системы управления так же рассчитаны для номинальной траектории и не могут изменяться в процессе спуска. Одна из основных трудностей в реализации оптимального управления заключается в отсутствии точных знаний о начальном состоянии спускаемого космического аппарата. Траектория спуска и его основные параметры, точность посадки и максимальная перегрузка, существенно зависят от начального угла входа в атмосферу и начальной высоты. Значительная удаленность Марса в свою очередь затрудняет управление с Земли процессом спуска космического аппарата.

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

Объектом исследования в работе является система управления КА спускающегося в атмосферу Марса.

Цель работы состоит в разработке алгоритмов методом интеллектуальной эволюции для синтеза системы управления КА.

Для достижения цели в работе решаются следующие задачи:

üразработка вычислительного метода синтеза системы управления с использованием метода сетевого оператора и алгоритмов интеллектуальной эволюции;

üразработка комплекса программ для решения задачи синтеза космического аппарата;

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

1. Постановка задачи


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

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

Мягкий спуск большой массы на поверхность Марса <#"justify">

Рис.1. Схема входа "Кьюриосити" в атмосферу Марса


Теперь сформируем формальную постановку задачи.

Математическая модель спускаемого космического аппарата представляет собой систему дифференциальных уравнений четвертого порядка.


, (1)

, (2)

,(3)

,(4)


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


,,


- масса космического аппарата, - площадь поверхности сопротивления комического аппарата,, - аэродинамические коэффициенты,



- плотность атмосферы на поверхности Марса, - коэффициент разреженности атмосферы,


.


Заданы начальные условия:


,

,

,

,


где - угол наклона траектории при входе в атмосферу,

, , (5)


- расстояние до поверхности планеты, с которого начинается вход в атмосферу,


, , (6)


Цель управления описывается следующим функционалом:


, (7)


где - весовой коэффициент, - перегрузка


,

,

,

- терминальная ошибка

,

,

.


Управление ищем в виде

(8)


где - искомое математическое выражение, - вектор параметров, не меняющихся в процессе управления.

Особенностью рассматриваемой задачи является наличие множества начальных значений (5), (6). При различных начальных значениях (5), (6) значения функционала (7), различны.

Главная задача управления - это поиск математического выражения (8), благодаря которому будет обеспечен плавный вход спутника в разряженную атмосферу Марса.

Рассмотрим подробнее способы нахождения математического выражения.


Способы нахождения математического выражения:

















* АКОР - аналитическое конструирование оптимальных регуляторов.

** АКАР - аналитическое конструирование агрегированных регуляторов


2. Генетическое программирование


Для решения многих практических задач наиболее естественным представлением решений являются компьютерные программы. Одна из центральных задач теории вычислительных систем (computer science) - научить компьютер решать поставленную задачу, не объясняя ему как это делать. Генетическое программирование позволяет сделать это путем создания работающих компьютерных программ исходя из высокоуровневой постановки задачи. Генетическое программирование достигает поставленной цели автоматического программирования или программного синтеза (automatic programming, program synthesis) путем выращивания популяций компьютерных программ, используя принцип естественного отбора Дарвина, и основанные на генетических принципах операторы, которые могут включать репродукцию, скрещивание и мутацию.

Джон Коза (John R. Koza) в 1987 продемонстрировал эволюцию выражений языка программирования LISP. Он впервые использовал термин «генетическое программирование». В 1989 году Коза показал применение генетического программирования для решения различных задач.

Настоящее развитие генетическое программирование получило после выхода в 1992 году книги Джона Козы «Genetic Programming: On the Programming of Computers by Means of Natural Selection & Genetics», в которой он продемонстрировал области применения метода, а также численные результаты экспериментов и некоторые практические рекомендации. По сути, генетическое программирование является некой модификацией генетического алгоритма, основное различие - в представлении решений. Решения в генетическом программировании могут иметь различную форму и размер, в генетическом алгоритме - это строки фиксированной длины. Наиболее распространенным является представление в виде деревьев.

Символьная запись:

1.инфиксная (используется для бинарных операций, когда операция ставится между аргументами);

.префиксная (используется сначала символ операции, затем символьный аргумент);

.постфиксная (используется сначала аргумент, затем операция);

Рассмотрим это на примере.


, (1)


где ,, -параметры,, - переменные.

В математическом выражении выделим унарные (u) и бинарные (b) операции. В результате принятых обозначений префиксная символьная запись рассматриваемого математического выражения имеет вид:


y1=b1u1u2b1q1x1u3b2b1q2x2q3, где


- операция умножения, - операция сложения, - унарная операция вычисления экспоненты, - унарная операция обращения знака или унарный минус, - операция вычисления синуса.

Символическая запись математического выражения имеет древовидную структуру, которая представлена на рис.2.






Рис.2. Дерево вычислений выражения (1)


По дереву вычислений математического выражения видно, что узлы дерева содержат символы операции, причем бинарные операции имеют две ветви, а унарные - одну. Параметры и переменные математического выражения расположены на листьях дерева.

Для выполнения операции скрещивания в ГП случайно выбирают в обоих выражениях операции, имеющие одинаковые количества аргументов, и обменивают поддеревья, для которых эти операции являются вершинами.

Пусть есть мат. выражение:y2= b2b1b2b1q1x1x2b2b1q1x1u3b2x1q2(2).

Дерево решений представлено на рис.3








Рис.3. Дерево вычислений выражения (2).


На рис. 1 и 2 выбранные вершины заштрихованы. После обмена поддеревьев, исходящих от выбранных вершин, получаем деревья вычислений, представленные на рис.4 и 5. В результате выполнения операции скрещивания получаем следующие мат. Выражения

y3=b1u1u2b1q1x1u3b2b1q1x1x2 (3)

y4=b2b1b2b1q2x2q3b2b1q1x1x2u3b2x1q2(4)










Рис.4.Дерево вычислений выражения (3).Скрещивание.









Рис.5. Дерево вычислений выражения (4).


Выделим основные недостатки ГП:

üпри вычислении мат. выражения необходимо анализировать все символы строк;

üпри выполнении операции скрещивания необходимо находить обмениваемые подстроки, соответствующие поддеревьям вычислений;

üчисло вхождений параметров и переменных в математическое выражение соответствует числу символов для их описания;

üдлина символьных строк не одинакова и в процессе поиска после многократного скрещивания увеличивается;

üнарушается преемственность описания математических выражений, так как результат скрещивания двух математических выражений зависит от обмениваемых подстрок.

Метод сетевого оператора.

Основная задача, для решения которой необходимо использовать метод сетевого оператора, - это поиск нужного математического выражения. Большинство задач поиска математического выражения решают в полуавтоматическом режиме. Исследователь вручную записывает математическое выражение, в которое входят параметры в виде символов. Затем с помощью вычислительной машины осуществляется поиск оптимальных значений входящих в него параметров.

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

Метод сетевого оператора позволяет представить математическое выражение в виде ориентированного графа (рис.8).Ориентированный граф (сокращённо орграф) G - это упорядоченная пара , для которой выполнены следующие условия:

·- это непустое множество вершин или узлов,

·- это множество (упорядоченных) пар различных вершин, называемых дугами или ориентированными рёбрами.

Рис.8 Графическое изображение ориентированного графа.


В вычислительной машине ориентированный граф сетевого оператора представляют в виде целочисленной матрицы.

При построении сетевого оператора вводят дополнительную унарную тождественную операцию. В узлах-источниках сетевого оператора располагают переменные и параметры математического выражения. Все остальные узлы графа связывают с соответствующими бинарными операциями.

Какие же операции называются унарными, а какие бинарными? Остановимся на этих определениях поподробнее.

Унарные - тип операции, при которой имеется один принимаемый аргумент (отрицание, унарный минус).

Бинарные - тип операции, при которой имеется два принимаемых аргумента (сложение, вычитание, умножение и т.д.).

В качестве примера рассмотрим многослойный сетевой оператор.

Пример:


а) Исходный сетевой оператор


б) Слой 1


в) Слой 2


Слой 1 сетевого оператора описывает два математических выражения и . Слой 2 соответствует математическому выражению .

Матрицы слоев сетевого оператора имеют следующий вид

сетевой оператор алгоритм вычислительный

,


В результате вместо одного операторного уравнения



имеем два операторных уравнения с матрицами сетевых операторов меньшего размера:


,.


При разбиении матрицы сетевого оператора необходимо учитывать рабочее пространство матрицы для описания математических выражений [8]. Чем меньше величина рабочего пространства, тем эффективнее используется каждый элемент матрицы сетевого оператора для описания математического выражения. Величину рабочего пространства вычисляем по формуле

+ L-m+


где L- размерность матрицы сетевого оператора, m - количество узлов-источников.


Вывод: метод сетевого оператора позволяет синтезировать систему управления пространственным движением летательного аппарата. В результате использования многослойного сетевого оператора удается сократить количество просматриваемых в результате вычислений элементов.


3. Пчелиный алгоритм


Алгоритм пчел является довольно молодым алгоритмом для нахождения глобальных экстремумов (максимумов или минимумов) сложных многомерных функций (будем называть эту функцию целевой функцией).

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

Первоначально из улья вылетают в случайном направлении некоторое количество пчел, которые отыскивают участки, где есть нектар. Через некоторое время пчелы возвращаются в улей и сообщают остальным, где и сколько они нашли нектара.

После этого на найденные участки отправляются другие пчелы, причем, чем больше на этом участке предполагается найти нектара, тем больше пчел летит в этом направлении. А разведчики опять улетают искать другие участки, после чего процесс повторяется.

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

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

Оценка пригодности для частицы, сравнение с персональной наилучшей позицией (ПЛП) и глобальной наилучшей позицией (ГНП)- является следующим шагом реализации. Функция пригодности, используя координаты частицы в пространстве решений, возвращает значение пригодности для текущей позиции. Если это значение больше, чем значение ПНП, соответствующее этой частице, или ГНП, тогда соответствующие позиции заменяются текущей позицией.

Манипуляции со скоростью частицы являются основным элементом всей оптимизации. Скорость частицы меняется в соответствии с взаимным расположением позиций ПНП и ГНП. Она стремится в направлении этих позиций наибольшей пригодности в соответствии со следующим уравнением:



где: - это скорость частицы в n-том измерении на предыдущем шаге,

- это координата частицы в n-том измерении,

- ПНП,

-ГНП.

Расчет производится для каждого из N. Из этого уравнения видно, что новая скорость получается из старой скорости путем простого масштабирования на, и прибавления направления ГНП и ПНП для этого конкретного направления. и - это масштабные коэффициенты, которые определяют относительное взаимное «притяжение» к ПНП и ГНП.

Они иногда рассматриваются как познавательный и социальный факторы. - это коэффициент, определяющий какое влияние на частицу оказывает ее память о ПНП, и- коэффициент, определяющий какое влияние на частицу оказывают остальные члены роя. Увеличение предполагает исследование пространства решений путем движения каждой частицы в направлении своего ПНП; увеличение предполагает исследование предполагаемого глобального максимума. Функция случайных чисел rand() возвращает число в интервале между -1 и 1. В общем случае два появления функции rand() представляет собой два различных вызова функции. Большинство реализаций используют две независимые случайные величины для стохастического изменения относительного притяжения ГНП и ПНП. Это введение случайного элемента в оптимизацию предназначено для моделирования незначительного непредсказуемого компонента реального поведения роя. называют «инерционным весом» и это число (выбранное в интервале между 0 и 1) отражает в какой мере частица остается верной своему первоначальному курсу, не подвергшемуся влиянию ГНП и ПНП.

В итоге можно заметить, что метод роя пчёл можно эффективно распределить на несколько параллельных процессов, за счёт чего значительно увеличится его скорость.

По сравнению с генетическим алгоритмом, операторы которого могут быть реализованы различным образом, имеет лишь один оператор - вычисление скорости, что делает его более простым в использовании.

В методе роя пчёл можно легко определить достижение точки глобального минимума, в то время как в генетических алгоритмах это значительно осложнено.

Концепция этих методов основывается на двух совершенно разных природных процессах: МРП основывается на социальном поведении роя, а генетический алгоритм имитирует процесс эволюции и естественного отбора.

За счёт этого есть возможность объединить два этих метода.

Теперь рассмотрим генетический алгоритм. Хотя, название алгоритма созвучно с генетическим программированием - эти понятия не дополняют друг друга.

Согласно правилам работы генетического алгоритма (ГА) первоначально генерируют множество возможных решений или хромосом и виде строк символов, каждая их которых представляет собой математическое выражение. Затем оценивают каждое возможное решение с помощью функции приспособленности, которую для оптимизационных задач строят на основе целевой функции с учётом ограничений. На основе отобранных решений воспроизводят новые решения с помощью специальных операций генетического алгоритма скрещивания и мутации. Блок-схема таких операций приведена на рис. 6 и 7.


Рис.6. Блок-схема генетического алгоритма. Рис.7. Схема эволюции решений в генетическом алгоритме

Рассмотрим ГА, который позволяет одновременно искать решения обеих задач целочисленной оптимизации для поиска структуры решения и нелинейного программирования для поиска оптимальных значений параметров.

vПервоначально задаём базисное решение задачи. Это решение может представлять собой любое математическое выражение, которое, по мнению исследователя, наиболее близко к искомому оптимальному выражению.

Базисное решение описываем матрицей сетевого оператора


= , i, j = .


vГенерируем упорядоченные множества векторов вариаций.

vГенерируем битовые строки, определяющие параметрическую часть хромосомы.

vДля каждой хромосомы определяем значения функционалов.

vОпределяем количество возможных решений. И отбираем лучшие.

vДля построения новых возможных решений выполняем операции

скрещивания и мутации.

vОсуществляем построение новых хромосом.

vВычисляем значение функционалов.


4. Метод интеллектуальной эволюции


Современные вычислительные алгоритмы (дифференциальной эволюции, роя частиц, пчелиный алгоритм, генетические алгоритмы и т.д.) относятся к классу эволюционных алгоритмов. В том случае, когда эти алгоритмы содержат элементы интеллектуального анализа, подстройки алгоритма под цели решаемой проблемы и т.п., эти алгоритмы можно отнести к классу «интеллектуальной эволюции».

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

Общий алгоритм метода можно представить в виде следующего псевдокода:

. Инициализация.

. Оценка множества (популяции) возможных решений.

. Формируем решения с разными базисами.

. Создание новых хромосом (возможных решений): отбор, скрещивание и мутация на решениях с разными базисами.

. Оценка новой популяции возможных решений и замена плохих решений на лучшие.

. Проверка условия смены эпох.

. Проверка условия останова алгоритма.

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

, .


Генерируем упорядоченное множество векторов вариаций


, , (7)


где H - количество возможных решений или размерность картежей.

Параметрическую часть каждого возможного решения генерируем с помощью кода Грея в виде битовых строк


, , (8)


где p - число параметров, с - число бит под целую часть, d - число бит под дробную часть числа.

Таким образом, получаем множество родительских хромосом (возможных решений)


, . (9)


На втором этапе производим оценку множества возможных решений. Для каждого возможного решения , вычисляем значения функционалов (2)



путем построения матрицы сетевого оператора : и перевода параметрической части картежа из двоичного кода в вектор параметров


.


Также каждую полученную матрицу сетевого оператора и вектора параметров оцениваем по расстоянию до множества Парето. Оно определяется количеством решений, которые лучше в смысле Парето, чем анализируемое


,


Где

Все возможные решения сортируем по показателю .

На третьем этапе на основе исходного (нулевого) базисного решения и заданного числа, лучших с точки зрения расстояния до множества Парето хромосом формируем множество базисов , , причем каждому из этих базисов ставится в соответствие значение вероятности его использования , обратно пропорциональное его расстоянию до множества Парето.

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

Такой подход основан на идее пчелиного алгоритма, который имитирует поведение колонии пчел при поиске мест, где можно раздобыть как можно больше нектара. Сначала часть пчел определяет количество нектара на случайно выбранных участках, а затем, чем больше на данном участке предполагается найти нектара, тем больше пчел летит в этом направлении. В разработанном алгоритме базисы играют роль таких выбранных участков, а расстояние до множества Парето соответствует количеству нектара, найденного на каждом из участков.

На четвертом этапе для построения новых возможных решений (хромосом) на основе множества (9) выполняем генетические операции отбора, скрещивания и мутации на популяции с исходным и новыми базисами [1, 2].

На пятом этапе для всех новых решений вычисляем значения функционалов (2).

Для каждого нового решения выполняем следующие процедуры. Находим расстояние до множества Парето . Находим во множестве возможных решений хромосому, которая имеет наибольшее расстояние до множества Парето.


, (10)


где - номер возможного решения, имеющего наибольшее расстояние до множества Парето.

Сравниваем новое решение с решением, которое имеет наибольшее расстояние до множества Парето


. (11)


Если условие (11) выполняется, то заменяем решение, которое имеет наибольшее расстояние до множества Парето, на первое новое решение

,

,(12)

.


Пересчитываем расстояния до множества Парето для всех возможных решений в множестве и повторяем действия (10)-(12) для всех новых решений.

Повторяем четвертый и пятый этапы Е раз, где Е - заданное число поколений между сменами эпох, и меняем базисное решение на лучшее из массива базисов.

Завершаем вычисления, когда выполним заданное количество циклов. Отбираем решения, которые имеют нулевое расстояние до множества Парето, получаем новое множество Парето, которое считаем решением задачи (1)-(4)


. (13)


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


5. Синтез системы управления


Рассмотрим задачу синтеза системы управления с несколькими целями управления.

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


,(1)


где , ,- ограниченное замкнутое множество, .

Состояние объекта управления оцениваем по наблюдаемым координатам


,(2)


где, .

Для системы (1) заданы начальные условия


,(3)


Задано множество целевых состояний


,(4)


причем .

Задан критерий качества управления

(5)


где - время управления, которое может быть ограничено, , но не задано.

Необходимо найти управление в форме


(6)


которое обеспечивает достижение последовательно всех целевых точек (4) и минимизирует функционал (5).

Цель управления (4) многозначна. Для перехода к задаче синтеза интеллектуальной системы управления необходимо обеспечить в системе возможность выбора. Для этой цели ослабим требования к попаданию объекта в каждую целевую точку, заменим требованием попадания в окрестность целевой точки.


,,(7)


где - малая положительная величина.

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

Уточним данную постановку задачи.

Управление (6) представим в виде функции, зависящей от расстояния до цели


,(8)


где - номер текущей целевой точки.

В любой момент времени номер текущей целевой точки определяем с помощью логической функции


, , (9)


где, - предикатная функция,


: .(10)


Функцию (10) также необходимо найти вместе с синтезирующей функцией (6). Функция (10) должна обеспечивать переключение целевых точек. Обе функции (6) и (10) должны обеспечивать минимум функционалу качества (5) функционалу точности


(11)


Время управления определяем по достижению последней целевой точки

, если ,(12)


где - малая положительная величина.

Частный критерий (5) заменим суммарным критерием качества


(13)


Для построения предикатной функции используем функцию дискретизации и логическую функцию.


,(14)


где - логическая функция,


, (15)

где - функция дискретизации.


Задача заключается в том, чтобы найти управления в форме


,(16)


где - целочисленный вектор, определяющий управления для решения частной задачи . Управления (16) должно обеспечить достижения минимумов функционалов (11) и (13).

В общем случае, так как задача содержит два критерия (11) и (13), то ее решением будет множество Парето в пространстве функционалов . Конкретное решение на множество Парето выбирает разработчик по результатам моделирования и исследования синтезированной системы управления.

Задачу (1) - (3), (7) - (16) называем задачей синтеза интеллектуальной системы управления. Для ее решения необходимо найти две многомерные синтезирующие функции и .

Для решения задачи синтеза интеллектуальной системы управления используем метод сетевого оператора [1-7]. Для нахождения функции используем обычный арифметический сетевой оператор, в котором в качестве конструктивных функций используем множество арифметических функций с одним или двумя аргументами. В методе сетевого оператора эти функции называются унарными или бинарными операциями. Для нахождения логической функции используем логический сетевой оператор, соответственно с унарными и бинарными логическими операциями.

В качестве примера рассмотрим следующую математическую модель.


,

,


где,- координаты на плоскости.

На управление наложены ограничения

Траектория движения задана набором точек .

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

,

,


где

, ,

Задача логического управления заключалась в обеспечении переключения точек траектории.


,


где, , ,

, .

Начальные значения для моделирования были .

На рис. 9 приведено полученное решение в виде множества Парето.


Рис. 9. Множество Парето


На множестве Парето было отобрано лучшее решение по критерию . Полученные матрицы арифметического и логического сетевых операторов имеют следующий вид



.

На рис. 10,11 показаны результаты моделирования отобранной системы управления.


Рис. 10. Траектории на плоскости


Рис. 11. Управление


Время движения по всей траектории составило 4.82 с. При оптимальном по быстродействию управлении, при точном прохождении всех точек время движения по траектории составило бы

5.1 Задача спуска космического аппарата на поверхность Марса


Задача спуска - обеспечить плавный вход спутника в атмосферу Марса, испытав при этом минимальную перегрузку.


Рис.12 график перегрузки


Рис. 13 график управления

5.2 Вычислительный эксперимент


В среде Delphi 6 разработан вычислительный комплекс, соответствующий условиям поставленной задачи.


Рис.14. Главное меню программы


I.Раздел Initialization:

a. Create object- задаются параметры сетевого оператора и генетического алгоритма.

b. Undefined parameters - задаются максимальные и минимальные значения Х и У.

c. Parameters of Network operator - параметры сетевого оператора. Строится матрица базисного значения сетевого оператора, значения параметров q и psi (их можно загрузить новыми и сохранить).

d. Parameters of GA - Genetic algorithm with network operator - Ввод параметров генетического алгоритма.

II.Раздел Optimization:

a.GA for NOP + Parameters

b.GA for Parameters.Раздел Pareto set

a.Pareto set - множество Парето.Раздел Expression.Show - просмотр полученных выражений.Print to file - запись полученных выражений в файл

c.Clear - очистить окно.Раздел Simulation:.Initial data - отображение введённой части экспертной системы. В этом окне можно загрузить экспертную систему из файла, сохранить её в файл, а так же изменять введённую экспертную систему.

Проводим эксперимент, используя часть составленного нами метода. Для поиска решений используем генетический алгоритм с параметрами, приведёнными в Таблице № 1 и программу из Приложения A для спуска аппарата на поверхность Марса методом интеллектуальной эволюции.


Таблица №1. Параметры генетического алгоритма

ПараметрЗначениеРазмер начальной популяции хромосом или возможных решений256Число поколений64Число пар в одном поколении128Число изменений в одной хромосоме8Число функционалов2Число искомых параметров4Количество битов для дробной части10Число поколений в одной эпохе между сменой базисного решения29Число элитарных хромосом16Параметр для скрещивания0.4Вероятность мутации0.7

Рис.15. Параметры генетического алгоритма


Рис.16.Матрица сетевого оператора


Для решения используем значения и q.

Эти значения прилагаются в приложении Б.

*******************operations

2 3 4 5 6 7 8 9 10 14 15 16 17 18 23

*******************operations

1

*******************of nodes for variables

2 4 6

*******************of nodes for parameters

3 5 7

*******************of nodes for outputs

23

*******************network operator matrix

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 23 0 0 0 0

0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 6 0

0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 9 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 1 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

*******************of parameters q:

2,69336

,82227

,78711

,32910

z_0=x_0_1=q_0_2=x_1_3=q_1_4=x_2_5=q_2_6=x_3_7=q_3=Prod(z_1,z_0)

=Prod(z_3,z_2)

=Prod(z_5,z_4)

=Prod(z_7,z_6)

=Sum(z_9,z_8)

=Sum(z_11,z_10)

z14=Sum(z_12)=Sum(z_13)=Sum(z_12)=Sum(z_13)=Sum(Ro_18(z_13),z_12)=Sum(z_17,Ro_9(z_14),Ro_23(z_6))

=Sum(z_18)=Sum(z_19)=Sum(z_20,Ro_6(z_10))=Sum(z_22,Ro_17(z_21))


Исследование 1


Рис.17.Множество Парето.


Условное множество Парето

№Кол-во решенийF_0F_10128462712484627…………501794624…………912404722

Заключение


На сегодняшний день задача синтеза - одна из самых актуальных тем современной науки. Благодаря современной вычислительной технике появилась возможность смоделировать летательные объекты и максимально чётко просчитать математические модели этих объектов. Тем самым снизить риск неполадок при запуске спутника.

Объектом исследования в работе являлась система управления КА спускающегося в атмосферу Марса.

Цель работы заключалась в разработке алгоритмов методом интеллектуальной эволюции для синтеза системы управления КА.

Для достижения цели в работе решились следующие задачи:

üбыл разработан вычислительный метод синтеза системы управления с использованием метода сетевого оператора и алгоритмов интеллектуальной эволюции;

üразработан комплекс программ для решения задачи синтеза космического аппарата;

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

На базе разработанных методов в среде Delphi 6 был разработан программный вычислительный комплекс. Тестирование программы успешно завершено на эталонном объекте, описываемом системой дифференциальных уравнений четвёртого порядка. Синтезированное управление сохраняет свойства оптимальности даже при изменении начальных условий в заданном диапазоне.

Список литературы


1. Дивеев А.И. Метод сетевого оператора. М.: Изд-во ВЦ РАН. 2010. 178 с.

. Pham D.T., Ghanbarzadeh A., Koc E., Otri S., Rahim S., Zaidi M. The Bees Algorithm - A Novel Tool for Complex Optimisation Problems Manufacturing Engineering Centre, Cardiff University, Cardiff CF24 3AA, UK,2010, pp. 67.

. Pham D.T., Ghanbarzadeh A., Koc E, Otri S, Rahim S., Zaidi M. The Bees Algorithm. Technical Note, Manufacturing Engineering Centre, Cardiff University, UK, 2009, pp. 53.

4. Электронный журнал «Молодёжный научно-технический вестник». Издатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл No. ФС77-51038. ISSN 2307-0609.

5. А.И. Дивеев, Е.Ю. Шмалько.//«Синтез системы управления для обеспечения безопасного спуска в атмосферу Марса» 2008, № 3. С. 43 - 87.

. Braun R.D., Manning R.M. Mars Exploration Entry, Descent and Landing Challenges//IEEE Aerospace Conference, Big Sky Montana, March 2010. Pp.№0076.

. Mendeck G.F., Carman G.L. Guidance Design for Mars Smart Landers Using the Entry Terminal Point Controller, AIAA 2002-4502, Atmospheric Flight Mechanics Conference and Exhibit, Monterey, CA, August 2009.Pp. 147.

. Carman, G., Ives, D., and Geller, D., Apollo-Derived Mars Precision Lander Guidance, AIAA Pp. 98-4570, Aug. 2008.

9. Дивеев А.И., Шмалько Е.Ю. Многокритериальный структурно-параметрический синтез системы управления спуском космического аппарата на основе метода сетевого оператора// Вестник Российского университета дружбы народов. Серия инженерные исследования (информационные технологии и управление). 2008, № 4. С. 86 - 93.

. T. Weise. Global Optimization Algorithms - Theory and Application: Ph.D Thesis. - University of Kassel, 2008,pp.245.

11. Дивеев А.И. Метод сетевого оператора. - М.: Учреждение Российской академии наук Вычислительный центр им. А.А. Дородницына РАН, 2010.178с.

. Дивеев А.И., Софронова Е.А. Метод генетического программирования для автоматического подбора формул в задаче структурного синтеза системы управления // Труды института системного анализа РАН. Динамика неоднородных систем. / Под ред. Ю.С. Попкова. - Вып. 10(1). - М.: ИСА РАН, КомКнига, 2010. - С.14-26.

13. Карпенко А. П., Селиверстов Е. Ю.Обзор методов роя частиц для задачи глобальной оптимизации (Particle Swarm Optimization) <#"justify">17. A. S. Mohais, R. Mendes, Ch. Ward, Ch. Posthoff. Neighborhood Re-structuring in Particle Swarm Optimization. // Proceedings of the Australian Conference on Artificial Intelligence. - 2009, pp. 776-785.

8. M. Dorigo, V. Maniezzo. Parallel Genetic Algorithms: Introduction and Overview of Current Research. // Parallel Genetic Algorithms: Theory and Applications. / Ed. by J. Stenders. - Amsterdam, IOS Press, 2012, pp. 276-289.

. M. Belal, T. El-Ghazawi. Parallel Models for Particle Swarm Optimizers. International Journal of Intelligent Computing and Information Sciences. - 2008, v. 1, pp. 100-111.

. Shu-Chuan Chu, Jeng-Shyang Pan. Intelligent Parallel Particle Swarm Optimization Algorithms. // Parallel Evolutionary Computations. - Springer Berlin, Heidelberg, 2008, v. 22, pp. 159-175.

21. Олейник Ал.А. , Субботин С.А. Интеллектуальный метод мультиагентного поиска поиска в многомерном пространстве с использованием прямой связи между агентами // 2008, с. 102 - 108.

. Макарова И.М., Лохина В.М. Интеллектуальные системы автоматического управления. М.: Физматлит, 2001. 375 с.

. Koza J.R. Genetic Programming: On the Programming of Computers by Means of Natural Selection. Cambridge, Massachusetts, London, MA: MIT Press, 2010,pp 63-96.

. O'Neill M., Ryan C. Grammatical Evolution. Evolutionary Automatic Programming in an Arbitrary Language. Kluwer Academic Publishers, 2002, pp. 385-412.

. Zelinka I., Oplatkova Z. Analytic programming // Comparative Study. CIRAS03, The second InternationalConference on Computational Intelligence, Robotics, and Autonomous Systems, Singapore, 2009,pp. 68-96.

26. Дивеев А.И., Пупков К.А., Софронова Е.А. Повышение качества систем управления на основе многокритериального синтеза методом сетевого оператора // Вестник РУДН, 2009, № 4, С. 5-12.

. Дивеев А.И., Софронова Е.А. Синтез системы управления при неопределенных фазовых ограничениях на основе метода сетевого оператора// Труды ИСА РАН. Динамика неоднородных систем/ Под ред. чл.-корр. РАН Ю.С. Попкова. М.: ИСА РАН, ЛКИ. 2008, Т. 32(3). С. 32 - 40.

. Дивеев А.И., Северцев Н.А. Метод сетевого оператора для синтеза системы управления спуском космического аппарата при неопределенных начальных условиях// Проблемы машиностроения и надежности машин. 2009, № 3, С. 85-91.

. Дивеев А.И., Северцев Н.А., Софронова Е.А. Синтез системы управления метеорологической ракетой методом генетического программирования Проблемы машиностроения и надежности машин. 2008, № 5. С. 104 - 108.

. Diveyev A.I., Sofronova E.A. Application of network operator method for synthesis of optimal structure and parameters of automatic control system// Proceedings of 17-th IFAC World Congress, Seoul, 2008, 05.07.2008 - 12.07.2008. P. 6106 - 6113.

. Дивеев А.И., Пупков К.А., Софронова Е.А. Синтез системы управления - задача тысячелетия// Вестник РУДН, 2011, № 2. С. 113-125.

. Дивеев А.И., Софронова Е.А. Многокритериальный структурно-параметрический синтез системы управления методом сетевого оператора. Программа для ЭВМ. № 2009613966.

. Дивеев А.И. Метод сетевого оператора. М.: Изд-во ВЦ РАН. 2010. 178с.

. Дивеев А.И. Синтез адаптивной системы управления методом сетевого оператора// Сб. статей Вопросы теории безопасности и устойчивости систем. М.: ВЦ РАН. 2010. Вып. 12. С. 41-55.

. Слинько М.Г. Основы и принципы математического моделирования каталитических процессов. Новосибирск: Институт катализа им. Г.К. Борескова СО РАН, 2009. 488 с.

. Овчинников М.Ю., Юнусов А.А., Хурсан С.Л., Губайдуллин И.М. Моделирование генерации синглетного кислорода при разложении диметилдиоксирана с использованием технологии OpenMP // Параллельные вычислительные технологии (ПаВТ2012) : труды международной научной конференции (Новосибирск, 26-30 марта 2012 г.). Челябинск: Издательский центр ЮУрГУ, 2012. С. 735-736.

. Волкович В. Л. Волошин А. Ф. Об одной схеме метода последовательного анализа и отсеивания вариантов // Кибернетика. 1978. № 4. С. 98-105.

. Северцев Н. А. Дивеев А. И. Оптимальный выбор варианта технического изделия // Проблемы машиностроения и надежности машин / РАН. 2009. № 5. С. 3-8.

. Дивеев А. И. К проблеме выбора варианта технической системы с монотонными параметрами // Проблемы машиностроения и надежности машин / РАН. 2010. № 4. С. 14-19.

. Дивеев А. И., Северцев Н. А. Метод трансформации в схеме последовательного анализа и отсеивания вариантов // Труды международной конференции "Вопросы оптимизации вычислений (BOB-XXVII)". Киев, 6-8 окт., 2008 г. С. 94-97.

. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 2010, 536 с.

. Петров Ю.Ю. Управляемые генетические алгоритмы, основанные на статистике. // Вторая Всероссийская научная конференция

«Нечеткие системы и мягкие вычисления». г. Ульяновск. #"justify">. Панченко Т.В. Генетические алгоритмы. Под ред. Тарасевича Ю.Ю. // г. Астрахань: Издательский дом «Астраханский университет». mathmod.aspu.ru/images/File/ebooks/GAfinal.pdf, 2008 г. - 88с.

Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы: Пер. с польск. Рудинский И.Д. М.: Горячая линия - Телеком, 2009 г. - 452с.

. Holland J.H. Adaptation in Natural and Artificial Systems. Ann Arbor: The University of Michigan Press, 2010.

. Goldberg D.E. Genetic Algorithms in Search, Optimization and Machine Learning. Addison-Wesley Publishing Company, 2011.

Приложение А


unit Unit1;

//*********************************************************

//*********************************************************, Messages, SysUtils, Variants,, Graphics, Controls, Forms,, StdCtrls, ComCtrls, Menus, UnitAdaptObjects;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TSaveDialog;: TProgressBar;: TLabel;: TMemo;: TPopupMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;Undefinedparameters1Click(Sender: TObject);GAforParameters1Click(Sender: TObject);GAforNOPParameters1Click(Sender: TObject);Parametersofmodel1Click(Sender: TObject);Latex1Click(Sender: TObject);Savetofile1Click(Sender: TObject);Clear1Click(Sender: TObject);Pascal1Click(Sender: TObject);Model1Click(Sender: TObject);Paretoset1Click(Sender: TObject);ParametersofGA1Click(Sender: TObject);Geneticalgorithm1Click(Sender: TObject);GA1Click(Sender: TObject);Binaryoperations1Click(Sender: TObject);Unaryoperations1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };=class(TModel)Create(hh1, pp1, rr1, nfu1, lchr1, p1, c1, d1, epo1,:integer; alfa1, pmut1:real; L1, Mout1, kp1,, kw1, kv1,n1,m1,ll1,ny1:integer);Func(var Fu:TArrReal); override;RP(t1:real;x1:TArrReal;var f1:TArrReal); override;Initial;override;Viewer;override;;

// epsterm=1e-2;=4.5;=1.63;

// Cy=0.15;//0.289;=0.2934;=3.71e-3;_S=96.8;

ro_0=0.02e3;=0.093;c=-0.2;=3396.9;

//angle betta -0.296c:array [0..3] of double=(0,4.86,3556.9,-1.3);:array[0..1] of real=(10,500); //высота, дальность:array[0..1] of double=(-pi,-pi);:array[0..1] of double=(0,0);

// uminc:array[0..1] of double=(0,0);

// umaxc:array[0..1] of double=(0.2,0.2);sc:array [0..15] of integer=(1,2,3,4, 5,6,7,8, 9,10,14,15, 16,17,18,23);sc:array [0..1] of integer=(0,1);:array[0..3] of real=(1,1,1,1);:array [0..1]of real =(-0.32,-5);:array [0..1]of real =(-0.28,5);:array[0..1]of real=(0.04,10);=100;// Penalty for breakdown of phase constraints:array [0..3] of integer=(0,2,4,6);:array [0..3] of integer=(1,3,5,7);:array [0..1] of integer=(23,23);:real=300;// время окончания

dtc:real=0.01;//шаг интегрирования=1e-7;

epsterm=10;=1e10;=20;=10;:array [0..23,0..23] of integer=

((0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),


(0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0),


(0,0,0,0, 0,0,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,1,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,1, 0,1,0,0, 0,0,0,0, 0,0,0,0),


(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0),


(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0),


(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1),

(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0));: TForm1;:TUser;:integer=4;//dimention of system;:integer=2;//dimention of control;:integer=8;//dimention of viewing;:real=0.1; //step of integration;:real=300;//terminal time;:real=0.1;//step of print;:TArrReal;:TArrReal;:TarrReal;,qymin1,stepsqy1:TArrReal;

:integer=256; //number of chromosomes in an initial population:integer=64; // number of generations:integer=128; // number of couples in one generation:integer=2; // number of functionals:integer=8; //number of variations in one chromosome:integer=4; //number of serching parameters:integer=2; //number of bits for integer part:integer=10; //number of bits for fractional part:integer=29; // number of ganerations between exchange of basic NOM:integer=16; // number of elitaring chromosomes:real=0.4; // parameter for crossover:real=0.7; // probability of mutation:integer=24; // dimension of network operator matrix:integer=4; //cardinal of set of variables:integer=4; //cardinal of set of parameters:integer=16; //cardinal of set of unary operations:integer=2; //cardinal of set of binary operations:integer=2; // number of outputs:integer=2;// dimention of vector of undefine parameterss1,s1,,,:TArrInt;:TArrReal;:TArrArrInt;:integer;// number of choose chromosome:TArrArrReal;:TArrReal;:TArrArrReal;,f1:real;UpProgressBar;TermStop:boolean;

//*********************************************************

//*********************************************************Calc3, Calc5, Calc4, Unit6, Unit7, Unit8, Unit9, Unit10, TGAModelUnit,, Unit2, Unit14;

{$R *.dfm}

//*********************************************************TForm1.Binaryoperations1Click(Sender: TObject);:=TForm5.create(self);.ShowModal;;TForm1.Clear1Click(Sender: TObject);.Clear;;

//*********************************************************TForm1.FormCreate(Sender: TObject);

var:integer;: Integer;

Begin;.top:=212;.left:=0;.width:=ClientWidth;.Top:=0;.Left:=0;.Height:=progressbar1.top;.Width:=ClientWidth;.ReadOnly:=true;(O1s1,kW1);(O2s1,kV1);(Pnum1,kP1);(Rnum1,kR1);(Dnum1,Mout1);(x01,n1);(umin1,m1);(umax1,m1);(q1,p1);(xm,ll1);(um,m1);(qymax1,ny1);(qymin1,ny1);(stepsqy1,ny1);i:=0 to kW1-1 dos1[i]:=O1sc[i];i:=0 to kV1-1 dos1[i]:=O2sc[i];i:=0 to kP1-1 do[i]:=Pnumc[i];i:=0 to kR1-1 do[i]:=Rnumc[i];i:=0 to Mout1-1 do[i]:=Dnumc[i];i:=0 to p1-1 do[i]:=qc[i];i:=0 to n1-1 do[i]:=x0c[i];i:=0 to m1-1 do[i]:=uminc[i];i:=0 to m1-1 do[i]:=umaxc[i];(Psi1,L1,L1);i:=0 to L1-1 doj:=0 to L1-1 do[i,j]:=PsiBasc[i,j];i:= 0 to ny1-1 do[i]:=qyminc[i];[i]:=qymaxc[i];[i]:=stepsqyc[i];;;

//*********************************************************TForm1.GA1Click(Sender: TObject);:=TForm6.create(self);.ShowModal;:=TForm8.Create(self);.ShowModal;Application.MessageBox('If the object for GA with NOP will be create then '

+'you cannot to change some paprameters. To create?',

'Creation of object',_OKCANCEL+MB_ICONWARNING)=ID_OK then:=TUser.Create(hh1, pp1, rr1, nfu1, lchr1, p1, c1, d1, epo1,, alfa1, pmut1, L1, Mout1, kp1,, kw1, kv1,n1,m1,ll1,ny1);.Enabled:=false;.Enabled:=true;.Enabled:=true;.EndGeneration:=UpProgressBar;;;

//*********************************************************TForm1.GAforNOPParameters1Click(Sender: TObject);.Max:=EA.PP;.GenAlgorithm;.Enabled:=true;;

//*********************************************************TForm1.GAforParameters1Click(Sender: TObject);.Max:=EA.PP;.GenAlgorithm1;.Enabled:=true;;

//*********************************************************TForm1.Geneticalgorithm1Click(Sender: TObject);:=TForm7.create(self);.ShowModal;.Enabled:=true;.Enabled:=true;;

//*********************************************************TForm1.Latex1Click(Sender: TObject);:integer;.NOP.PsitoTexStr;i:=0 to L1-1 do.Lines.Add(EA.NOP.zs[i]);;

//*********************************************************TForm1.Model1Click(Sender: TObject);=1e-2;,i,j:integer;:real;:=TForm2.Create(self);.ShowModal;.Initial;:=0;:=0;.NOP.SetCs(q1);:=0;abs(EA.t-tp)<EA.dt/2 then:=k+1;i:=0 to ll1-1 do(xm[i],k);i:=0 to m1-1 do(um[i],k);(tm,k);.Viewer;.NOP.Vs[0]:=EA.y[EA.n];//x[0];.NOP.Vs[1]:=EA.y[EA.n+1];//x[1];.NOP.Vs[2]:=EA.y[EA.n+2];//x[2];.NOP.Vs[3]:=EA.y[EA.n+3];//x[3];.NOP.RPControl;i:=0 to m1-1 do.u[i]:=EA.NOP.z[EA.NOP.Dnum[i]];.OgrUpr;i:=0 to ll1-1 do[i,k-1]:=EA.y[i];i:=0 to m1-1 do[i,k-1]:=EA.u[i];[k-1]:=EA.t;:=tp+dtp;;.Viewer;.NOP.Vs[0]:=EA.y[EA.n];//x[0];.NOP.Vs[1]:=EA.y[EA.n+1];//x[1];.NOP.Vs[2]:=EA.y[EA.n+2];//x[2];.NOP.Vs[3]:=EA.y[EA.n+3];//[3];f0<EA.y[EA.lv-1] then f0:=EA.y[EA.lv-1];.Euler2;(EA.y[EA.n]<=xfc[0])or(EA.t>=EA.tf);EA.y[EA.n]>xfc[0] then:=abs(EA.y[EA.n]-xfc[0])+abs(EA.y[EA.n+1]-xfc[1])f1:=abs(EA.y[EA.n+1]-xfc[1]);:=TForm11.create(self);.ShowModal;;TForm1.ParametersofGA1Click(Sender: TObject);:=TForm9.create(self);.ShowModal;;TForm1.Parametersofmodel1Click(Sender: TObject);:=TForm3.Create(self);.ShowModal;;

//*********************************************************TForm1.Paretoset1Click(Sender: TObject);:integer;:=TForm10.create(self);.ShowModal;.Caption:=inttostr(kchoose);.ReadChromosome(kchoose,q1,Psi1);;

//*********************************************************TForm1.Pascal1Click(Sender: TObject);:integer;.NOP.PsitoPasStr;i:=0 to L1-1 do.Lines.Add(EA.NOP.zs[i]);;

//*********************************************************TForm1.Savetofile1Click(Sender: TObject);savedialog1.Execute then.Lines.SaveToFile(savedialog1.FileName);;

//*********************************************************TForm1.Unaryoperations1Click(Sender: TObject);:=TForm4.create(self);.ShowModal;;

//*********************************************************TForm1.Undefinedparameters1Click(Sender: TObject);:integer;:=TForm14.Create(Self);.ShowModal;.Setqymin(qymin1);.Setqymax(qymax1);.Setstepsqy(stepsqy1);i:=0 to ny1-1 do.ix[i]:=trunc((qymax1[i]-qymin1[i])/stepsqy1[i]);.Setixmax(EA.ix);;

//*********************************************************UpProgressBar;.ProgressBar1.StepIt;.Refresh;;

{ TGANOPUser }

//*********************************************************TUser.Create(hh1, pp1, rr1, nfu1, lchr1, p1, c1, d1, epo1,: integer; alfa1, pmut1: real; L1, Mout1,, kr1, kw1, kv1,n1,m1,ll1,ny1: integer);Create(hh1, pp1, rr1, nfu1, lchr1, p1, c1, d1, epo1,, alfa1, pmut1, L1, Mout1, kp1, kr1, kw1,,n1,m1,ll1,ny1);;

//*********************************************************TUser.Func(var Fu: TArrReal);,FF:real;:integer;:boolean;;:=t;:=false;:=0;i:=0 to NOP.kR-1 do.Cs[i]:=q[i];;.Vs[0]:=y[n];//x[0];.Vs[1]:=y[n+1];//x[1];.Vs[2]:=y[n+2];//x[2];.Vs[3]:=y[n+3];//x[3];.RPControl;y[lv-1]>FF then:=y[lv-1];;(y[n]<=xfc[0])or(t>=tf);[0]:=FF;xfc[0]<y[n] then Fu[1]:=abs(xfc[1]-y[n+1])+abs(xfc[0]-y[n])Fu[1]:=abs(xfc[1]-y[n+1]);;TUser.Initial;[0]:=x0[0];[1]:=vc*cos(qy[0]);[2]:=x0[2]+qy[1];[3]:=vc*sin(qy[0]);:=0;;


//*********************************************************TUser.RP(t1:real;x1:TArrReal;var f1:TArrReal);:integer;,QQ,NN,ro,V,GG,RR:Double;[0]:=NOP.z[NOP.Dnum[0]];[1]:=NOP.z[NOP.Dnum[1]];;:=sqrt(sqr(x1[0])+sqr(x1[2]));:=ro_0*exp(-bet*(RR-Rz));:=sqr(x1[1])+sqr(x1[3]);:=sqrt(V2);:=Cx*ro*V2/2/m_S;

// QQ:=Cx*(1+u[0])*ro*V2/2/m_S;:=Cy*ro*V2/2/m_S;[0]:=x1[1];[1]:=-QQ*x1[1]/V-NN*x1[3]*cos(u[0])/V-g0*sqr(Rz/RR)*x1[0]/RR;[2]:=x1[3];[3]:=-QQ*x1[3]/V+NN*x1[1]*cos(u[0])/V-g0*sqr(Rz/RR)*x1[2]/RR;i:=0 to n-1 doabs(f1[i])>infinity then[i]:=Ro_10(f1[i])*infinity;;TUser.Viewer;:integer;,QQ,NN,ro,VV,GG,RR,xper,yper,zper:double;

// Upr(t,u);

// OgrUpr(u);:=sqrt(sqr(x[0])+sqr(x[2]));:=ro_0*exp(-bet*(RR-Rz));:=sqr(x[1])+sqr(x[3]);:=sqrt(sqr(x[1])+sqr(x[3]));:=Cx*ro*V2/2/m_S;

// QQ:=Cx*(1+u[0])*ro*V2/2/m_S;:=Cy*ro*V2/2/m_S;:=-QQ*x[1]/VV-NN*x[3]*cos(u[0])/VV-g0*sqr(Rz/RR)*x[0]/RR;:=-QQ*x[3]/VV+NN*x[1]*cos(u[0])/VV-g0*sqr(Rz/RR)*x[2]/RR;:=NN*sin(u[0]);i:=0 to n-1 do[i]:=x[i];[n]:=RR-Rz;

y[n+1]:=Rz*arctan(x[0]/x[2]);[n+2]:=VV;[n+3]:=sqrt(sqr(xper)+sqr(yper)+sqr(zper))/g0;

End;

//*********************************************************TermStop:boolean;:integer;:real;:=0;i:=0 to EA.n-1 do:=sum+sqr(EA.x[i]-xfc[i]);sqrt(sum)<epsterm then:=true:=false;;

//*********************************************************.Unit2;

//*********************************************************

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, UnitAdaptObjects;

= class(TForm): TStringGrid;: TStringGrid;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TButton;: TStringGrid;: TLabel;: TLabel;: TButton;Button2Click(Sender: TObject);StringGrid1Click(Sender: TObject);Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm2;,u0m,HonL:TArrArrReal;

//*********************************************************

//*********************************************************Unit1, Unit15;

{$R *.dfm}

TForm2.Button1Click(Sender: TObject);,j:integer;i:=0 to L1-1 doj:=0 to L1-1 do[i,j]:=strtoint(StringGrid1.Cells[j,i]);i:=0 to p1-1 do[i]:=strtofloat(StringGrid2.Cells[1,i]);i:=0 to p1-1 do[i]:=strtofloat(StringGrid2.Cells[1,i]);i:=0 to ny1-1 do.qy[i]:=strtofloat(StringGrid3.Cells[1,i]);:=strtofloat(Edit1.Text);:=strtofloat(Edit3.Text);:=strtofloat(Edit2.Text);.NOP.SetPsi(Psi1);.Setq(q1);.Setdt(dt1);.Settf(tf1);;;TForm2.Button2Click(Sender: TObject);,i,j:integer;:real;

// Form2:=TForm2.Create(self);

// Form2.ShowModal;.Initial;:=0;:=0;.NOP.SetCs(q1);:=0;abs(EA.t-tp)<EA.dt/2 then:=k+1;i:=0 to ll1-1 do(xm[i],k);i:=0 to m1-1 do(um[i],k);(tm,k);.Viewer;.NOP.Vs[0]:=EA.x[0];.NOP.Vs[1]:=EA.x[1];.NOP.Vs[2]:=EA.x[2];.NOP.Vs[3]:=EA.x[3];

{.NOP.Vs[0]:=xfc[0]-EA.y[4];.NOP.Vs[1]:=xfc[1]-EA.y[5];.NOP.Vs[2]:=(EA.x[0]*EA.x[1]+EA.x[2]*EA.x[3])/(EA.y[4]+Rz);.NOP.Vs[3]:=Rz*(EA.x[0]*EA.x[3]-EA.x[2]*EA.x[1])/(EA.y[4]+Rz);

}.NOP.RPControl;.u[0]:=EA.NOP.z[EA.NOP.Dnum[0]];.OgrUpr;i:=0 to ll1-1 do[i,k-1]:=EA.y[i];i:=0 to m1-1 do[i,k-1]:=EA.u[i];[k-1]:=EA.t;:=tp+dtp;;.Viewer;.NOP.Vs[0]:=EA.x[0];.NOP.Vs[1]:=EA.x[1];.NOP.Vs[2]:=EA.x[2];.NOP.Vs[3]:=EA.x[3];

{ EA.NOP.Vs[0]:=xfc[0]-EA.y[4];.NOP.Vs[1]:=xfc[1]-EA.y[5];.NOP.Vs[2]:=(EA.x[0]*EA.x[1]+EA.x[2]*EA.x[3])/(EA.y[4]+Rz);.NOP.Vs[3]:=Rz*(EA.x[0]*EA.x[3]-EA.x[2]*EA.x[1])/(EA.y[4]+Rz); }f0<EA.y[EA.lv-1] then f0:=EA.y[EA.lv-1];.Euler2;(EA.y[EA.n]<xfc[0])or(EA.t>=EA.tf);EA.y[EA.n]<xfc[0] then:=sqrt(sqr(EA.y[EA.n]-xfc[0])+sqr(EA.y[EA.n+1]-xfc[1]))f1:=infinity;:=TForm15.create(self);.ShowModal;;TForm2.FormCreate(Sender: TObject);,j:integer;:=RGB(180,240,180);.ColCount:=L1;.RowCount:=L1;i:=0 to L1-1 doj:=0 to L1-1 do.Cells[j,i]:=inttostr(Psi1[i,j]);.ColWidths[1]:=96;.RowCount:=p1;i:=0 to p1-1 do.Cells[0,i]:=inttostr(i);.Cells[1,i]:=floattostrf(q1[i],ffFixed,8,5);;.ColWidths[1]:=96;.RowCount:=ny1;i:=0 to ny1-1 do.Cells[0,i]:=inttostr(i);.Cells[1,i]:=floattostrf(qymin1[i],ffFixed,8,5);;.Text:=floattostr(dt1);.Text:=floattostr(dtp);.Text:=floattostr(tf1);;

TForm2.StringGrid1Click(Sender: TObject);.Caption:='Psi['+inttostr(StringGrid1.Row)+','+(StringGrid1.Col)+']';;

.Unit3;


, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids;

= class(TForm): TStringGrid;: TStringGrid;: TLabel;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };

: TForm3;

Unit1;

{$R *.dfm}

TForm3.Button1Click(Sender: TObject);:integer;i:=0 to EA.n-1 do[i]:=strtofloat(StringGrid1.Cells[1,i]);i:=1 to EA.m do[i-1]:=strtofloat(StringGrid2.Cells[1,i]);[i-1]:=strtofloat(StringGrid2.Cells[2,i]);;:=strtofloat(Edit1.Text);:=strtofloat(Edit2.Text);.Setx0(x01);.Setuogr(umin1,umax1);.Setdt(dt1);.Settf(tf1);;;TForm3.FormCreate(Sender: TObject);:integer;:=RGB(200,110,210);.RowCount:=EA.n;.ColWidths[1]:=96;i:=0 to EA.n-1 do.Cells[0,i]:=inttostr(i);.Cells[1,i]:=floattostrf(x01[i],ffFixed,8,4);;.RowCount:=EA.m+1;.ColWidths[1]:=96;.ColWidths[2]:=96;.Cells[1,0]:='umin';.Cells[2,0]:='umax';i:=1 to EA.m do.Cells[0,i]:=inttostr(i-1);.Cells[1,i]:=floattostrf(umin1[i-1],ffFixed,8,4);.Cells[2,i]:=floattostrf(umax1[i-1],ffFixed,8,4);;.Text:=floattostrf(dt1,ffFixed,6,4);.Text:=floattostrf(tf1,ffFixed,6,4);;

.Unit6;

, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;

= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };

: TForm6;Unit1;

{$R *.dfm}

TForm6.Button1Click(Sender: TObject);:=strtoint(Edit1.Text);:=strtoint(Edit2.Text);:=strtoint(Edit3.Text);:=strtoint(Edit4.Text);:=strtoint(Edit5.Text);:=strtoint(Edit6.Text);;;

TForm6.FormCreate(Sender: TObject);:=RGB(200,250,200);.Text:=inttostr(L1); // dimension of network operator matrix.Text:=inttostr(kp1); //cardinal of set of variables.Text:=inttostr(kr1); //cardinel of set of parameters.Text:=inttostr(kw1); //cardinal of set of unary operations.Text:=inttostr(kv1); //cardinal of set of binary operations.Text:=inttostr(Mout1);// number of outputs;

.Unit7;

//*********************************************************

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics,, Forms, Dialogs, StdCtrls, Grids;= class(TForm): TStringGrid;: TStringGrid;: TLabel;: TLabel;: TStringGrid;: TStringGrid;: TStringGrid;: TLabel;: TLabel;: TLabel;: TStringGrid;: TLabel;: TLabel;: TStringGrid;: TLabel;: TButton;: TButton;: TMemo;: TSaveDialog;: TButton;: TOpenDialog;: TButton;Button4Click(Sender: TObject);Button3Click(Sender: TObject);Button2Click(Sender: TObject);Button1Click(Sender: TObject);StringGrid6Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };:set of char=['0'..'9'];: TForm7;

//*********************************************************

//*********************************************************Unit1;

{$R *.dfm}

TForm7.Button1Click(Sender: TObject);,j:integer;i:=0 to kW1-1 dos1[i]:=strtoint(StringGrid1.Cells[i,0]);i:=0 to kV1-1 dos1[i]:=strtoint(StringGrid2.Cells[i,0]);i:=0 to kp1-1 do[i]:=strtoint(StringGrid3.Cells[i,0]);i:=0 to kr1-1 do[i]:=strtoint(StringGrid4.Cells[i,0]);i:=0 to Mout1-1 do[i]:=strtoint(StringGrid5.Cells[i,0]);i:=0 to L1-1 doj:=0 to L1-1 do[i,j]:=strtoint(StringGrid6.Cells[j,i]);i:=0 to p1-1 do[i]:=strtofloat(StringGrid7.Cells[1,i]);.NOP.SetO1s(O1s1);.NOP.SetO2s(O2s1);.NOP.SetPnum(Pnum1);.NOP.SetRnum(Rnum1);.NOP.SetDnum(Dnum1);.NOP.SetPsi(Psi1);.Setq(q1);;;

TForm7.Button2Click(Sender: TObject);,j:integer;:string;.FileName:='Psi.txt';Savedialog1.Execute then.clear;.Lines.Add('*******************');.Lines.Add(label1.Caption);:='';j:=0 to StringGrid1.ColCount-1 do:=s+StringGrid1.Cells[j,0]+' ';.Lines.Add(s);.Lines.Add('*******************');.Lines.Add(label2.Caption);:='';j:=0 to StringGrid2.ColCount-1 do:=s+StringGrid2.Cells[j,0]+' ';.Lines.Add(s);.Lines.Add('*******************');.Lines.Add(label3.Caption);:='';j:=0 to StringGrid3.ColCount-1 do:=s+StringGrid3.Cells[j,0]+' ';.Lines.Add(s);.Lines.Add('*******************');.Lines.Add(label4.Caption);:='';j:=0 to StringGrid4.ColCount-1 do:=s+StringGrid4.Cells[j,0]+' ';.Lines.Add(s);.Lines.Add('*******************');.Lines.Add(label5.Caption);:='';j:=0 to StringGrid5.ColCount-1 do:=s+StringGrid5.Cells[j,0]+' ';.Lines.Add(s);.Lines.Add('*******************');.Lines.Add(label6.Caption);i:=0 to StringGrid6.RowCount-1 do:='';j:=0 to StringGrid6.ColCount-1 do:=s+StringGrid6.Cells[j,i]+' ';.Lines.Add(s);;.Lines.Add('*******************');.Lines.Add(Label8.Caption);i:=0 to StringGrid7.RowCount-1 do.Lines.Add(StringGrid7.Cells[1,i]);.Lines.SaveToFile(Savedialog1.FileName);.Clear;i:=0 to StringGrid6.RowCount-1 do:='';j:=0 to StringGrid6.ColCount-1 do:=s+StringGrid6.Cells[j,i]+' ';.Lines.Add(s);;.Lines.SaveToFile('Psi00.txt');.Clear;i:=0 to StringGrid7.RowCount-1 do.Lines.Add(StringGrid7.Cells[1,i]);.Lines.SaveToFile('q00.txt');;;

TForm7.Button3Click(Sender: TObject);,j,k:integer;,s1:string;OpenDialog1.Execute then.Lines.LoadFromFile(OpenDialog1.FileName);i:=0 to L1-1 do:=memo1.Lines[i];:=1;j:=0 to L1-1 do:='';s[k] in Cyfr do:=s1+s[k];:=k+1;;s[k]=' ' then.Cells[j,i]:=s1;:=k+1;(k<length(s))and(s[k]=' ') do k:=k+1;;;;;

TForm7.Button4Click(Sender: TObject);,j:integer;:string;Opendialog1.Execute then.Clear;.Lines.LoadFromFile(Opendialog1.FileName);i:=0 to p1-1 do.cells[1,i]:=memo1.Lines[i];;

;

TForm7.FormCreate(Sender: TObject);,j:integer;:=RGB(240,240,100);.ColCount:=kw1;.ColCount:=kv1;.ColCount:=kp1;.ColCount:=kr1;.ColCount:=Mout1;.ColCount:=L1;.RowCount:=L1;.RowCount:=p1;i:=0 to p1-1 do.Cells[0,i]:=inttostr(i);.ColWidths[1]:=108;i:=0 to kW1-1 do.Cells[i,0]:=inttostr(O1s1[i]);i:=0 to kV1-1 do.Cells[i,0]:=inttostr(O2s1[i]);i:=0 to kP1-1 do.Cells[i,0]:=inttostr(Pnum1[i]);i:=0 to kR1-1 do.Cells[i,0]:=inttostr(Rnum1[i]);i:=0 to Mout1-1 do.Cells[i,0]:=inttostr(Dnum1[i]);i:=0 to L1-1 doj:=0 to L1-1 do.Cells[j,i]:=inttostr(Psi1[i,j]);i:=0 to p1-1 do.Cells[1,i]:=floattostrf(q1[i],ffFixed,8,5);;

TForm7.StringGrid6Click(Sender: TObject);.Caption:='Psi['+inttostr(StringGrid6.Row)+','+(StringGrid6.Col)+']';;

.Unit8;

//*********************************************************

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;

= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };

: TForm8;

//*********************************************************

//*********************************************************Unit1;

{$R *.dfm}

TForm8.Button1Click(Sender: TObject);:=strtoint(Edit1.Text);:=strtoint(Edit2.Text);:=strtoint(Edit3.Text);:=strtoint(Edit4.Text);:=strtoint(Edit5.Text);:=strtoint(Edit6.Text);:=strtoint(Edit7.Text);:=strtoint(Edit8.Text);:=strtoint(Edit9.Text);:=strtoint(Edit10.Text);:=strtofloat(Edit11.Text);:=strtofloat(Edit12.Text);;;

TForm8.FormCreate(Sender: TObject);:=RGB(250,100,250);.Text:=inttostr(hh1); //number of chromosomes in an initial population.Text:=inttostr(pp1); // number of generations.Text:=inttostr(rr1); // number of couples in one generation.Text:=inttostr(nfu1); // number of functionals.Text:=inttostr(lchr1); // number of variations in one chromosome.Text:=inttostr(p1); // number of serching parameters.Text:=inttostr(c1); // number of bits for integer part.Text:=inttostr(d1); // number of bits for fractional part.Text:=inttostr(Epo1);//number of ganerations between exchange of basic NOM.Text:=inttostr(kel1); // number of elitaring chromosomes.Text:=floattostr(alfa1); // parameter for crossover.Text:=floattostr(pmut1); // probability of mutation;

.Unit9;

//*********************************************************

//*********************************************************, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;

= class(TForm): TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TButton;Button1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };

: TForm9;

//*********************************************************

//*********************************************************Unit1;

{$R *.dfm}

TForm9.Button1Click(Sender: TObject);:=strtoint(Edit1.Text);:=strtoint(Edit2.Text);:=strtoint(Edit3.Text);:=strtoint(Edit4.Text);:=strtofloat(Edit5.Text);:=strtofloat(Edit6.Text);.PP:=pp1;.RR:=rr1;.Epo:=Epo1;

EA.kel:=kel1;.alfa:=alfa1;

EA.pmut:=pmut1;;;

TForm9.FormCreate(Sender: TObject);:=RGB(220,100,250);.Text:=inttostr(pp1);.Text:=inttostr(rr1);.Text:=inttostr(Epo1);.Text:=inttostr(kel1);.Text:=floattostr(alfa1);.Text:=floattostr(pmut1);;

.TGAModelUnit;, Messages, SysUtils,, Classes, Graphics,, Forms,, ComCtrls, StdCtrls,, Series, ExtCtrls, TeeProcs, Chart;

= class(TForm): TChart;: TLineSeries;: TListBox;: TButton;: TSaveDialog;: TComboBox;: TComboBox;: TLabel;: TLabel;: TButton;: TLabel;: TLabel;: TLabel;: TLineSeries;: TButton;Button1Click(Sender: TObject);ListBox1Click(Sender: TObject);Button4Click(Sender: TObject);FormCreate(Sender: TObject);Button6Click(Sender: TObject);

{ Private declarations }

{ Public declarations };

// TArrReal=array of real;: TForm11;

unit1;

{$R *.dfm}

TForm11.ListBox1Click(Sender: TObject);.Caption:='t='+floattostrf(tm[listbox1.itemindex],ffFixed,8,4);;

TForm11.Button1Click(Sender: TObject);=0.1;:integer;,y,alf:real;.Clear;.XValues.Order:=loNone;(Combobox1.ItemIndex=3)and(Combobox2.ItemIndex=1) then:=0;:=EA.qy[1]*cos(alf)+EA.qy[0];:=EA.qy[1]*sin(alf);:=alf+deltc;.AddXY(x,y);alf>2*pi+deltc;;(Combobox1.ItemIndex=5)and(Combobox2.ItemIndex=1) then:=EA.qy[0]-EA.qy[1];:=0;.AddXY(x,y);:=EA.qy[0]-EA.qy[1];:=EA.qy[2];.AddXY(x,y);:=EA.qy[0]+EA.qy[1];:=EA.qy[2];.AddXY(x,y);:=EA.qy[0]+EA.qy[1];:=0;.AddXY(x,y);;;

TForm11.Button4Click(Sender: TObject);savedialog1.execute then.SaveToBitmapFile(savedialog1.FileName);

;

TForm11.FormCreate(Sender: TObject);:integer;:=RGB(200,170,220);.Clear;.Clear;.Items.Add('t');.Items.Add('t');i:=0 to EA.lv-1 do.Items.Add('x['+inttostr(i)+']');.Items.Add('x['+inttostr(i)+']');;i:=0 to EA.m-1 do.Items.Add('u['+inttostr(i)+']');.Items.Add('u['+inttostr(i)+']');;.ItemIndex:=1;.ItemIndex:=0;.Caption:='F1='+floattostrf(f0,ffGeneral,8,5);.Caption:='F2='+floattostrf(f1,ffGeneral,8,5);;

TForm11.Button6Click(Sender: TObject);:integer;,funm:array of real;(argm,length(tm));(funm,length(tm));Combobox1.ItemIndex=0 theni:=0 to high(tm) do[i]:=tm[i]ComboBox1.ItemIndex<=EA.lv theni:=0 to high(tm) do[i]:=xm[ComboBox1.itemindex-1,i]i:=0 to high(tm) do[i]:=um[ComboBox1.itemindex-EA.lv-1,i];Combobox2.ItemIndex=0 theni:=0 to high(tm) do[i]:=tm[i]ComboBox2.ItemIndex<=EA.lv theni:=0 to high(tm) do[i]:=xm[ComboBox2.itemindex-1,i]i:=0 to high(tm) do[i]:=um[ComboBox2.itemindex-EA.lv-1,i];.Clear;.Clear;.XValues.Order:=loNone;i:=0 to high(tm) do.AddXY(argm[i],funm[i]);.Clear;i:=0 to high(tm) do.Items.Add(FloattoStrf(funm[i],ffGeneral,10,5));;

.Calc3;

infinity=1e8;=1e-8;=16;

function Ro_1(z:real):real;Ro_2(z:real):real;Ro_3(z:real):real;Ro_4(z:real):real;Ro_5(z:real):real;Ro_6(z:real):real;Ro_7(z:real):real;Ro_8(z:real):real;Ro_9(z:real):real;Ro_10(z:real):real;Ro_11(z:real):real;Ro_12(z:real):real;Ro_13(z:real):real;Ro_14(z:real):real;Ro_15(z:real):real;Ro_16(z:real):real;Ro_17(z:real):real;Ro_18(z:real):real;Ro_19(z:real):real;Ro_20(z:real):real;Ro_21(z:real):real;Ro_22(z:real):real;Ro_23(z:real):real;Ro_24(z:real):real;Xi_0(z1,z2:real):real;Xi_1(z1,z2:real):real;Xi_2(z1,z2:real):real;Xi_3(z1,z2:real):real;Xi_4(z1,z2:real):real;


Ro_1(z:real):real;:=z;;Ro_2(z:real):real;abs(z)>sqrt(infinity) then result:=infinityresult:=sqr(z);;Ro_3(z:real):real;:=-z;;Ro_4(z:real):real;:=Ro_10(z)*sqrt(abs(z));;Ro_5(z:real):real;abs(z)>eps then result:=1/zresult:=Ro_10(z)/eps;;Ro_6(z:real):real;z>-ln(eps) then result:=-ln(eps)result:=exp(z);;Ro_7(z:real):real;abs(z)<exp(-pokmax) then result:=ln(eps)result:=ln(abs(eps));;Ro_8(z:real):real;abs(z)>-ln(eps) then:=Ro_10(z):=(1-exp(-z))/(1+exp(-z));;Ro_9(z:real):real;z>=0 then result:=1result:=0;;Ro_10(z:real):real;z>=0 then result:=1:=-1;;Ro_11(z:real):real;:=cos(z);;Ro_12(z:real):real;:=sin(z);;Ro_13(z:real):real;:=arctan(z);;Ro_14(z:real):real;abs(z)>Ro_15(infinity) then result:=Ro_10(z)*infinityresult:=sqr(z)*z;;Ro_15(z:real):real;abs(z)<eps then result:=Ro_10(z)*eps:=Ro_10(z)*exp(ln(abs(z))/3);;Ro_16(z:real):real;abs(z)<1 then result:=zresult:=Ro_10(z);;Ro_17(z:real):real;:=Ro_10(z)*ln(abs(z)+1);;Ro_18(z:real):real;abs(z)>-ln(eps) then:=Ro_10(z)*infinity:=Ro_10(z)*(exp(abs(z))-1);;Ro_19(z:real):real;abs(z)>-ln(eps) then result:=0result:=Ro_10(z)*exp(-abs(z));;Ro_20(z:real):real;z>eps then result:=1z<0 then result:=-1result:=3*z/sqr(eps)-2*Ro_14(z)/sqr(eps)/eps;;Ro_21(z:real):real;z>eps/2 then result:=1z<-eps/2 then result:=-1result:=3*z/sqr(eps)-4*Ro_14(z)/sqr(eps)/eps;;Ro_22(z:real):real;abs(z)>-ln(eps) then result:=0result:=exp(abs(z));;Ro_23(z:real):real;abs(z)>1/eps then result:=-Ro_10(z)/epsresult:=z-z*sqr(z);;Ro_24(z:real):real;z>-ln(eps) then result:=eps/(1+eps)result:=1/(1+exp(-z));;

Xi_0(z1,z2:real):real;:=z1+z2;;

Xi_1(z1,z2:real):real;:=z1*z2;;

Xi_2(z1,z2:real):real;z1>=z2 then result:=z1result:=z2;;Xi_3(z1,z2:real):real;z1<z2 then result:=z1result:=z2;;

Xi_4(z1,z2:real):real;:=z1+z2-z1*z2;;

Xi_5(z1,z2:real):real;:=sqrt(sqr(z1)+sqr(z2));;

Xi_6(z1,z2:real):real;:=abs(z1)+abs(z2);;

Xi_7(z1,z2:real):real;:=Xi_2(abs(z1),abs(z2));;

.UnitAdaptObjects;

//*********************************************************

//*********************************************************Calc3,SysUtils;=array of integer;=array of TArrInt;Int=array [0..3]of integer;Int=array of TArr4Int;int=array of TArrArr4Int;=array of real;=array of TArrReal;=array of string;=Procedure;=class(TObject):integer; //dimention of network operator matrix:integer;//number of outputs:TArrReal;//set of variables:TArrReal;//set of parameterss:TArrInt;//set of unary operationss:TArrInt;//set of binary operations:integer;//cardinal of the set of variables:integer;//cardinal of the set of parameters:integer;//cardinal of the set of unary operations:integer;//cardinal of the set of binary operations:TArrInt;//vector of number nodes for variables:TArrInt;//vector of number nodes for parameters:TArrInt;//vector of number nodes for outputs:TArrReal;//vector of nodes:TArrString;//string for mathematical expression,Psi0:TArrArrInt;//Network operator matricesCreate(L1,Mout1,kp1,kr1,kw1,kv1:integer);//create of NOPSetVs(vs1:TArrReal);SetCs(cs1:TArrReal);SetO1s(o1s1:TArrInt);SetO2s(o2s1:TArrInt);SetPnum(pnum1:TArrInt);SetRnum(rnum1:TArrInt);SetDnum(dnum1:TArrInt);SetPsiBas(Psi1:TArrArrInt);SetPsi(Psi1:TArrArrInt);GenVar(var w:TArr4Int);Variations(w:TArr4Int);RPControl;PsitoPas;PsitoTex;PsitoPasStr;PsitoTexStr;ReadPsi(var Psi1:TArrArrInt);ReadPsi0(var Psi1:TArrArrInt);;=class(TObject):TArrArrArr4Int;//array for structural parts of chromosomes:TArrArrInt;//array for perametrical parts of chromosomes:integer;// number of cromosomes in initial population:integer;// number of couples in one generation:integer;// number of generations:integer;//number of functionals:integer;//length of structural part of chromosome:integer;//number of generations between epochs:integer;//number of elitared chromosomes:TArrArrReal;// values of functionals for each chromosome:TArrInt;// values distance to Pareto set:TArrInt;// Pareto sets,Son2s,Son3s,Son4s:TArrArr4Int;//structural part of sonsp,Son2p,Son3p,Son4p:TArrInt;//parametrical part of sons,L2,L3,L4:integer;//values distance to Pareto set for sons,Fu2,Fu3,Fu4:TArrReal;// values of functionals for sons:real;//parameter for select of parents:real;//probability of mutation:TNetOper;// Network operator:integer;//number of parameters:integer;// number of bit for integer part:integer;// number of bit for fractional part:TArrReal;//vector of parameters:TArrInt;//additional vector:TProc;Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,,kel1:integer;alfa1,pmut1:real;,Mout1,kp1,kr1,kw1,kv1:integer);GenAlgorithm;// genetic algorithm for structural-parametrical optimizationGenAlgorithm1;// genetic algorithm for parametrical optimizationRast(Fu:TArrReal):integer;//distance to Pareto setGreytoVector(y:TArrInt);VectortoGrey(var y: TArrInt);ChoosePareto;ImproveChrom(q:TArrReal;var StrChrom: TArrArr4Int);Setq(q1:TArrReal);ReadFunc(k:integer;var Fu1:TArrReal);Readq(var q1:TArrReal);ReadChromosome(k:integer;var q1:TArrReal;var Psi1:TArrArrInt);Func0(var Fu:TArrReal); virtual;//Values of functionals;=class(TGANOP):TArrReal;// vector of condition:TArrReal;//vextor of undefined parameters:TArrReal;// vector of initial condition:TArrReal;//:TArrReal;:TArrReal;:TArrReal;:TArrReal;:TArrReal;// vector of control:TArrReal;// vector of control:TArrReal;// vector of control:TArrReal;// vector of vewing:integer;:integer;//dimention of undefined parameters,qymin:TArrReal;,ixmax:TArrInt;:TArrReal;//vector of steps of undefine parameters:integer;:integer;:real;:real;:real;Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,,kel1:integer;alfa1,pmut1:real;,Mout1,kp1,kr1,kw1,kv1,n1,m1,ll1,ny1:integer);Euler2;Func(var Fu:TArrReal); virtual;Func0(var Fu:TArrReal); override;Initial;virtual;Viewer;virtual;Integr;LexPM(var ix:tArrInt;var flag:boolean);OgrUpr;RP(t1:real;x1:TArrReal;var f1:TArrReal);virtual;//Правые частиSetdt(dt1:real);Setixmax(ix1:TArrInt);Setqymax(qymax1:TArrReal);Setqymin(qymin1:TArrReal);Setstepsqy(stepsqy1:TArrReal);Settf(tf1:real);Setuogr(umin1,umax1:TArrReal);Setx0(x01:TArrReal);Upr;;


//*********************************************************

//*********************************************************

{ TNetOper }TNetOper.Create(L1, Mout1, kp1, kr1, kw1, kv1: integer);:=L1;:=kp1;

kR:=kr1;:=kw1;:=kv1;

Mout:=Mout1;(Psi,L,L);(Psi0,L,L);(z,L);(zs,L);(Vs,kP);(Cs,kR);(O1s,kW);(O2s,kV);(Pnum,kP);(Rnum,kR);(Dnum,Mout);;

TNetOper.SetCs(cs1: TArrReal);:integer;i:=0 to kR-1 do[i]:=cs1[i];;

TNetOper.SetDnum(dnum1: TArrInt);:integer;i:=0 to Mout-1 do[i]:=dnum1[i];;

TNetOper.SetO1s(o1s1: TArrInt);:integer;i:=0 to kW-1 dos[i]:=o1s1[i];;

TNetOper.SetO2s(o2s1: TArrInt);:integer;i:=0 to kV-1 dos[i]:=o2s1[i];;

TNetOper.SetPnum(pnum1: TArrInt);:integer;i:=0 to kP-1 do[i]:=pnum1[i];;

TNetOper.SetPsi(Psi1:TArrArrInt);,j:integer;i:=0 to L-1 doj:= 0 to L-1 do[i,j]:=Psi1[i,j];;TNetOper.SetPsiBas(Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:= 0 to L-1 do[i,j]:=Psi1[i,j];;

TNetOper.SetRnum(rnum1: TArrInt);:integer;i:=0 to kR-1 do[i]:=rnum1[i];;

TNetOper.SetVs(Vs1: TArrReal);:integer;i:=0 to high(Vs1) do[i]:=vs1[i];;TNetOper.ReadPsi(var Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:=0 to L-1 do[i,j]:=Psi[i,j];;

TNetOper.ReadPsi0(var Psi1: TArrArrInt);,j:integer;i:=0 to L-1 doj:=0 to L-1 do[i,j]:=Psi0[i,j];;

TNetOper.RPControl;,j:integer;:real;i:=0 to L-1 dopsi[i,i] of

,4: z[i]:=0;

: z[i]:=1;

: z[i]:=-infinity;

: z[i]:=infinity;;i:=0 to kP-1 do[Pnum[i]]:=Vs[i];i:=0 to kR-1 do[Rnum[i]]:=Cs[i];i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j] of

: zz:=Ro_1(z[i]);

: zz:=Ro_2(z[i]);

: zz:=Ro_3(z[i]);

: zz:=Ro_4(z[i]);

: zz:=Ro_5(z[i]);

: zz:=Ro_6(z[i]);

: zz:=Ro_7(z[i]);

: zz:=Ro_8(z[i]);

: zz:=Ro_9(z[i]);

: zz:=Ro_10(z[i]);

: zz:=Ro_11(z[i]);

: zz:=Ro_12(z[i]);

: zz:=Ro_13(z[i]);

: zz:=Ro_14(z[i]);

: zz:=Ro_15(z[i]);

: zz:=Ro_16(z[i]);

: zz:=Ro_17(z[i]);

: zz:=Ro_18(z[i]);

: zz:=Ro_19(z[i]);

: zz:=Ro_20(z[i]);

: zz:=Ro_21(z[i]);

: zz:=Ro_22(z[i]);

: zz:=Ro_23(z[i]);

: zz:=Ro_24(z[i]);;Psi[j,j] of

: z[j]:=Xi_0(z[j],zz);

: z[j]:=Xi_1(z[j],zz);

: z[j]:=Xi_2(z[j],zz);

: z[j]:=Xi_3(z[j],zz);

: z[j]:=Xi_4(z[j],zz);;;;TNetOper.Variations(w:TArr4Int);

// Элементарные операции

// 0 - замена недиагонального элемента

// 1 - замена диагонального элемента

// 2 - добавление дуги

// 3 - удаление дуги

var

i,j,s1,s2:integer;

Begin(w[0]<>0)or(w[1]<>0)or(w[2]<>0) thenw[0] of

: if Psi[w[1],w[2]]<>0 then Psi[w[1],w[2]]:=w[3];

: Psi[w[1],w[1]]:=w[3];

: if Psi[w[1],w[2]]=0 then Psi[w[1],w[2]]:=w[3];

::=0;i:=0 to w[2]-1 doPsi[i,w[2]]<>0 then s1:=s1+1;:=0;j:=w[1]+1 to L-1 do(Psi[w[1],j]<>0)then s2:=s2+1;s1>1 thens2>1 then[w[1],w[2]]:=0;;;;TNetOper.GenVar(var w:TArr4Int);

// Генерация элементарной операцииTestSource(j:integer):boolean;

// если j-номер узла источника, то возвращает false

var:integer;:boolean;:=true;:=0;(i<=high(Pnum)) and (j<>Pnum[i]) do i:=i+1;i<=high(Pnum) then flag:=false:=0;(i<=high(Rnum)) and (j<>Rnum[i]) do i:=i+1;i<=high(Rnum) then flag:=false;;:=flag;;[0]:=random(4); w[0] of

,2,3: // замена недиагонального элемента, добавление и удаление дуги

begin[1]:=random(L-1);[2]:=random(L-w[1]-1)+w[1]+1;

// while not TestSource(w[2]) do w[2]:=w[2]+1;[3]:=O1s[random(kW)];;

1: // замена диагонального элемента

begin

w[1]:=random(L);

// while not TestSource(w[1]) do w[1]:=w[1]+1;[2]:=w[1];[3]:=O2s[random(kV)];;;;TNetOper.PsitoPas;

// It tranforms from Psi to Pascal,j:integer;:string;i:=0 to L-1 doPsi[i,i] of

,4: zs[i]:='0';

: zs[i]:='1';

: zs[i]:='-inf';

: zs[i]:='inf';;i:=0 to kP-1 do[Pnum[i]]:='x['+inttostr(i)+']';i:=0 to kR-1 do[Rnum[i]]:='q['+inttostr(i)+']';i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j]=1 then:=zs[i]:='Ro_'+inttostr(Psi[i,j])+'('+zs[i]+')';((Psi[j,j]=0)and(zs[j]='0'))or

((Psi[j,j]=1)and(zs[j]='1'))or

((Psi[j,j]=2)and(zs[j]='-inf'))or

((Psi[j,j]=3)and(zs[j]='inf'))or

((Psi[j,j]=4)and(zs[j]='0')) then[j]:=zz[j]:='Xi_'+inttostr(Psi[j,j])+'('+zs[j]+','+zz+')';;;;TNetOper.PsitoPasStr;,j:integer;j:=L-1 downto 0 do[j]:='z'+inttostr(j)+'=';Psi[j,j] of

: zs[j]:=zs[j]+'Sum(';

1: zs[j]:=zs[j]+'Prod(';

: zs[j]:=zs[j]+'Min(';

: zs[j]:=zs[j]+'Max(';

: zs[j]:=zs[j]+'Pol(';

end;i:=j-1 downto 0 doPsi[i,j]<>0 thenPsi[i,j]<>1 then[j]:=zs[j]+'Ro_'+inttostr(Psi[i,j])+'(z_'+inttostr(i)+'),'[j]:=zs[j]+'z_'+inttostr(i)+',';zs[j,length(zs[j])]=',' then[j,length(zs[j])]:=')'[j]:=zs[j]+')';;i:=0 to kP-1 do[Pnum[i]]:='z_'+inttostr(Pnum[i])+'=x_'+inttostr(i);i:=0 to kR-1 do[Rnum[i]]:='z_'+inttostr(Rnum[i])+'=q_'+inttostr(i);;

TNetOper.PsitoTex;

// It tranforms from Psi to LaTeX,j:integer;:string;i:=0 to L-1 doPsi[i,i] of

,4: zs[i]:='0';

: zs[i]:='1';

: zs[i]:='-\infinity';

: zs[i]:='\infinity';;i:=0 to kP-1 do[Pnum[i]]:='x_{'+inttostr(i)+'}';i:=0 to kR-1 do[Rnum[i]]:='q_{'+inttostr(i)+'}';i:=0 to L-2 doj:=i+1 to L-1 doPsi[i,j]<>0 thenPsi[i,j]=1 then:=zs[i]:='\rho_{'+inttostr(Psi[i,j])+'}('+zs[i]+')';((Psi[j,j]=0)and(zs[j]='0'))or

((Psi[j,j]=1)and(zs[j]='1'))or

((Psi[j,j]=2)and(zs[j]='-\infinity'))or

((Psi[j,j]=3)and(zs[j]='\infinity'))or

((Psi[j,j]=4)and(zs[j]='0')) then[j]:=zz[j]:='\chi_{'+inttostr(Psi[j,j])+'}('+zs[j]+','+zz+')';;;;

TNetOper.PsitoTexStr;,j:integer;j:=L-1 downto 0 do[j]:='$z_{'+inttostr(j)+'}=';Psi[j,j] of

: zs[j]:=zs[j]+'\text{Min}(';

: zs[j]:=zs[j]+'\text{Max}(';

: zs[j]:=zs[j]+'\text{Pol}(';;i:=j-1 downto 0 doPsi[i,j]<>0 thenPsi[i,j]<>1 then[j]:=zs[j]+'\rho_{'+inttostr(Psi[i,j])+'}(z_{'+inttostr(i)+'})'[j]:=zs[j]+'z_{'+inttostr(i)+'}';Psi[j,j] of

:zs[j]:=zs[j]+'+';

:zs[j]:=zs[j]+'*';;;(zs[j,length(zs[j])]='+')or(zs[j,length(zs[j])]='*') then[j,length(zs[j])]:=')'[j]:=zs[j]+')';[j]:=zs[j]+'$\\';;i:=0 to kP-1 do[Pnum[i]]:='z_{'+inttostr(Pnum[i])+'}=x_{'+inttostr(i)+'}';i:=0 to kR-1 do[Rnum[i]]:='z_{'+inttostr(Rnum[i])+'}=q_{'+inttostr(i)+'}';;

TGANOP.ChoosePareto;,j:integer;:=0;i:=0 to HH-1 doLh[i]=0 then:=j+1;(Pareto,j);[j-1]:=i;;;

TGANOP.Create(hh1, pp1, rr1, nfu1, lchr1, p1, c1, d1, epo1,: integer; alfa1, pmut1: real; L1, Mout1,

kp1, kr1, kw1,kv1: integer);

BeginCreate;:=hh1;:=pp1;:=rr1;:=nfu1;

lchr:=lchr1;:=p1;:=c1;:=d1;:=epo1;:=kel1;

alfa:=alfa1;:=pmut1;:=TNetOper.Create(L1, Mout1, kp1, kr1, kw1, kv1);(PopChrStr,HH,lchr);(PopChrPar,HH,p*(c+d));(Fuh,HH,nfu);(Lh,HH);(Fu1,nfu);(Fu2,nfu);(Fu3,nfu);(Fu4,nfu);(Son1s,lchr);(Son2s,lchr);(Son3s,lchr);(Son4s,lchr);(Son1p,p*(c+d));(Son2p,p*(c+d));(Son3p,p*(c+d));(Son4p,p*(c+d));(q,p);(zb,p*(c+d));;

TGANOP.Func0(var Fu:TArrReal);:integer;.RPControl;i:=0 to nfu-1 do[i]:=NOP.z[NOP.Dnum[i]];;

TGANOP.GenAlgorithm;

// Генетический алгоритм,j,k,pt,rt,k1,k2,lmax,imax,ks1,ks2:integer;,su,su1,Fumax,Fumin:real;:TArrArrreal;(FuhNorm,HH,nfu);

//generating population.SetPsiBas(NOP.Psi);(PopChrPar[0]);i:=0 to lchr-1 doj:=0 to 3 do[0,i,j]:=0;i:=1 to HH-1 doj:=0 to lchr-1 do.GenVar(PopChrStr[i,j]);j:=0 to p*(c+d)-1 do[i,j]:=random(2);;

// calculating values of functionalsi:=0 to HH-1 do.SEtPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(PopChrStr[i,j]);(PopChrPar[i]);(Fuh[i]);;

//caculating distances to Pareto seti:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//Start of cycle for generations:=1; // first current generation

//start of cycle for crossovering:=1;//first couple for crossoving

//select of two parents:=random(HH);:=random(HH);:=random;(ksi<(1+alfa*Lh[k1])/(1+Lh[k1])) or

(ksi<(1+alfa*Lh[k2])/(1+Lh[k2])) then

//if true:=random(lchr);:=random(p*(c+d));

//crossoving? creating four sonsi:=0 to lchr-1 dos[i]:=PopChrStr[k1,i];s[i]:=PopChrStr[k2,i];;i:=0 to ks2-1 dop[i]:=PopChrPar[k1,i];p[i]:=PopChrPar[k2,i];p[i]:=PopChrPar[k1,i];p[i]:=PopChrPar[k2,i];;i:=ks2 to p*(c+d)-1 dop[i]:=PopChrPar[k2,i];p[i]:=PopChrPar[k1,i];p[i]:=PopChrPar[k2,i];p[i]:=PopChrPar[k1,i];;i:=0 to ks1-1 dos[i]:=PopChrStr[k1,i];s[i]:=PopChrStr[k2,i];;i:=ks1 to lchr-1 dos[i]:=PopChrStr[k2,i];s[i]:=PopChrStr[k1,i];;

//mutation for 1st sonrandom<pmut thenp[random(p*(c+d))]:=random(2);.GenVar(son1s[random(lchr)]);;

//functional for 1st son.SetPsi(NOP.Psi0);;j:=0 to lchr-1 do.Variations(son1s[j]);(son1p);(Fu1);

//Distance for 1st son:=Rast(Fu1);

//Chromosome with biggest distance to Pareto set:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;L1<Lmax then

//if distance to Pareto set 1st son is less than biggest distance

//...in population then make substitutioni:=0 to lchr-1 do[imax,i]:=son1s[i];i:=0 to p*(c+d)-1 do[imax,i]:=son1p[i];i:=0 to nfu-1 do[imax,i]:=Fu1[i];;

//calculating all distances for populationi:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//mutation for 2nd sonrandom<pmut thenp[random(p*(c+d))]:=random(2);.GenVar(son2s[random(lchr)]);;

//functional for 2nd son.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(son2s[j]);(son2p);(Fu2);

//Distance for 2nd son:=Rast(Fu2);

//Chromosome with biggest distance to Pareto set:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;L1<Lmax then

//if distance to Pareto set 2nd son is less than biggest distance

//...in population then make substitutioni:=0 to lchr-1 do[imax,i]:=son2s[i];i:=0 to p*(c+d)-1 do[imax,i]:=son2p[i];i:=0 to nfu-1 do[imax,i]:=Fu2[i];;

//calculating all distances for populationi:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//mutation for 3rd sonrandom<pmut thenp[random(p*(c+d))]:=random(2);.GenVar(son3s[random(lchr)]);;

//functional for 3rd son.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(son1s[j]);(son1p);(Fu3);

//Distance for 3rd son:=Rast(Fu3);

//Chromosome with biggest distance to Pareto set:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;L3<Lmax then

//if distance to Pareto set 3rd son is less than biggest distance

//...in population then make substitutioni:=0 to lchr-1 do[imax,i]:=son3s[i];i:=0 to p*(c+d)-1 do[imax,i]:=son3p[i];i:=0 to nfu-1 do[imax,i]:=Fu3[i];;

//calculating all distances for populationi:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//mutation for 4th sonrandom<pmut thenp[random(p*(c+d))]:=random(2);.GenVar(son4s[random(lchr)]);;

//functional for 4th son.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(son4s[j]);(son4p);(Fu4);

//Distance for 4th son:=Rast(Fu4);

//Chromosome with biggest distance to Pareto set:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;L4<Lmax then

//if distance to Pareto set 4th son is less than biggest distance

//...in population then make substitutioni:=0 to lchr-1 do[imax,i]:=son4s[i];i:=0 to p*(c+d)-1 do[imax,i]:=son4p[i];i:=0 to nfu-1 do[imax,i]:=Fu4[i];;

//calculating all distances for populationi:=0 to HH-1 do[i]:=Rast(Fuh[i]);;:=rt+1;

//End of cycle for crossovingrt>RR;

// generating new chromosomes

// Checking Epoch:=pt+1;

//if epoch is over then changing basicpt mod Epo=0 then

//... на наиболее близкую хромосому к утопической

// хромосоме в пространстве нормированных криетриев

for i:=0 to nfu-1 do

begin:=Fuh[0,i];:=Fuh[0,i];

// ищем максимальное и минимальное значения по каждому функционалу

for k:=0 to HH-1 doFuh[k,i]>Fumax then:=Fuh[k,i]Fuh[k,i]< Fumin then:=Fuh[k,i];

// нормируем критерии, поделив каждое значение на разность между

// максимумом и минимумом

if Fumax<>Fumin then

for k:=0 to HH-1 do[k,i]:=Fuh[k,i]/(Fumax-Fumin);;

// находим хромосому с наименьшей величиной нормы нормированных критериев

k:=0;:=0;

// for i:=0 to nfu-1 do

// su:=su+sqr(FuhNorm[0,i]);

//

// su:=sqrt(su);:=FuhNorm[0,1];i:=1 to HH-1 do

// su1:=0;

// for j:=0 to nfu-1 do

// su1:=su1+sqr(FuhNorm[i,j]);

// su1:=sqrt(su1);:=FuhNorm[i,1];su1<su then:=su1;:=i;;;

// заменяем базис

// строим матрицу для найденной хромосомы

NOP.SetPsi(NOP.Psi0);

for j:=0 to lchr-1 do.Variations(PopChrStr[k,j]);

// меняем базисную матрицу на новую

NOP.SetPsiBas(NOP.Psi);

//генерируем тождественную хромосому

for i:=0 to lchr-1 do

for j:=0 to 3 do[0,i,j]:=0;i:=0 to p*(c+d)-1 do[0,i]:=PopChrPar[k,i];

//вычисляем все фунционалы для всей популяции

for i:=0 to HH-1 do.SetPsi(NOP.Psi0);j:=0 to lchr-1 do.Variations(PopChrStr[i,j]);(PopChrPar[i]);(Fuh[i]);;

// формируем элитуi:=0 to kel-1 do:=random(HH-1)+1;(PopChrPar[j]);(q,PopChrStr[j]);;

//вычисляем новые расстоянияi:=0 to HH-1 do[i]:=Rast(Fuh[i]);;

//конец цикла поколений

EndGeneration;

// form1.ProgressBar1.StepIt;

// Form1.Refresh;pt>PP;;

//строим множество Парето;

Procedure TGANOP.GenAlgorithm1;

// Генетический алгоритм для поиска оптимальных значений параметров

var,j,pt,rt,k1,k2,lmax,imax,ks2:integer;:real;:TArrArrreal;(FuhNorm,HH,nfu);

//генерация популяции

NOP.SetPsiBas(NOP.Psi);

VectortoGrey(PopChrPar[0]);i:=1 to HH-1 doj:=0 to p*(c+d)-1 do[i,j]:=random(2);;

//вычисление значений функционалов для каждой хромосомы

for i:=0 to HH-1 do(PopChrPar[i]);(Fuh[i]);;

//вычисление расстояний до множества Парето

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//начало цикла поколений

pt:=1; // первое текущее поколение

repeat

//начало цикла скрещивания

rt:=1;//первая пара скрещивания

repeat

//отбор двух родителей

k1:=random(HH);

k2:=random(HH);:=random;(ksi<(1+alfa*Lh[k1])/(1+Lh[k1])) or

(ksi<(1+alfa*Lh[k2])/(1+Lh[k2])) then

//если условие скрещивания выполнено

ks2:=random(p*(c+d));

//скрещивание, получение 2-х потомков

for i:=0 to ks2-1 do

beginp[i]:=PopChrPar[k1,i];p[i]:=PopChrPar[k2,i];;i:=ks2 to p*(c+d)-1 dop[i]:=PopChrPar[k2,i];p[i]:=PopChrPar[k1,i];;

//мутация для 1го потомкаrandom<pmut thenp[random(p*(c+d))]:=random(2);

//вычисление функционалов для 1го потомка

GreytoVector(son1p);

Func0(Fu1);

//вычисление расстояния для 1го потомка

L1:=Rast(Fu1);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;

if L1<Lmax then

//если расстояние у 1го потомка меньше, чем наибольшее, то

//...осуществляем заменуi:=0 to p*(c+d)-1 do[imax,i]:=son1p[i];i:=0 to nfu-1 do[imax,i]:=Fu1[i];;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);

//мутация для 2го потомка

if random<pmut then

son2p[random(p*(c+d))]:=random(2);

//вычисление функционалов для 2го потомка

GreytoVector(son2p);

Func0(Fu2);

//вычисление расстояния для 2го потомка

L2:=Rast(Fu2);

//нахождение хромосомы с наибольшим расстоянием

Lmax:=Lh[0];:=0;i:=1 to HH-1 doLh[i]>Lmax then:=Lh[i];:=i;;

if L1<Lmax then

//если расстояние у 2го потомка меньше, чем наибольшее, то

//...осуществляем заменуi:=0 to p*(c+d)-1 do[imax,i]:=son2p[i];i:=0 to nfu-1 do[imax,i]:=Fu2[i];;

//вычисляем все расстояния для популяции

for i:=0 to HH-1 do[i]:=Rast(Fuh[i]);;

rt:=rt+1;

//конец цикла скрещивания

until rt>RR;

// генерируем новые хромосомы

//проверка конца эпохи

pt:=pt+1;

//конец цикла поколений;pt>PP;;

//строим множество Парето;TGANOP.GreytoVector(y: TArrInt);,j,l1,l:integer;,g1:real;:=c+d;:=high(y)+1;i:=0 to l1-1 doi mod l=0 then[i]:=y[i][i]:=zb[i-1] xor y[i];:=-1;:=1;:=1;i:=0 to c-2 do:=g1*2;i:=0 to l1-1 doi mod l=0 then:=j+1;[j]:=0;:=g1;;[j]:=q[j]+g*zb[i];:=g/2;;;

TGANOP.ImproveChrom(q:TArrReal;var StrChrom: TArrArr4Int);,j,k:integer;:boolean;.SetPsi(NOP.Psi0);(Fu1);:=-1;i:=0 to lchr-1 do.Variations(StrChrom[i]);(Fu2);:=true;j:=0 to nfu-1 do

if Fu2[j]>Fu1[j] then flag:=false;

if flag thenj:=0 to nfu-1 do

Fu1[j]:=Fu2[j];:=i;;

end;i:=k+1 to lchr-1 doj:=0 to 3 do[i,j]:=0;;

TGANOP.Rast(Fu: TArrReal): integer;i,j,k,count:integer;:=0;i:=0 to HH-1 do:=0;(j<nfu) and (Fu[j]>=Fuh[i,j]) do j:=j+1;j>=nfu then:=0;(k<nfu) and (Fu[k]=Fuh[i,k]) do k:=k+1;k<nfu then count:=count+1;;;:=count;;

TGANOP.ReadChromosome(k: integer; var q1: TArrReal;Psi1: TArrArrInt);:integer;.SetPsi(NOP.Psi0);i:=0 to lchr-1 do.Variations(PopChrStr[k,i]);(PopChrPar[k]);(q1);.ReadPsi(Psi1);;

TGANOP.ReadFunc(k: integer; var Fu1: TArrReal);:integer;i:=0 to nfu-1 do[i]:=Fuh[k,i];;

TGANOP.Readq(var q1: TArrReal);:integer;i:=0 to p-1 do[i]:=q[i];;

TGANOP.Setq(q1: TArrReal);:integer;i:=0 to high(q1) do[i]:=q1[i];;

TGANOP.VectortoGrey(var y: TArrInt);,i,j,k:integer;:real;i:=0 to p*(c+d)-1 do[i]:=0;j:=0 to p-1 do:=trunc(q[j]);:=q[j]-x;:=c+j*(c+d)-1;k>=j*(c+d) do[k]:=x mod 2;:=x div 2;:=k-1;;:=c+j*(c+d);k<(c+d)*(j+1) do:=2*r;:=trunc(r);[k]:=x;:=r-x;:=k+1;;[j*(c+d)]:=zb[j*(c+d)];i:=j*(c+d)+1 to (j+1)*(c+d)-1 do[i]:=zb[i] xor zb[i-1];;;

{ TModel }

TModel.Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,,kel1:integer;alfa1,pmut1:real;,Mout1,kp1,kr1,kw1,kv1,n1,m1,ll1,ny1:integer);Create(hh1,pp1,rr1,nfu1,lchr1,p1,c1,d1,,kel1,alfa1,pmut1,,Mout1,kp1,kr1,kw1,kv1);:=n1;:=m1;:=ll1;:=ny1;(x,n);(x0,n);(xs,n);(fa,n);(fb,n);(u,m);(umax,m);(umin,m);(qymin,ny);(qymax,ny);(qy,ny);(ixmax,ny);(ix,ny);(stepsqy,ny);(y,lv);(su,nfu);(su1,nfu);;

TModel.Euler2;:integer;(t,x,fa);i:=0 to n-1 do[i]:=x[i]+dt*fa[i];(t+dt,xs,fb);i:=0 to n-1 do[i]:=x[i]+dt*(fa[i]+fb[i])/2;:=t+dt;;

TModel.Func(var Fu: TArrReal);:integer;i:=0 to nfu-1 do[i]:=0;;

TModel.Func0(var Fu: TArrReal);:integer;;i:=0 to nfu-1 do[i]:=su[i];;

TModel.Initial;:integer;i:=0 to n-1 do[i]:=x0[i];:=0;;

TModel.Integr;,j:integer;:boolean;i:=0 to ny-1 do[i]:=0;i:=0 to nfu-1 do[i]:=0;i:=0 to ny-1 do[i]:=qymin[i]+stepsqy[i]*ix[i];(su1);i:=0 to nfu-1 do[i]:=su[i]+su1[i];(ix,flag);not flag;;

TModel.LexPM(var ix: tArrInt; var flag: boolean);,j:integer;:=ny-1;(i>=0)and(ix[i]=ixmax[i]) do i:=i-1;i>=0 then[i]:=ix[i]+1;j:=i+1 to ny-1 do[j]:=0;:=true;:=false;;

TModel.OgrUpr;:integer;i:=0 to m-1 dou[i]>umax[i] then[i]:=umax[i]u[i]<umin[i] then[i]:=umin[i];;

TModel.RP(t1:real;x1:TArrReal;var f1:TArrReal);=0.5;=0.09;=1;:integer;;[0]:=x[1];[1]:=-2*ksi*x[1]/TT+(ko*u[0]-x[0])/sqr(TT);i:=0 to n-1 doabs(f1[i])>infinity then[i]:=Ro_10(f1[i])*infinity;;

TModel.Setdt(dt1: real);:=dt1;;

TModel.Setixmax(ix1: TArrInt);:integer;i:=0 to ny-1 do[i]:=ix1[i];;

TModel.Setqymax(qymax1: TArrReal);:integer;i:=0 to ny-1 do[i]:=qymax1[i];;TModel.Setqymin(qymin1: TArrReal);:integer;i:=0 to ny-1 do[i]:=qymin1[i];;

TModel.Setstepsqy(stepsqy1: TArrReal);:integer;i:=0 to ny-1 do[i]:=stepsqy1[i];;

TModel.Settf(tf1: real);:=tf1;;

TModel.Setuogr(umin1, umax1: TArrReal);:integer;i:=0 to m-1 do[i]:=umin1[i];[i]:=umax1[i];;;TModel.Setx0(x01: TArrReal);:integer;i:=0 to n-1 do[i]:=x01[i];;

TModel.Upr;[0]:=1;;

TModel.Viewer;:integer;i:=0 to n-1 do[i]:=x[i];; END.

Приложение Б

_0=x_0_1=q_0

z_2=x_1_3=q_1_4=x_2_5=q_2_6=x_3

z_7=q_3=Prod(z_1,z_0)

=Prod(z_3,z_2)

=Prod(z_5,z_4)

=Prod(z_7,z_6)

=Sum(z_9,z_8)

=Sum(z_11,z_10)

z14=Sum(z_12)=Sum(z_13)=Sum(z_12)=Sum(z_13)=Sum(Ro_18(z_13),z_12)=Sum(z_17,Ro_9(z_14),Ro_23(z_6))

=Sum(z_18)=Sum(z_19)=Sum(z_20,Ro_6(z_10))=Sum(z_22,Ro_17(z_21))


Введение Синтез системы управления на сегодняшний день является приоритетной задачей современной теории управления, поскольку максимально учитывает работ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ