Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом Voldem@r / Оно / ПЗ_release.doc
Скачиваний:
49
Добавлен:
16.04.2013
Размер:
1.6 Mб
Скачать

1.2.5. Общий алгоритм работы программы

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

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

Интерфейс является «связью с внешним миром». Он ожидает в цикле прихода какой-либо команды, периодически проверяя её наличие. Такое поведение является стандартным для приложений, написанных с использованием Win32 API. Когда приходит команда, происходит её разбор, т.е. определяется тип и, соответственно, действие, которое нужно выполнить (т.е. какому модулю передать управление).

Когда пользователь выбирает команду «Расчёт», инициируется запуск модуля ГА. Программная реализация такова, что для работы модуля создаётся отдельная нить (лёгкий процесс). Под нитью понимается независимая последовательность выполнения программного кода внутри отдельного процесса. Нити внутри процесса распределяются и исполняются абсолютно независимо, т.е. если одна нить ожидает ввода информации, это никаким образом не прерывает исполнение других нитей.

Обычно нить исполняется, пока не будет заблокирована каким-либо запросом или пока не закончится отведенный ей отрезок времени (квант времени). Таким образом, работа модуля ГА, которая является достаточно ресурсоёмкой, не будет «подвешивать» приложение. Кроме этого, выполнение нити можно прервать в любой момент. Эти особенности нити как нельзя кстати подходят для реализации модуля ГА.

Перед запуском поиска оптимального сочетания критериев обязательно осуществляется проверка корректности модели. Данная проверка заключается в определении циклов в зависимостях компонентов одной подсистемы (которых быть не должно!), в проверке правильности выражений. Одновременно вычленяются неиспользуемые компоненты и подсистемы, и их ветви «отрезаются» от общего дерева. Модуль ГА считает, что дерево построено правильно, и при работе делает только проверку выражений с помощью блока обработки математических выражений. Эта проверка необходима, т.к. в процессе работы модуля ГА получаются выражения из различных значений компонентов системы, которые могут быть достаточно сложными и в которых могут оказаться недопустимые операции вида «деление на ноль».

Рис 1.8 Общий алгоритм работы комплекса

1.2.6. Иерархия классов

Программный комплекс написан на языке С++, который является объекьно-ориенированным языком программирования. Поэтому программа использует возможности объектно ориентированных языков, в частности, классы. На рис. 1.9 и 1.10 приведена иерархия основных классов с использованием нотации Г. Буча [2].

Класс CModelElement является базовым для всех элементов модели. От него порождаются классы CComponentm, CSubSystem, CSystem, описывающие такие элементы модели, как компонент, подсистема, система. Причём система является частным случаем подсистемы (что отражено в диаграмме классов).

Все элементы модели содержат строку с описанием этого элемента и уникальное имя.

Класс CSubSystem содержит массив указателей на объекты CModelElement. Это необходимо для реализации древовидной структуры. Указатели на классы CSubSystem и CComponent приводятся к типу CModelElement* и помещаются в массив _children.

Класс CComponent содержит массив объектов (НЕ указателей!) класса SValueListEntry. Этот массив является тем дискретным набором значений, которые может принимать компонент.

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

Объект класса CModelStorage существует в единственном экземпляре для редактируемой модели и представляет собой ядро хранилища элементов модели.

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

Класс CHromoPrototype является прототипом хромосомы, он содержит информацию о подсистеме, для которой строится хромосома, и о тех компонентах (объектах класса CComponent), которые непосредственно связаны с этой подсистемой.

Рис 1.9 Диаграмма классов элементов модели

Рис 1.10 Диаграмма классов для реализации ГА

Класс CPersoneSet является надстройкой над классом CHromoPrototype. Его задача – наполнить прототип хромосомы конкретным содержанием. Данный класс несёт информацию сразу о наборе хромосом. Иными словами, он содержит особей с различными значениями генов, но с одинаковой структурой хромосомы.

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

Соседние файлы в папке Оно