- •Министерство образования и науки Российской Федерации Московский государственный институт электронной техники (технический университет) Факультет мп и тк
- •«Программный комплекс многокритериальной оптимизации систем на основе мультихромосомных моделей и генетических алгоритмов»
- •Содержание
- •Перечень сокращений
- •Введение
- •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.3. Выводы
В исследовательской части пояснительной записки были рассмотрены основные принципы генетических алгоритмов и показана их пригодность для решения поставленной задачи.
В конструкторской части были сформулированы требования к программе, описаны разработанные алгоритмы, а также структура и формат входных и выходных данных. Кроме того, была описана иерархия классов, которая составила основу программы.
На основании проведённого тестирования можно утверждать, что программный комплекс многокритериальной оптимизации систем показал свою пригодность для использования его при оптимизации. В результате испытаний были выявлены и устранены логические ошибки программирования, некоторые из них оказалось найти не очень просто, однако построенные соответствующим образом тесты и различные средства отладки помогли справиться с этой задачей.
Объём самостоятельно разработанного программного кода составляет порядка 160 Кб или около 6 тысяч строк.
2. Технологический раздел
2.1. Использование стандартных библиотек
2.1.1. Библиотека stl
STL – Standart Template Library – это стандартная библиотека шаблонов, которая представляет большой набор структур данных и алгоритмов [6]. STL - это не просто расширение языка программирования C++, недавно он был принят комитетом по стандартизации ANSI/ISO в качестве составляющей стандартной библиотеки C++. STL поддерживают все современные компиляторы. Как видно из названия, библиотека STL основана на шаблонах. Шаблонами называются функции или классы, определяемые без указания одного или нескольких типов. При использовании шаблона эти типы передаются в виде аргументов явно или косвенно.
Основные компоненты STL - контейнеры и стандартные алгоритмы (такие как сортировка, поиск и т. д.). Контейнер - это объект, который содержит набор других объектов. Пример - обычный массив. Но в отличие от массива, контейнеры не имеют фиксированного размера (что очень удобно и весьма эффективно при написании программ). Размер контейнера можно изменять, добавляя или удаляя объекты из контейнера. Есть следующие контейнеры:
vector - линейный массив
list - двусвязанный список
queue - структура данных типа очередь
deque - очередь с двухсторонним доступом
stack - структура данных типа стек
set - ассоциативный массив уникальных ключей
multiset - ассоциативный массив с возможность дублирования ключей
map - ассоциативный массив с уникальными ключами и значениями
multimap - ассоциативный массив с возможность дублирования ключей и значений
Алгоритмы STL - это шаблоны функций, работающих с объектами.
Доступ к данным, находящимся внутри контейнера, осуществляется с помощью итераторов. Итераторы - это обобщённые указатели, которые позволяют работать с различными структурами данных (контейнерами) единообразным способом.
Есть пять категорий итераторов в зависимости от операций, определённых для них: ввода (input iterators), вывода (output iterators), последовательные (forward iterators), двунаправленные (bidirectional iterators) и произвольного доступа (random access iterators).
Основная идея STL заключается в уменьшении зависимости от стандартных библиотек C++. Главная беда стандартных библиотек – очень тесная их связь с данными, что делает их неудобными для работы с типами данных пользователя. STL позволяет работать с любыми типами данных и производить над ними операции. Кроме того, STL отделяет структуры данных от алгоритмов, которые с ними работают [7].
Таким образом, использование библиотеки STL оправдывает себя, в частности, когда необходимо организовывать хранение переменных пользовательских типов в достаточно большом и неизвестном заранее количестве. Вся работа по динамическому распределению памяти перекладывается на библиотеку STL, программисту нет нужды следить за правильным распределением памяти и, самое главное, её своевременным освобождением.