o beginfitness
end;
{Нове значення min};;
{Процедура ініціалізації initpop} initpop;
{Ініціалізація початкової популяції випадковим чином}
var, j1: integer; j: = 1 to popsize do with oldpop [j] do beginj1: = 1 to lchrom * dim do chrom [j1]: = flip (0.5);
{Кидок монетки} (chrom, lchrom, x);
{Декодування рядка}: = objfunc (x);
{Обчислення початкових значень функції придатності};;
{3 генетичних оператора: відбору (select), схрещування (crossover) і
мутації (mutation)} select;
{процедура вибору}: integer; shuffle (var pop: population);
{процедура перемішування популяції в процесі відбору}
var, j: integer;: individual; i: = popsize downto 2 do begin: = random (i-1) +1;: = pop [i]; [i]: = pop [ j]; [j]: = ind0;;; select_1: integer;, j2, m: integer; (ipick> popsize) then (oldpop);: = 1;: = ipick;: = ipick +1; (oldpop [ j2]. fitness
{двоточкова мутація з імовірністю pmutation}
var: boolean;, point2: integer;: boolean;: = flip (pmutation);
{Flip the biased coin} mutate then begin: = rnd (1, flchrom);: = rnd (1, flchrom); point1 <> point2;: = chrom [point1]; [ point1]: = chrom [point2]; [point2]: = temp;
{обмін двох елементів};;
procedure crossover (var parent1, parent2, child1, child2: chromosome);
{рівномірний схрещування 2 батьківських рядків, результат поміщається
в 2 рядках-нащадках}: integer;
beginflip (pcross) then beginj: = 1 to flchrom do beginflip (0.5) then begin [j]: = parent1 [j]; [j]: = parent2 [j]; else begin [j ]: = parent2 [j]; [j]: = parent1 [j];;; (child1); (child2);
end;;
{Процедура створення нового покоління: generation} generation;
{Генерування нового покоління за допомогою відбору, схрещування і мутації}
{Прим: передбачається, що популяція має парний розмір}
var, mate1, mate2: integer;
begin;: = 1;
{виконуються відбір, схрещування і мутація, поки повністю не сформується
нова популяція - newpop}: = j;
{вибір батьківської пари}: = j +1;
{схрещування і мутація - мутація вставлена ​​в процедуру схрещування}
crossover (oldpop [mate1]. chro...