
- •Министерство образования и науки Российской Федерации Московский государственный институт электронной техники (технический университет) Факультет мп и тк
- •«Программный комплекс многокритериальной оптимизации систем на основе мультихромосомных моделей и генетических алгоритмов»
- •Содержание
- •Перечень сокращений
- •Введение
- •1. Специальный раздел
- •1.1. Исследовательская часть
- •1.1.1. Обзор существующих программ для оптимизации
- •1.1.3. Информационные потребности пользователя
- •1.2. Конструкторская часть
- •1.2.1. Требования, предъявляемые к системе
- •1.2.2. Структура входных и выходных данных
- •1.2.3. Конфигурация технических средств
- •1.2.4. Модули комплекса
- •1.2.5. Общий алгоритм работы программы
- •1.2.6. Иерархия классов
- •1.2.7. Переменные в выражениях и их использование в программе
- •1.2.8. Основные алгоритмы и особенности программной реализации
- •1.2.9. Проверка отказоустойчивости программы
- •1.2.10. Проверка работы комплекса на контрольных примерах
- •1.3. Выводы
- •2. Технологический раздел
- •2.1. Использование стандартных библиотек
- •2.1.1. Библиотека stl
- •2.1.2. Библиотека mfc
- •2.1.3. Применение библиотек stl и mfc в программе
- •2.1.4. Средство ClassWizard
- •2.2.2. Встроенные средства языка для отладки программ
- •2.2.3. Отладка программного кода, содержащего stl и mfc
- •2.4. Приёмы объектно-ориентированного проектирования
- •2.4.1. Применение паттернов проектирования в программе
- •2.5. Выводы
- •3. Организационно-экономический раздел
- •3.1. Метод анализа иерархий
- •3.2. Метод парных сравнений.
- •3.2.1. Определение собственных векторов
- •3.3. Применение метода для выбора среды программировани
- •3.3.1. Характеристики сред программирования
- •3.3.2. Таблица сравнений важности критериев
- •3.3.3. Таблицы попарного сравнения сред разработки по каждому критерию
- •3.4. Результаты применения метода
- •3.5. Выводы
- •4. Производственная и экологическая безопасность
- •4.1. Опасные и вредные факторы, воздействующие на программиста
- •4.1.1. Микроклимат рабочей зоны программиста
- •4.1.2. Воздействие шума на программиста. Защита от шума
- •4.1.3. Уровень напряжённости электромагнитного поля
- •4.1.4. Электробезопасность. Статическое электричество
- •4.1.5. Освещенность рабочего места
- •4.2. Заключение
- •Заключение
- •Список литературы
- •Исходный текст программы
- •Результаты испытаний
- •Руководство оператора
- •Аннотация
- •2. Условия выполнения программы
- •2.1. Климатические условия эксплуатации
- •2.2. Состав аппаратных и программных средств
- •3. Требования к персоналу (пользователю)
- •4.2.2. Выполнение функции сохранения модели в файл
- •4.2.3. Выполнение функции ввода информации о системе
- •4.2.4. Выполнение функции задания различных параметров системы
- •4.2.5. Правила записи выражений
- •4.2.6. Выполнение функции задания параметров генетических алгоритмов
- •4.2.7. Выполнение функции поиска решения
- •5.3. Ошибки при проверке модели
- •5.4. Ошибки во время поиска решения
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. Его интерфейс позволяет осуществить эволюцию популяции. Класс реализует такие генетические операторы, как кроссовер, мутация, а также выбор родительских групп и генерацию следующего поколения.