Вы находитесь на странице: 1из 6

Инструментальные средства ГА

Цель работы: изучение основ работы с Genetic Algorithm, исследование


экстремумов функций с помощью генетических алгоритмов.

Теоретическая часть

Генетические алгоритмы – это метод решения оптимизационных задач,


основанный на биологических принципах естественного отбора и эволюции.
Генетический алгоритм повторяет определенное количество раз процедуру
модификации популяции (набора отдельных решений), добиваясь тем самым
получения новых наборов решений (новых популяций). При этом на каждом шаге из
популяции выбираются «родительские особи», то есть решения, совместная
модификация которых (скрещивание) и приводит к формированию новой особи в
следующем поколении. Генетический алгоритм использует три вида правил, на
основе которых формируется новое поколение: правила отбора, скрещивания и
мутации. Мутация позволяет путем внесения изменений в новое поколение
избежать попадания в локальные минимумы оптимизируемой функции.
Данные алгоритмы основаны на принципах естественного отбора Ч. Дарвина и
предложены относительно недавно – в 1975 году Джоном Холландом. В них
используются как аналог механизма генетического наследования, так и аналог
естественного отбора. При этом сохраняется биологическая терминология в
упрощенном виде и основные понятия линейной алгебры.
Генетические алгоритмы оптимизации являются алгоритмами случайно-
направленного поиска и применяются в основном там, где сложно или невозможно
сформулировать задачу в виде, пригодном для более быстрых алгоритмов локальной
оптимизации, либо если стоит задача оптимизации недифференцируемой функции
или задача многоэкстремальной глобальной оптимизации.
Основной идеей ГА является организация «борьбы за существование» и
«естественный отбор» среди пробных (примерных) решений задачи. Поскольку ГА
используют биологические аналогии, то применяющаяся терминология напоминает
биологическую.
Основными параметрами ГА являются:
- вероятность мутации;
- точность получения результата;
- количество итераций алгоритма или количество поколений;
- размер популяции.
Генетический алгоритм работает согласно следующей схеме, представленной
на рисунке 1.

Рисунок 1 – Схема работы генетического алгоритма

Условия останова алгоритма:


Для определения условий останова в генетическом алгоритме используются
следующие пять условий:
- Generations – алгоритм останавливается тогда, когда число поколений
достигает некоего заданного значения Generations.
- Time limit – алгоритм останавливается по истечению некоего заданного
времени в секундах Time limit.
- Fitness limit – алгоритм останавливается тогда, когда значение функции
пригодности для наилучшей точки для текущего семейства будет меньше или равно
Fitness limit.
- Stall generations – алгоритм останавливается в случае, если нет улучшения
для целевой функции в последовательности следующих друг за другом поколений
длиной Stall generations.
- Stall time limit – алгоритм останавливается в случае, если нет улучшения для
целевой функции в течение интервала времени в секундах равного Stall time limit.
После процесса воспроизводства происходят мутации. Данный оператор
необходим для «выбивания» популяции из локального экстремума и препятствует
преждевременной сходимости. Это достигается за счет того, что изменяется
случайно выбранный ген в хромосоме.
Опция Scale управляет стандартным среднеквадратичным отклонением на
первой итерации, которое равно параметру Scale, умноженному на ранг исходного
семейства, задаваемого с помощью опции Initial range.
Опция Shrink управляет скоростью уменьшения среднего числа мутаций.
Стандартное среднеквадратичное отклонение линейно уменьшается до тех пор, пока
его конечное значение будет равно 1 – Shrink от его начального значения для
первого поколения.
Кроссовер (скрещивание) – это операция, при которой из двух хромосом
порождается одна или несколько новых хромосом.

Ход работы

1 Написали M-файлы для функций одной и двух переменных и сохранили их


под именем rozenbr_fun.m.
а) function y = rozenbr_fun(x);
y= -2*x-8+3*(6*(x+4))^(2/3);
б) function f = rozenbr_fun(x);
n=2;
i=1:n;
f=sum((abs(x))^(i+1));
2 Для запуска пакета Genetic Algorithm Tool выполнили команду optimtool.
После этого запустился пакет генетических алгоритмов и на экране появилось
основное окно утилиты.
3 Ввели в поле Fitness function название функции, записанной в М-файл.
4 Ввели в поле Number of variables число независимых переменных для
функции.
5 В панели Options ввели необходимые для работы параметры и запусти ГА,
щелкнув по кнопке start.
6 Результаты работы ГА занесли в таблицы 1 и 2.

Таблица 1 – Результаты работы ГА для функции одной переменной

Размер начальной популяции


10 50 100 500 1000
Вероят 1 X1=-8,506 X1=-8,507 X1=-8,506 X1=-8,508 X1=-8,5068
ность F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
кроссо 0.006076790 -4.69821593 5.677015385 1.284712298 8.933990264
вера 117031303 5083749E-5 14666E-5 363926E-7 872077E-8

0 X1=-8,503 X1=-8,505 X1=-8,505 X1=-8,506 X1=-8,504


, F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
8 9.359528569 1.129030502 1.854035502 1.895127065 6.243323996
322848E-4 893491E-4 0201454E-5 8698549E-6 745607E-7
0 X1=-8,507 X1=-8,504 X1=-8,505 X1=-8,505 X1=-8,505
, F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
6 0.095925257 3.444432655 1.784817658 1.915471897 2.024166408
07368193 9764164E-4 330012E-4 898511E-7 2698005E-7

0 X1=-8,506 X1=-8,504 X1=-8,504 X1=-8,504 X1=-8,506


, F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
3 0.017212262 3.301257444 3.678599357 3.883688389 1.211808514
67213842 343489E-5 144739E-5 86192E-8 854563E-8

0 X1=-8,506 X1=-8,506 X1=-8,507 X1=-8,506 X1=-8,507


F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
0.258011867 0.072853657 0.007967144 0.014430974 0.007529579
28712455 33230977 798433391 76659069 195028863
Таблица 2 – Результаты работы ГА для функции двух переменных

Размер начальной популяции


10 50 100 500 1000
Вероят 1 X1=-0 X1=0 X1=0 X1=0 X1=0
ность Х2=-0,007 Х2=-0,001 Х2=0 Х2=0 Х2=-0
кроссо F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
вера 3.1777611104 -1.16271466 3.810642448 9.526487451 3.398426771
4001E-7 31352646E-9 079547E-12 697445E-19 181315E-18
0 0 0 0 0 0
, Х2=0,01 Х2=0,001 Х2=0 Х2=0 Х2=0
8 F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
1.2148502934 3.670049827 1.259318533 1.290890964 1.655146034
392222E-6 089017E-9 5469934E-10 82782E-15 4627987E-18
0 0,001 0 0 0 -0
, Х2=-0,06 Х2=0 Х2=0 Х2=0 Х2=0
6 F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
2.1612353337 1.229252310 1.284301098 1.936161669 1.214981790
0192E-4 932588E-11 2815786E-12 4621264E-18 0947185E-17
0 -0,011 0 0 0 -0
, Х2=0,013 Х2=0,001 Х2=0,001 Х2=0 Х2=0
3 F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
1.1983875935 5.846160174 1.407830693 7.197234778 1.138731092
764703E-4 478505E-10 6929727E-9 958659E-16 3752954E-21
0 0,044 -0,009 -0,006 -0,001 0
Х2=0,053 Х2=0,048 Х2=-0,013 Х2=-0,042 Х2=0
F(x1)= F(x1)= F(x1)= F(x1)= F(x1)=
0.0021131991 1.954391081 3.726713100 7.323504704 8.313776089
092898654 386171E-4 1572336E-5 082656E-5 417925E-6

7 Нашли через командное окно минимумы заданных функций.


a) x = fminbnd('-2*x-8+3*(6*(x+4))^(2/3)',-100,100);
x = -8,5.
б) x=fminsearch('rozenbr_fun',[0 0]);
ans = 0,0.
Минимумы совпали с результатами, полученными через Genetic Algorithm
Tool.

Вывод: изучили основы работы с Genetic Algorithm, исследовали экстремумы


функций с помощью генетических алгоритмов. Результаты, полученные через
командное окно и с помощью ГА совпали, следовательно мы нашли глобальные
минимумы функций.