38436

Разработка и исследование метода аналитического программирования для структурно-параметрического синтеза системы управления динамическим объектом

Дипломная

Информатика, кибернетика и программирование

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

Русский

2014-05-15

14.23 MB

3 чел.

Тема дипломной работы: «Разработка и исследование метода аналитического программирования

для структурно-параметрического синтеза системы управления динамическим объектом».

График выполнения дипломной работы:

п/п

Выполнение работы и мероприятий

Сроки выполнения

Подбор литературы, ее изучение и проработка. Составление библиографии по основным источникам.

до 28.10.2012

Составление плана дипломной работы и согласование его с руководителем.

до 05.11.2012

Разработка и представление на проверку первой главы.

до 28.12.2012

Накопление, систематизация и анализ практических материалов.

до 30.01.2013

Сбор данных.

до 20.02.2013

Проведение эксперимента.

до 30.03.2013

Анализ полученных данных.

до 15.04.2013

Согласование с руководителем выводов и предложений.

до 21.04.2013

Переработка (доработка) дипломной работы в соответствии с замечаниями и защита ее на кафедре.

до 28.04.2013

Разработка тезисов доклада для защиты.

до 05.05.2013

Ознакомление с отзывом и рецензией.

до 05.05.2013

Завершение подготовки к защите с учетом отзыва и рецензии и сдача работы на кафедру

до 10.05.2013

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

до 10.05.2013

Сдача  работы с рецензией  и отзывом  на бумажном и электронном (СD) носителе на кафедру

до 20.05.2013


Оглавление

[1] Оглавление

[2] Введение

[3] Основные сокращения и обозначения

[4]
Постановка задачи синтеза системы управления

[5] Методы решения задачи синтеза системы управления динамическим объектом

[5.1] Синтез управления системы динамическим объектом

[5.2] Структурно-параметрический синтез

[5.3] Классические методы решения задачи синтеза управления

[5.4] Эволюционные алгоритмы

[5.5] Общая схема эволюционных алгоритмов

[6]
Эволюционные методы символьной регрессии

[6.1] Символьная регрессия

[6.2] Методы символьной регрессии

[6.3] Принцип действия метода аналитического программирования

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

[7.1] Методы, использованные в программе

[7.2] Генетический алгоритм с эволюционной стратегией типа (μ, λ)

[7.3] Функция метода аналитического программирования

[7.4] Метод решения обыкновенных дифференциальных уравнений

[7.5] Осциллятор Дуффинга

[7.6] Результаты эксперимента

[8] Заключение

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

[10] Приложение

[10.1] Листинг программы


Введение

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

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

Кроме того задача синтеза управления относится к «Технологии информационных, управляющих, навигационных систем», которая входит в «Перечень критических технологий Российской Федерации», утвержденный Указом Президента Российской Федерации от 7 июля 2011г. №899, что говорит об актуальности выбранной темы.

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

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

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

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

В настоящей работе для решения задачи синтеза предложен метод аналитического программирования.

Целью является исследование и разработка численного метода для структурно-параметрического синтеза управления системы динамическим объектом

Для решения поставленной задачи необходимо:

  1.  Изучить имеющуюся научную литературу по данной проблемной области.
  2.  Проанализировать основные принципы работы метода аналитического программирования и разработать алгоритм решения задачи синтеза.
  3.  Реализовать разработанный алгоритм с помощью одного из языков программирования.
  4.  Выбрать динамический объект управления.
  5.  Промоделировать работу алгоритма на выбранном объекте.
  6.  Представить полученные результаты на графиках и в таблицах.
  7.  Дать оценку полученным результатам и сделать вывод о корректности применения метода к задаче управления.


Основные сокращения и обозначения

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

АП — аналитическое программирование

БНФ — форма Бэкуса-Наура

ГА — генетический алгоритм

ГП — генетическое программирование

ГЭ — грамматическая эволюция

ОФМ — обобщенное функциональное множество

СО — сетевой оператор

ЭА — эволюционные алгоритмы


Постановка задачи синтеза системы управления

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

(1)

где в общем случае  — нелинейная функция векторных аргументов , где множество   замкнуто и ограничено, .

Начальное условие задано как

(2)

Целевое значение

(3)

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

(4)

(5)

где

(6)

и  — заданная верхняя граница приемлемого времени управления.

Требуется найти функцию управления

(7)

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

(8)

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

(9)

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

  1.  Методы решения задачи синтеза системы управления динамическим объектом
    1.  Синтез управления системы динамическим объектом

Тема синтеза управления на сегодняшний день занимает центральное место в теории автоматического управления. В середине 50-х ХХ века теория оптимального управления выделилась в отдельную науку. В её основу вошли вариационные исчисления, принцип максимума Л. С. Понтрягина, метод динамического программирования Р. Беллмана, метод аналитического конструирования оптимальных регуляторов (АКОР) А. М. Летова и Р. Калмана, численные методы оптимизации.

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

Объект управления задается математической моделью в виде обыкновенных дифференциальных уравнений в форме Коши.

(10)

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

(11)

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

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

(12)

(13)

Таким образом, можно выделить пять основных этапов решения:

  1.  Написать математическую модель объекта управления.
  2.  Определить в модели управление и ограничения.
  3.  Составить критерии качества.
  4.  Сформулировать задачу оптимального управления.
  5.  Разработать алгоритм решения.
    1.  Структурно-параметрический синтез

Структурно-параметрический синтез — это процесс, результатом которого является структура управляющего объекта и значения её параметров, при которых выполняются требования технического задания (критерии качества).

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

Сравнительная характеристика параметрического и структурно-параметрического синтеза приведена в таблице 1.

Таблица . Сравнительная характеристика

Название характеристики

Параметрический синтез

Структурно-параметрический синтез

  1.  Структура модели

Фиксирована на протяжении всего процесса синтеза

Заранее неизвестна и формируется автоматически

  1.  Где осуществляется поиск?

В пространстве параметров, следовательно, изменяются только параметры

В пространстве параметров и структур, т.е. преобразуются и параметры и структура

  1.  Размерность вектора параметров

Фиксирована

Заранее неизвестна и зависит от изменения структуры

  1.  Классические методы решения задачи синтеза управления

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

Первым для решения задачи синтеза управления, как функции координат пространства состояния объекта, стал метод динамического программирования [1]. Он основывается на принципе оптимальности, который можно сформулировать следующим образом: отрезок оптимального процесса от любой его точки до конца процесса сам является оптимальным процессом с началом в этой точке. Согласно данному методу структура оптимального  управления определяется путём решения уравнения Беллмана для непрерывных детерминированных систем, которое является достаточным условием минимума функционала критерия качества. При этом данный способ имеет важный недостаток, названный «проклятием размерности», который заключает в том, что сложность решения стремительно возрастает с увеличением размерности задачи.

Ещё один метод решения данной задачи — принцип максимума Л. С. Понтрягина [2]. Это определенного типа необходимое условие экстремума, которое даёт возможность среди всех возможных допустимых процессов  выделить те, которые могут претендовать на роль оптимальных. Наиболее полное решение задачи оптимального управления получено для линейных систем, где соотношения принципа максимума часто выступают не только как необходимое, но и как достаточное условие оптимальности. В отличие от классического вариационного исчисления он позволяет решать задачи управления, в которых на управляющие параметры наложены весьма общие ограничения.

Главную роль в принципе максимума Л. С. Понтрягина играет функция Гамильтона (гамильтониан), которая имеет вид:

(14)

где  — сопряженные переменные и .

Л.С. Понтрягиным доказано, что оптимальное управление достигается при максимуме функции:

.

(15)

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

Наиболее известным и исследованным является метод аналитического конструирования оптимальных регуляторов (АКОР), который в России впервые был разработан профессором А. М. Летовым [3]. Также одним из основателей метода стал американский математик Р. Калман [4]. Затем АКОР получил своё развитие в работах многих других ученых. Методы теории АКОР хорошо формализованы. При этом данный подход достиг своей практической завершенности только для линейных стационарных систем с функционалом квадратичного вида, путём сведения задачи к решению нелинейных алгебраических уравнений Риккати.

Значительное развитие в решении нелинейной теории АКОР было получено в работах А. А. Красовского [5] по неклассическим функционалам обобщенной работы. Суть этого подхода состоит в приведении уравнения Беллмана к линейному виду в частных производных, что позволяет разработать ряд приближенных методов его решения. В литературе существуют другие частные результаты по нелинейной теории АКОР, однако, в целом, проблема синтеза оптимальных регуляторов в своем практическом применении еще далека от разрешения.

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

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

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

  1.  Эволюционные алгоритмы

Эволюционные алгоритмы (ЭА) — это оптимизационные методы, принцип действия которых основан на биологической теории эволюции Ч. Дарвина и генетики. В них используются такие операторы как селекция, рекомбинация и мутация.

Основная идея ЭА состоит в том, что начальные «варианты решения» изменяются и комбинируются до тех пор, пока не найдётся решение задачи заданной точности.

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

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

Рассмотрим более подробно их алгоритм решения, блок-схема которого представлена на рисунке 1.

Рис. 1. Блок-схема эволюционного алгоритма

  1.  Общая схема эволюционных алгоритмов

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

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

(16)

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

Алгоритм может повторяться произвольное число раз. Следовательно, рационально и обязательно определить критерий останова. Некоторые примеры критериев останова:

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

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

  1.  
    Эволюционные методы символьной регрессии
    1.  Символьная регрессия

Символьная регрессия [6] — это метод построения регрессионных моделей путем перебора различных произвольных комбинаций функций из некоторого заданного набора.

Рис.2. Схема процесса символьной регрессии

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

  1.  Методы символьной регрессии

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

Первая идея, как решить различные проблемы с помощью символьной регрессии посредством ЭА, принадлежит Джону Козе [7], который разработал метод генетического программирования (ГП).

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

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

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

Приведём пример преобразования.

Допустим, необходимо получить математическое выражение:

.

(17)

В префиксной форме данное выражение будет иметь вид:

.

(18)

Минимальными множествами  и , необходимыми для построения S-выражения будут:

(18)

(19)

Рис. 3. Древовидная структура математического выражения

Древовидная структура при этом имеет вид, изображенный на рисунке 3.

Метод грамматической эволюция (ГЭ), одним из создателей которого является О’Нейл [8], во многом происходит от ГП и является его расширением. Главное отличие от метода Дж. Козы заключается в методе кодирования хромосом. Здесь хромосомы бинарные, а в ГП они символьные.

Преобразование решения из хромосом к символьной записи происходит с помощью заданной формы Бэкуса – Наура (БНФ). БНФ состоит из 4 множеств: , , , , где  – множество нетерминальных символов,  – множество терминальных символов,  – стартовый символ,  – множество продукционных правил.

В ГЭ популяции составляют бинарные строки различной длины, которые вначале преобразуются в целочисленные вектора, а затем в продукционные правила.

Рассмотрим этот подход на примере выражения (17).

Вначале необходимо задать множество продукционных правил. Они представлены в таблице 2.

Таблица . Продукционные правила

Продукционное правило

Индекс

|

|

|

0 |

1 |

2 | 3

|

0 |

1

0

0

| |  |

0 | 1 | 2 | 3

Выражение (17) может быть задано следующим десятичным вектором:

Переход от чисел к правилам осуществляется последовательно с учетом формулы: продукционное правило = элемент вектора  длина правила.

Таким образом, преобразование вектора p в формулу выглядит так:







и так далее.

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

Метод сетевого (СО) оператора был создан в 2006 году профессором А. И. Дивеевым [9-11] в том числе и для решения задачи синтеза управления. В нём учтены специфические особенности этого класса задач, вследствие чего пространство поиска было сужено. Поэтому его работа в рассматриваемом классе задач требует меньшей вычислительной мощности по сравнению с другими способами символьной регрессии.

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

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

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

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

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

  1.  Принцип действия метода аналитического программирования

Ещё один метод символьной регрессии — аналитическое программирование (АП). Он был создан польским профессором И. Зелинкой [12-14] и является развитием ГП и ГЭ.

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

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

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

Например:



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

Все вместе элементы этих множеств объединяются в одно общее множество, называемое обобщённое функциональное множество (ОФМ или GFSgeneral functional set). Оно является упорядоченным и имеет вложенную структуру, т.е. состоит из упорядоченных подмножеств функций в соответствии с числом их аргументов . Здесь индекс означает арность функций подмножества. Так, например,  будет содержать функции, требующие один аргумент, — два аргумента и так далее.  составляют терминальные символы и константы.

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

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

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

К ним можно отнести:

  1.  патологические функции (без аргументов, зацикливающиеся …)
  2.  функции с мнимой или действительной частью (если их не ожидалось)
  3.  бесконечность в функциях (деление на 0, …)
  4.  «замороженные» функции (требуют очень много времени, чтобы получить конечный результат).
  5.  и так далее.

Рис. 4. Преобразование методом АП

Пример преобразования целочисленного вектора в формулу приведён на рисунке 4.

Для этого случая подмножества ОФМ имеют следующий вид:



На сегодняшний день существует три основные версии АП. Первая и основная версия называется AP_basic. Она продемонстрирована на примере. Вторая версия — AP_meta (АП с метаэволюцией) — отличается от предыдущей версии способом определения констант. Если первоначально использовались константы из терминального множества, то в AP_ meta в подмножестве нулевой арности имеется только одна константа K. При выводе формулы, все К индексируются по порядку и затем оцениваются с помощью того же самого или любого другого эволюционного алгоритма. Последняя версия — AP_nf. В ней К оптимизируется подходящим методом.

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

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

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

  1.  Вычислительный эксперимент
    1.  Методы, использованные в программе

В данной дипломной работе был программно реализован метод аналитического программирования и применён к задаче структурно-параметрического синтеза управления системы динамическим объектом.

Программа была разработана на языке Python версии 2.7 в среде Eclipse Juno с использование библиотеки для построения графиков Matplotlib.

В качестве метода поиска решения был выбран генетический алгоритм с эволюционной стратегией типа (μ, λ).

  1.  Генетический алгоритм с эволюционной стратегией типа (μ, λ)

Особенность этой стратегии генетического алгоритма (ГА) является то, что поколение родителей μ объединяется с поколением потомков λ. Затем из получившегося множества выбираются лучшие особи в количестве равном размерности μ.

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

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

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

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

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

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

В многокритериальных задачах часто невозможно найти особь, представляющую оптимальное по всем критериям качества решение. Однако всегда существуют наилучшие возможные варианты. Пригодность решения можно «установить» по Парето [15].

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

Элементы этого множества обладают таким показателем как ранг. Ранг особей, расположенных непосредственно на границе, равен 1. Если убрать эти особи и определить новую границу, то  составляющие её особи будут иметь ранг 2 и так далее.

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

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

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

Рис. 5. Пример операции скрещивания

На рисунке 5 изображен пример скрещивания при точке разрыва с индексом 5.

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

Рис. 6. Блок-схема ГА с эволюционной стратегией (μ, λ)

На шестом шаге особи поколений  и  объединяются в единое множество . Из него выбираются наиболее приспособленные хромосомы, которые и составят новое поколение. Количество, выбранных особей равно числу особей в P. Далее алгоритм повторяется со второго шага.

Критерием останова в данном случае служит заданное количество поколений.

На рисунке 6 приведена блок-схема описанного алгоритма.

  1.  Функция метода аналитического программирования

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

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

Для решения поставленной задачи для всех объектов управления было выбрано подмножество параметров и терминальных символов вида:

где  и  — соответственно координаты системы  и , а  и  — параметры управления, генерирующиеся в «хвосте» хромосом.

Подмножество функций, требующих один параметр:

где  — аналог математической формулы

(20)

функция  — аналог математической формулы

(21)

с некоторыми ограничениями,

а аналог

(21)

с некоторыми ограничениями.

  1.  Метод решения обыкновенных дифференциальных уравнений

Для интегрирования систем управления в форме Коши применен численный алгоритм решения ОДУ — метод Рунге-Кутты четвёртого порядка [16] (функция ).

Приближенное значение в последующих точках вычисляется по итерационной формуле:

(22)

где

(23)

(24)

(25)

(26)

Этот метод имеет четвёртый порядок точности, т.е. суммарная ошибка на конечном интервале интегрирования имеет порядок . Ошибка на каждом шаге порядка .

  1.  Осциллятор Дуффинга

Программа осуществляет поиск оптимального управления для динамического объекта в виде осциллятора Дуффинга.

Осциллятор Дуффинга — это простейшая одномерная нелинейная система, которую можно представить обыкновенным дифференциальным уравнением второго порядка

(27)

где

— коэффициент демпфирования,

— показатель жёсткости,

показатель нелинейности.

В форме Коши данная модель при единичных параметрах выглядит следующим образом:

(28)

Управление представляет собой функцию от координат состояния

(29)

и ограничено

  1.  Результаты эксперимента

Исследование метода аналитического программирование для структурно-параметрического синтеза управления происходило на системе ОДУ (28).

Эксперименты производились из различных начальных точек со следующими параметрами:

— число итераций генетического алгоритма,

— количество особей в популяции,

длина хромосомы,

шаг интегрирования,

терминальная точка,

максимальное время моделирования,

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

Среднее время работы одного эксперимента составило 824 секунды.

На основании проведенных опытов были получены следующие результаты.

Для начальной точки  результаты приведены в таблице 3.

Таблица . Результаты для начальной точки [1.0,1.0]

Значение функционала

Функция

1

[2.62, 0.00078]

2

[2.63, 0.00077]

3

[2.33, 0.0341]

4

[2.4, 9.16987e-05]

5

[2.32, 0.00983]

6

[3.65, 2.10036e-05]

7

[2.37, 0.00618]

8

[2.69, 0.00094]

9

[2.69, 0.00094]

10

[2.33, 0.00876]

11

[2.69, 0.00094]

12

[2.3, 0.02557]

13

[2.25, 2.72759e-05]

14

[2.24, 0.00064]

15

[2.37, 0.00173]

Лучшим оказалось управление, определяемое по функции:

(30)

со значениями функционалов:

(31)

(32)

Рисунок 7. Фазовая траектория

Рис. 8. График управления

Рис. 9. Начальная точка =[1.0,1.5]

Рис. 10. Начальная точка =[2.0,1.0]

Рис. 11. Начальная точка =[2.0,2.0]

Рис. 12. Начальная точка =[2.0,3.0]

Рис. 13. Начальная точка =[1.0,1.5]

Рис. 14. Начальная точка=[2.0,1.0]

Рис. 15. Начальная точка =[2.0,2.0]

Рис. 16. Начальная точка =[2.0,3.0]

Графики фазовых траекторий функции (30) с другими начальными условиями приведены на рисунках 9-12.

Графики управления функции (30) с другими начальными условиями приведены на рисунках 13-16.

Для начальной точки  результаты приведены в таблице 4.

Таблица . Результаты для начальной точки [1.0,1.5]

Значение функционала

Функция

1

[3.96, 4.55440e-07]

2

[5.3, 0.00219]

3

[3.87, 8.31192e-05]

4

[5.24, 0.00013]

5

[5.3, 0.00219]

Таблица 4 (продолжение). Результаты для начальной точки [1.0,1.5]

Значение функционала

Функция

6

[5.7, 1.67794e-05]

7

[4.95, 0.00092]

8

[3.4, 4.87005e-06]

9

[5.56, 0.01320]

10

[4.37, 0.02912]

11

[4.13, 0.00025]

12

[5.68, 2.38327e-05]

13

[4.28, 0.00018]

14

[3.96, 9.81495e-08]

15

[5.3, 0.00219]

На рисунках 17 и 18 соответственно представлены графики фазовой траектории и управления, которое определяется по формуле:

(33)

со значениями функционалов:

(34)

(35)

Рис.17. Фазовая траектория

Рис. 18. График управления

Рис. 19. Начальная точка =[1.0,1.0]

Рис. 20. Начальная точка =[2.0,1.0]

Рис. 21. Начальная точка =[2.0,2.0]

Рис. 22. Начальная точка =[2.0,3.0]

Рис. 23. Начальная точка =[1.0,1.0]

Рис. 24. Начальная точка =[2.0,1.0]

Рис. 25. Начальная точка =[2.0,2.0]

Рис. 26. Начальная точка =[2.0,3.0]

Графики фазовых траекторий функции (33) с другими начальными условиями приведены на рисунках 19-22.

Графики управления функции (33) с другими начальными условиями приведены на рисунках 23-26.

Для начальной точки  результаты приведены в таблице 5.

Таблица5. Результаты для начальной точки [2.0,1.0]

Значение функционала

Функция

1

[5.5, 0.00157]

2

[5.53, 0.00087]

3

[5.52, 5.36697e-05]

4

[6.27, 0.03468]

Таблица 5 (продолжение). Результаты для начальной точки [2.0,1.0]

Значение функционала

Функция

5

[5.76, 0.04636]

6

[5.32, 0.0007]

7

[6.27, 0.03468]

8

[6.27, 0.03468]

9

[5.66, 0.03441]

10

[5.88, 0.00228]

11

[6.2, 0.00949]

12

[5.61, 9.10854e-05]

13

[5.63, 0.01196]

14

[5.32, 0.00058]

15

[6.01, 0.00955]

На рисунках 27 и 28 соответственно представлены графики фазовой траектории и управления, которое определяется по формуле:

(36)

со значениями функционалов:

(37)

(38)

Рис. 27. Фазовая траектория

Рис. 28. График управления

Рис. 29. Начальная точка =[1.0,1.0]

Рис. 30. Начальная точка =[1.0,1.5]

Рис. 31. Начальная точка =[2.0,2.0]

Рис. 32. Начальная точка =[2.0,3.0]

Рис. 33. Начальная точка =[1.0,1.0]

Рис. 34. Начальная точка =[1.0,1.5]

Рис. 35. Начальная точка =[2.0,2.0]

Рис. 36. Начальная точка =[2.0,1.0]

Графики фазовых траекторий функции (36) с другими начальными условиями приведены на рисунках 29- 32.

Графики управления функции (36) с другими начальными условиями приведены на рисунках 33-36.

Для начальной точки  результаты приведены в таблице 6.

Таблица 6. Результаты для начальной точки [2.0,2.0]

Значение функционала

Функция

1

[5.47, 0.0027]

2

[5.53, 3.00297e-05]

3

[5.72, 0.0001]

4

[5.69, 0.02601]

5

[5.79, 0.02954]

Таблица 6 (продолжение). Результаты для начальной точки [2.0,2.0]

Значение функционала

Функция

6

[7.46, 4.9791e-05]

7

[5.72, 0.00374]

8

[5.66, 0.01787]

9

[5.89, 0.00018]

10

[7.17, 0.0025]

11

[5.86, 0.00339]

12

[5.47, 0.00347]

13

[5.5, 0.00547]

14

[6.03, 0.01166]

15

[5.82, 0.01814]

На рисунках 37 и 38 соответственно представлены графики фазовой траектории и управления, которое определяется по формуле:

(39)

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

(40)

(41)

Рис. 37. Фазовая траектория

Рис. 38. График управления

Рис. 39. Начальная точка =[1.0,1.0]

Рис. 40. Начальная точка =[1.0,1.5]

Рис. 41. Начальная точка =[2.0,1.0]

Рис. 42. Начальная точка =[2.0,3.0]

Рис. 43. Начальная точка =[1.0,1.0]

Рис. 44. Начальная точка =[1.0,1.5]

Рис. 45. Начальная точка =[2.0,1.0]

Рис. 46. Начальная точка =[2.0,3.0]

Графики фазовых траекторий функции (36) с другими начальными условиями приведены на рисунках 39-42.

Графики управления функции (36) с другими начальными условиями приведены на рисунках 43-46.

Для начальной точки  результаты приведены в таблице 7.

Таблица 7. Результаты для начальной точки [2.0,3.0]

Значение функционала

Функция

1

[7.38, 0.01016]

2

[8.27, 0.03115]

3

[10.0, 0.11827]

4

[7.91, 0.02802]

5

[8.72, 0.03251]

Таблица 7 (продолжение). Результаты для начальной точки [2.0,3.0]

Значение функционала

Функция

6

[7.6, 0.00034]

7

[8.28, 0.02931]

8

[6.99, 0.00394]

9

[7.68, 0.06472]

10

[6.84, 0.0037]

11

[7.91, 0.02802]

12

[7.91, 0.02802]

13

[7.91, 0.02802]

14

[6.84, 0.0037]

15

[6.84, 0.00028]

На рисунках 47 и 48 соответственно представлены графики фазовой траектории и управления, которое определяется по формуле:

(42)

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

(43)

(44)

Рис. 47. Фазовая траектория

Рис. 48. График управления

Рис. 49. Начальная точка =[1.0,1.0]

Рис. 50. Начальная точка =[1.0,1.5]

Рис. 51. Начальная точка =[2.0,1.0]

Рис. 52. Начальная точка =[2.0,2.0]

Графики фазовых траекторий функции (42) с другими начальными условиями приведены на рисунках 49-52.

Графики управления функции (42) с другими начальными условиями приведены на рисунках 53-56.

Рис. 53. Начальная точка =[1.0,1.0]

Рис. 54. Начальная точка =[1.0,1.5]

Рис. 55. Начальная точка =[2.0,1.0]

Рис. 56. Начальная точка =[2.0,2.0]

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


Заключение

В рамках дипломной работы был разработан программный комплекс, позволяющий синтезировать управление динамическим объектом с помощью метода аналитического программирования, использующий генетический алгоритм с эволюционной стратегией (μ, λ). Для его тестирования был проведён ряд экспериментов на примере осциллятора Дуффинга.

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

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

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

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

Дальнейшим направлением развития данной работы могут послужить следующие исследования и доработки программы:

  1.  Определение функции управления объектом для множества начальных точек.
  2.  Встроенные условные конструкции и циклы для создания программного кода.


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

  1.  Беллман Р. Динамическое программирование. М.: Изд-во Иностранная литература, 1960 г. 400 стр.
  2.  Понтрягин Л.С., Болтянский В.Г., Гамкрелидзе Р.В., Мищенко Е.Ф. Математическая теория оптимальных процессов. 4-е изд. М.: Наука, 1983 г. 393 стр.
  3.  Летов A.M. Математическая теория процессов управления. М.: Наука, 1981 г. 256 стр.
  4.  Калман Р., Арбиб М., Фалб П. Очерки по математической теории систем. М.: Мир, 1971 г. 400 стр.
  5.  Красовский A.A. Системы автоматического управления полетом и их аналитическое конструирование. М.: Наука, 1973 г. 558 стр.
  6.  Zelinka, I., Nolle, L., Oplatkova, Z. Analytic Programming — Symbolic Regression by Means of Arbitrary Evolutionary Algorithms / Journal of Simulation. Vol. 6 No 9. Pр. 44—56.
  7.  Koza J. R. Genetic Programming: On the Programming of Computers by Means of Natural Selection. Cambridge: MIT Press, 1992, 840 p.
  8.  O’Neill M., Ryan C., Grammatical Evolution, IEEE Transactions on Evolutionary Computation 5(4), 2001, pp. 349–358.
  9.  Дивеев А. И. Численный метод сетевого оператора для синтеза системы управления с неопределенными начальными значениями // Известия РАН. Теория и системы управления, 2012, №2, с. 63–78.
  10.  Дивеев А.И., Софронова Е.А. Структурно-параметрический синтез системы управления методами генетического программирования // Труды Седьмого международного симпозиума «Интеллектуальные системы» (INTELS'2006) Россия. Краснодар, КИИЗ 26-30 июня 2006. М.: RUSAKI. С. 66-68.
  11.  Дивеев А.И., Софронова Е.А. Метод генетического программирования для структурно-параметрического синтеза систем управления // Тезисы докладов Третьей международной конференции по проблемам управления Россия. Москва. 20-22 июня 2006. Изд-во ИПУ. Т.1. С. 26.
  12.  Zelinka I., Analytic programming by Means of Soma Algorithm in Proceedings of the 8th International Conference on Soft Computing (MENDEL-02), Brno, Czech Republic: VUT v Brno, 2002, pp. 93–101.
  13.  Zelinka I., Oplatkova Z.: 2003: Analytic programming – Comparative Study. CIRAS’03, The second International Conference on Computational Intelligence, Robotics, and Autonomous Systems, Singapore, 2003, 560 p.
  14.  Zelinka, Ivan, Artificial Intelligence in The Problems of Global Optimization (Czech Ed.) BEN, 2002, 190 p.
  15.  Godfrey, Parke, Shipley, Ryan; Gryz, Jarek (2006). "Algorithms and Analyses for Maximal Vector Computation", 2006, VLDB Journal 16: pp. 5–28.
  16.  Бахвалов Н. С., Жидков Н. П., Кобельков Г. М. Численные методы. — М.: Бином, 2001 г. 621 стр.
  17.  

Приложение

Листинг программы

Модуль AnalyticalProgramming.py

# -*- coding: utf-8 -*-

def anprog(p,f):

   gfs=[' ']

   for i in f: gfs+=i

   ss,s,i='',[0],0

   for n in p:

       try: j=s.index(i)

       except:

           try:

               i+=1

               j=s.index(i)

           except: break

       arg=0

       flag=(gfs[n] in f[arg])

       while flag!=True:

           arg+=1

           flag=(gfs[n] in f[arg])

       s[j]=gfs[n]

       if arg==1:

           s.insert(j+1,i+1)

           s.insert(j+2,')')

       if arg==2:

           s.insert(j+1,i+1)

           s.insert(j+2,',')

           s.insert(j+3,i+1)

           s.insert(j+4,')')

   x=0

   for n in s:

       try:

           j=s.index(i)

           s[j]=f[0][p[x]%len(f[0])]

           x+=1

       except:

           try:

               i+=1

               j=s.index(i)

               s[j]=f[0][p[x]%len(f[0])]

               x+=1

           except: break

   for n in s: ss=ss+n

   return ss

Модуль GeneticAlgorithm.py

# -*- coding: utf-8 -*-

from ParetoDomination import Pareto

from random import random,randint

from math import ceil, sqrt

def bin2dec(b):

   s=''

   for i in b: s+=str(i)

   return int(s,2)

def qog(lengfs):

   n=int(ceil(sqrt(lengfs-1)))

   return n  

def ogr(g,n,lengfs):

   g=int(g*lengfs/2**n)

   if g<1: g=1

   return g

def merger(ppl,lenp,lenppl):

   for i in xrange(lenppl):

       x=[]

       for j in xrange(lenp+2): x+=ppl[i][j]

       ppl[i]=x

   return ppl

def dem(ch,n,lenp):

   ii=0

   chi=[0]*(lenp+2)

   while (ii+n)<=len(ch):

       for i in xrange(lenp+2):

           b=ch[ii:ii+n]

           ii+=n

           chi[i]=b

   return chi  

def InitialPop(lenp,lenppl,n):

   ppl=[[[randint(0,1) for ii in xrange(n)] for j in xrange(lenp+2)]

         for i in xrange(lenppl)]

   return ppl

def Selection(ppl,fit,lenppl):

   parents=[0]*lenppl

   for i in xrange(0,lenppl-1,2):

       p = random()

       i1 = randint(0,lenppl-1)

       i2 = randint(0,lenppl-1)

       while fit[i1]<p: i1 = randint(0,lenppl-1)

       while fit[i2]<p: i2 = randint(0,lenppl-1)    

       parents[i]=ppl[i1]

       parents[i+1]=ppl[i2]

   return parents        

def Crossover(parent,lenppl,ch,m):

   i1=ch

   i2=ch+1

   n=randint(1,len(parent[i1])-(2+2*m))

   child1=parent[i1][:n]+parent[i2][n:-2*m]+parent[i1][-2*m:]

   child2=parent[i2][:n]+parent[i1][n:-2*m]+parent[i2][-2*m:]

   return child1,child2

def Mutation(genom):

   for i in xrange(len(genom)):

       P=random()

       if P<=1.0/(3.0+i):

           if genom[i]==1: genom[i]=0

           else: genom[i]=1

   return genom

def ga(P,fun,Nitr,n,lenp,lenppl,lengfs,f):

   itr=0

   obj=Pareto()

   func=[fun([ogr(bin2dec(P[j][i]),n,lengfs) for i in xrange(lenp)],

           f, bin2dec(P[j][-2]) , bin2dec(P[j][-1]) ) for j in

           xrange(lenppl)]

   rank=obj.assign_ranks(func)

   fit=obj.set_fitness_from_ranks(rank,lenppl)

   while itr<Nitr:

       itr+=1

       print itr

       par=Selection(P,fit,lenppl)

       par=merger(par,lenp,lenppl)

       Q=[]

       for i in xrange(lenppl/2):

           ch1,ch2=Crossover(par,lenppl,i*2,n)

           ch1=Mutation(ch1)

           ch2=Mutation(ch2)

           Q.append(dem(ch1,n,lenp))

           Q.append(dem(ch2,n,lenp))

       PQ=P+Q

       f2=[fun([ogr(bin2dec(PQ[j][i]),n,lengfs) for i in xrange(lenp)], f,

            bin2dec(PQ[j][-2]), bin2dec(PQ[j][-1])) for j in

            xrange(2*lenppl)]

       rank2=obj.assign_ranks(f2)

       fit=obj.set_fitness_from_ranks(rank2,2*lenppl)

       fitz=zip(fit,range(2*lenppl))

       fitz.sort()

       fit=[fitz[i][0] for i in xrange(2*lenppl)]

       P=[PQ[fitz[i][1]] for i in xrange(2*lenppl)]

       fit=fit[lenppl:]

       P=P[lenppl:]  

   best=[ogr(bin2dec(i),n,lengfs) for i in P[-1]]

   q=f2[fitz[-1][1]][:]   

   return best,q

Модуль MainProg.py

# -*- coding: utf-8 -*-

from GeneticAlgorithm import InitialPop, ga, qog

from Problem import Criterions, ForGraphic, PhaseTrajectory, GraphicU

from AnalyticalProgramming import anprog

import matplotlib.pyplot as plt

from MyFunctions import *

import time

def main():

   f=[0]*3

   f[0]=['xk[0]', 'xk[1]','q1','q2']

   f[1]=['atan(', 'minus(', 'sqrtX(', 'sqr(','sign(','step(','fun1(', 'fun2(']

   f[2]=['add(','sub(','mul(','divX(']

   GFS=[' ']

   for i in f: GFS+=i

   lenGFS=len(GFS)

   n=qog(lenGFS)

   LenP=40

   LenPPL=72

   NIter=48

   PPL=InitialPop(LenP, LenPPL, n)

   p,func=ga(PPL, Criterions, NIter, n, LenP, LenPPL, lenGFS, f)

   print func

   x1,x2,ug,tg=ForGraphic(p, f, p[-2], p[-1])

   PhaseTrajectory(x1,x2)

   GraphicU(ug,tg)

if __name__=="__main__":

   main()

Модуль MyFunctions.py

# -*- coding: utf-8 -*-

from math import sqrt, exp

def minus(x):

   return -(x)

def sqrtX(x):

   return sign(x)*sqrt(abs(x))

def sqr(x):

   return x**2

def sign(x):

   if x>0 or x==0: result=1

   else: result=-1

   return result

def step(x):

   if x>0 or x==0: y=1

   else: y=0

   return y

def fun1(x):

   try:

       result=round(1/(1+exp(-x)),6)

   except:

       if sign(x)==-1:

           result=0

       elif sign(x)==1:

           result=1            

   return result

def fun2(x):

   try:

       result=round((1-exp(-x))/(1+exp(-x)),6)

   except:

       if sign(x)==-1:

           result=0

       elif sign(x)==1:

           result=1

   return result

def divX(x, y):

   try:

       z = x / y

   except:

       z = sign(x) * sign(y) * 10e+8

   return z

Модуль ParetoDomination.py

# -*- coding: utf-8 -*-

"""

Created on Sun Apr 17 13:17:39 2011

@author: David Kazaryan

"""

class Pareto:

   

   def dominate(self, F1, F2):

       d = False

       for i in range(len(F1[1])):

           if F1[1][i] > F2[1][i]:

               d = True

           elif F2[1][i] > F1[1][i]:

               return False

       return d

   

   def non_dominated_front(self, Group):

       Front = []

       for G in Group:

           Front.append(G)

           tmpFront = Front[:]

           for C in Front:

               if G != C:

                   if self.dominate(G, C):

                       tmpFront.remove(G)

                       break

                   elif self.dominate(C, G):

                       tmpFront.remove(C)

           Front = tmpFront[:]

       return Front

   

   def assign_ranks(self, functionals):

       tmp_functionals = [(i, functionals[i]) for i in range(len(functionals))]

       ranks = []

       i = 0

       while tmp_functionals != []:

           ranks.append(self.non_dominated_front(tmp_functionals))

           for R in ranks[i]:

               tmp_functionals.remove(R)

           i += 1

       

       return ranks

   def set_fitness_from_ranks(self, ranks, pop_size):

       Fitness = [0.0 for i in range(pop_size)]

       cr = 0.0

       for R in ranks:

           for e in R:

               Fitness[e[0]] = 1.0 / (1.0 + cr)

           cr += 1

       return Fitness

Модуль Problem.py

# -*- coding: utf-8 -*-

from AnalyticalProgramming import anprog

from RungeKuttaMethods import rk4

import matplotlib.pyplot as plt

from MyFunctions import *

from operator import *

from math import *

#############################################

LenSys=2

x0=[2.0,1.0]

xf=[0.0,0.0]

tf=10.0

dt=0.01

#############################################

def Duffing(time,x,u):

   y=[x[1],u-x[0]-x[0]**3]

   for i in xrange(2):

       if y[i]>=1e8: y[i]=sign(y[i])*1e8

   return y

def norma(x,xf):

   s=0.0

   for i in xrange(len(xf)): s+=(xf[i]-x[i])**2

   return sqrt(s)

def Criterions(p,f, qx1, qx2):

   q1=qx1

   q2=qx2

   x=[[x0[i] for i in xrange(LenSys)]]

   t=0

   miss_err=0

   flag=False

   Ft = tf

   Fm = 1e+8

   while (t<=tf):

       xk = x[-1][:]

       try:

           u=eval(anprog(p,f))

           if u>1.0: u=1.0

           if u<-1.0: u=-1.0

       except:

           miss_err=1e+8

           print xk, q1, q2

           print anprog(p,f)

           print eval(anprog(p,f))

           u = 1.0

       t+=dt

       x.append(rk4(Duffing,dt,t,x,u))

       s=norma(x[-1],xf)

       if s<=1e-1:

           if flag == False:

               Ft = t

               flag = True

       else:

           Ft = t

           flag = False

       Fm = s

   return [Ft, Fm+miss_err]

def ForGraphic(p, f, qx1, qx2):

   q1=qx1

   q2=qx2

   x1=[]

   x2=[]

   ug=[]

   tg=[]

   x=[[x0[i] for i in xrange(LenSys)]]

   t=0

   while (t<=tf):

       xk = x[-1][:]

       u=eval(anprog(p,f))

       if u>1.0: u=1.0

       if u<-1.0: u=-1.0

       t+=dt

       x.append(rk4(Duffing,dt,t,x,u))

       ug+=[u]

       tg+=[t]

   for e in x:

       x1.append(e[0])

       x2.append(e[1])

   return x1,x2,ug,tg

def PhaseTrajectory(x1,x2):

   plt.plot(x1,x2,label='X2(X1)')

   plt.title('Phase trajectory')

   plt.xlabel('X1')

   plt.ylabel('X2')

   plt.legend(loc='best')

   plt.grid(True)

   plt.show()

   

def GraphicU(u,t):

   plt.plot(t,u,label='U(t)')

   plt.title('Control')

   plt.xlabel('t')

   plt.ylabel('U')

   plt.legend(loc='best')

   plt.grid(True)

   plt.show()

def GraphicX1(x1,t):

   plt.plot(t,x1,label='X1(t)')

   plt.title('Graphic X1')

   plt.xlabel('t')

   plt.ylabel('X1')

   plt.legend(loc='best')

   plt.grid(True)

   plt.show()

def GraphicX2(x2,t):

   plt.plot(t,x2,label='X2(t)')

   plt.title('Graphic X2')

   plt.xlabel('t')

   plt.ylabel('X2')

   plt.legend(loc='best')

   plt.grid(True)

   plt.show()

Модуль RungeKuttaMethods.py

# -*- coding: utf-8 -*-

def rk4(func,dt,time,x,u):

   n=len(x[0])

   f=func(time,x[-1],u)

   k1=[dt*f[i] for i in xrange(n)]

   f=func(time+(dt/2),[x[-1][i]+(k1[i]/2) for i in xrange(n)],u)

   k2=[dt*f[i] for i in xrange(n)]

   f=func(time+(dt/2),[x[-1][i]+(k2[i]/2) for i in xrange(n)],u)

   k3=[dt*f[i] for i in xrange(n)]

   f=func(time+dt,[x[-1][i]+k3[i] for i in xrange(n)],u)

   k4=[dt*f[i] for i in xrange(n)]

   return [x[-1][i]+(1.0/6.0)*(k1[i]+2*k2[i]+2*k3[i]+k4[i]) for i in xrange(n)]


 

А также другие работы, которые могут Вас заинтересовать

50801. Линии и каналы связи 29 KB
  jpg lign= right h3 Основу волоконнооптического кабеля составляют внутренние подкабели стеклянные или пластиковые волокна диаметром 810 одномодовые однолучевыеи 5060 многомодовые многолучевые микрон окруженные твердым заполнителем ипомещенные в защитную оболочку диаметром 125 мкм. Кабель в свою очередь окружен заполнителем и покрыт более толстой защитной оболочкой между которымипроложены кевларовые волокна принимающие на себя обеспечение механической прочностикабеля. По одномодовому волокну диаметр их 810 мкм оптический...