Описание и обоснование выбранного варианта решения
При 100 поколениях и размере популяции 30 особей среднее значение минимума функции в заданной области 0.162 433 199 925 989. При 100 поколениях и размере популяции 10 особей среднее значение минимума функции в заданной области 0.139 601 413 202 977. При 50 поколениях и размере популяции 30 особей среднее значение минимума функции в заданной области 0.157 094 040 787 855. При 50 поколениях… Читать ещё >
Описание и обоснование выбранного варианта решения (реферат, курсовая, диплом, контрольная)
Оператор скрещивание (crossover) осуществляет обмен частями хромосом между двумя (может быть и больше) хромосомами в популяции. Может быть одноточечным или многоточечным. Одноточечный кроссовер работает следующим образом. Сначала, случайным образом выбирается одна из l-1 точек разрыва. Точка разрыва — участок между соседними битами в строке. Обе родительские структуры разрываются на два сегмента по этой точке. Затем, соответствующие сегменты различных родителей склеиваются и получаются два генотипа потомков.
Мутация Мутация (mutation) — стохастическое изменение части хромосом. Строке, которая подвергается мутации, каждый бит с вероятностью Pmut (обычно очень маленькой) меняется на другой.
Алгоритм работы ГА Работа ГА представляет собой итерационный процесс, который продолжается до тех пор, пока не выполнятся заданное число поколений или какой-либо иной критерий останова. На каждом поколении ГА реализуется отбор пропорционально приспособленности, кроссовер и мутация.
Алгоритм работы простого ГА выглядит следующим образом:
Результаты эксперимента
Основные переменные, используемые при реализации алгоритма.
oldpop, newpop, intpop: population; | три непересекающихся популяции — старая, новая и промежуточная. |
opsize, lchrom, gen, maxgen: integer; | глобальные целые переменные. |
pcross, pmutation, sumfitness: real; | глобальные вещественные переменные. |
nmutation, ncross: integer; | статистические целые. |
avg, max, min, min1: real; | статистические вещественные. |
Весь алгоритм решения разбит на логические процедуры и функции, каждая их которых выполняет те или иные расчеты.
Основные подпрограммы:
Function rnd (low, high: Integer):Integer; {- cлучайный выбор между low и high}.
Procedure decode (chrom:chromosome; lbits: Integer; Var x: fenotype);
{- декодирование строки в массив вещественных координат точки в пространстве поиска — true=1, false=0}.
Procedure statistics (popsize:Integer; Var max, avg, min, sumfitness: Real; Var pop: population); {*** Расчет статистических величин ***}.
{*** Процедура инициализации (инициализация начальной популяции случайным образом) ***}.
Procedure initpop;
Procedure select; {- процедура отбора}.
Procedure generation;
{- генерирование нового поколения при помощи отбора, скрещивания и мутации}.
{Прим.: предполагается, что популяция имеет четный размер}.
Результат выполнения программы :
При 50 поколениях и размере популяции 10 особей среднее значение минимума функции в заданной области 0.84 571 793 507 888.
Наилучшее значение минимума функции в заданной области 0.443 960 465 983.
:
При 50 поколениях и размере популяции 20 особей среднее значение минимума функции в заданной области 0.102 085 411 779 220.
Наилучшее значение минимума функции в заданной области 0.443 960 465 983.
:
При 50 поколениях и размере популяции 30 особей среднее значение минимума функции в заданной области 0.157 094 040 787 855.
Наилучшее значение минимума функции в заданной области 0.443 960 465 983.
:
При 100 поколениях и размере популяции 10 особей среднее значение минимума функции в заданной области 0.139 601 413 202 977.
Наилучшее значение минимума функции в заданной области 0.443 960 465 983.
:
При 100 поколениях и размере популяции 20 особей среднее значение минимума функции в заданной области 0.95 127 753 861 539.
Наилучшее значение минимума функции в заданной области 0.397 285 517 399.
:
При 100 поколениях и размере популяции 30 особей среднее значение минимума функции в заданной области 0.162 433 199 925 989.
Наилучшее значение минимума функции в заданной области 0.397 285 517 399.
:
Для завершения программы нажмите ENTER.