Автор работы: Пользователь скрыл имя, 24 Мая 2013 в 17:43, курсовая работа
Идея применения генетических алгоритмов была позаимствована из природы. Именно природе удалось создать самоорганизующуюся и самобалансирующуюся сложную систему, работающую на основе механизма эволюции. Но каким образом природа выбирает нужное направление эволюции? Почему и каким образом природа экономно использует свои ресурсы? Как ей удается создавать устойчивые форму жизни? Как природе удалось создать порядок из хаоса?[1] Эти вопросы интересовали не только биологов, но и других ученых и инженеров, которые занимаются моделированием сложных интеллектуальных систем, так как понимание механизма эволюции, возможно, поможет совершить прорыв в создании сложных устойчивых структур, позволяющих решать многие проблемы.
Введение 3
Часть 1 5
Основные понятия 5
Основные этапы работы генетического алгоритма 7
Область применения генетических алгоритмов 10
Часть 2 12
Постановка задачи 12
Структура данных 12
Генерация первоначальной популяции 13
Кроссинговер 14
Селекция 14
Технические характеристики программы 17
Список литературы 18
Дан граф , где – множество вершин графа (города), – множество ребер (возможные пути между городами). Дана матрица чисел , представляющих собой стоимость переезда из вершины .
Требуется найти перестановку из элементов множества такую, что значение целевой функции равно
Для неполного графа дополнительным ограничением на величину являются:
[2]
class TGeneticGraph
{
Class TWay
{
public Int32[] Way;
public Int32 Length;
}
Int32[,] graph;
Int32 Size;
List<TWay> Population;
Int32 TheBestWay = 9999999, PrevoiusWay, TheWrostWay, PreWrost;
Int32 Generation = 0;
Int32[] Path;
}
где
Class TWay
{
public Int32[] Way;
public Int32 Length;
}
Класс, представляющий собой хромосому – список узлов, которые посетит коммивояжер и длину его пути.
Int32[,] graph – матрица смежности данного графа.
Int32 Size – размерность графа.
List<TWay> Population – популяция возможных маршрутов коммивояжера, список хромосом.
Int32 TheBestWay = 9999999, TheWrostWay– длинна лучшего и худшего путей. Необходимы для оценки сходимости алгоритма.
Int32[] Path – лучший из предложенных маршрутов. Данный маршрут ранится отдельно, так как с ним могут проводится операции мутации, несмотря на то, что этот маршрут будет являться глобальным оптимумом.
Переменные Length в классе TWay и Size в классе TGeneticGraph используются для экономии временных затрат, так как в процессе решения поставленной задачи программа будет неоднократно к ним обращаться.
Размер популяции, необходимой для решения задачи составляет , где – количество вершин в графе. При создании хромосомам предъявляется единственное требование: каждый узел должен встречаться в последовательности не более одного раза, и каждый из узлов должен входить в эту последовательность.
Для обеспечение выполнения заданных условий используется структура SortedSet<Int32>, доступная пользователям платформы Microsoft .NET Framework. Контроль за реальным существованием сгенерированного пути в графе не важен, так как нежизнеспособные особи будут преобразованы и устранены в ходе выполнения алгоритма.
Для решения поставленной
задачи был реализован «жадный» алгоритм
кроссинговера – поиск
«Жадный» алгоритма
Селекция особей в популяции проводится путем элитного отбора: в качестве особей следующего поколения выбираются 50% наиболее приспособленных особей, то есть гамильтоновых циклов наименьшей длинны. Сам процесс отбора имеет смысл только в том случае, когда в популяции есть особи, отличающиеся друг от друга, поэтому в качестве точки останова взято полное отсутствие разнообразия в поколении, т. е. момент. Когда все особи в популяции одинаковы. Такой выбор обусловлен тем, что отсутствие разнообразия говорит о том, что для текущих данных и условий был достигнут глобальны оптимум (который на самом деле может оказаться лишь локальным оптимумом, наиболее близким к глобальному), и дальнейшее выполнение алгоритма не приведет к появлению новых оптимальных сочетаний узлов. Если в графе отсутствует гамильтонов цикл, то алгоритм завершится через шагов.
На блок-схеме 1 наглядно представлен
общий ход алгоритма и
В заключением стоит отметить, что данная программа не всегда дает точный результат, что обусловлено тем, что генетические алгоритмы являются алгоритмами для приближенных вычислений. Практика показывает, что пользователь может получить верный ответ примерно в 92% случаев. Временная сложность данного алгоритма составляет . В лучшем случае временная сложность алгоритма составляет .
Блок-схема 1
Информация о работе Применение генетического алгоритма для решения задачи коммивояжера