E + 00001.181E - 00028082.112E + 00001.610E + 0000129.131E - 00017.597E - 0002205.579E - 00014.632E- 0002
Висновки В результаті тестування програми можна зробити висновок, що на точність результату впливають такі чинники: кількість поколінь і кількість особин.
Так, чим більше особин бере участь в генетичному відборі (більший розмір популяції)), тим більш точний виходить результат; чим більша кількість поколінь живуть особини, тим точніше виходить результат.
Після зіставлення двох факторів впливу: розміру популяцій і числа поколінь можна зробити з отриманих результатів можна зробити висновок, що найбільший вплив на точність результату надає число поколінь, тому що чим більше покоління, тим краще значення має функція придатності.
Література
1. Змитрович А. І. Інтелектуальні інформаційні системи.- Мн.: ТетраСистемс, 1997. - 368 с.
. Батищев Д. А. Генетичні алгоритми вирішення екстремальних завдань.- Воронеж: Вид.-во ВГТУ, 1995.
. Ємельянов В. В., Курейчик В. В., Курейчик В. М. Теорія і практика еволюційного моделювання.- М.: Фізматліт, 2003. - 432 с.
Додаток
Genetic; Crt;
const=30; {Кількість прогонів}=100; {Максимальне число поколінь}=20; {Число бітів на один кодується параметр}=2; {Розмірність простору пошуку}=40; {Кількість поколінь}=80;=8; {Розмір популяції}=12;=20;=0.01; {Імовірність схрещування}=0.9; {Імовірність мутації}=boolean; {Алель - позиція в бітової рядку}
Chromosome=array [1..LenChrome * Dim] of Allele; {Бітова рядок}=array [1..Dim] of double;=record: Chromosome; {Генотип=бітова рядок}
x: Fenotype; {Фенотип=масив дійсних координат точки в просторі пошуку}: double; {Значення цільової функції}
end;=array [1..maxpop] of Individual;
const
{масив максимальних значень для координат точки в просторі пошуку}: Fenotype=(2.048, 2.048);
{масив мінімальних значень для координат точки в просторі пошуку}: Fenotype=(- 2.048, - 2.048);
{Три непересічних популяції - стара, нова і проміжна}, NewPop, IntPop: Population;
{Глобальні цілі змінні}
PopSize, Gen, h, s, b: integer;
{Лічильники мутацій, схрещувань і кількість поколінь}, NCross, NGen: integer;
{Статистичні змінні}
Avg, Min, Max, BestMin, Result, SumFitness: double;
{Функція} ObjFunc (x: Fenotype): double;:=100 * Sqr (Sqr (x [1]) - Sqr (x [2])) + Sqr (1 - x [1 ]);
end;
{Підкидання монетки - true якщо орел}
function Flip (Probability: double): boolean;:=Random lt;=Probability ;;
{Декодування рядка в масив дійсних координат у просторі пошуку}
procedure Decode (Chrom: Chromosome; var x: fenotype); i, j, f, accum: longint; i:=1 to Dim do:=0;:=1; j:=1 + LenChrome * (i - 1) to LenChrome + LenChrome * (i - 1) doChrom [j] then Inc (Accum, f);:=f * 2 ;; [i]:=xmin [i] + (xmax [ i] - xmin [i]) * Accum/(f - 1);
end;
{Розрахунок статистичних величин}
procedure Statistics (var Max, Avg, Min: double; Pop: Population); j: integer ;: double;:=Pop [1] .Fitness;:=Pop [1] .Fitness; :=Pop [1] .Fitness; j:=2 to PopSize do
with Pop [j] do
{Накопичення суми значень функції придатності}
SumFitness:=SumFitness + Fitness; Fitness gt; Max then Max:=Fitness; {Нове значення Max} Fitness lt; Min then Min:=Fitness; {Нове значення Min};:=SumFitness/PopSize; {Розрахунок середнього}
end;
{Ініціалізація початкової популяції випадковим чином}
procedure InitPop; i, j: integer; i:=1 to PopSize doOldPop [i] doj:=1 to LenChrome * Dim do [j]:=Flip (0.5); {Кидок монети}
Decode (Chrom, x); {Декодування рядки}
{Обчислення початкових значень функції придатності}
Fitness:=ObjFunc (x) ;;;
{Оператор відбору (селекції)} Select; ipick, i: integer;
{Процедура перемішування популяції в процесі відбору}
procedure Shuffle (var pop: Population) ;, j: integer ;: Individual; i:=1 to PopSize do:=1 + Random (i);
{Перемішуємо}:=pop [i]; [i]:=pop [j]; [j]:=ind0 ;;;
{В...