ran: =random (nCity-1);
gen: =mutant [ran] ; //
mutant [ran]: =mutant [ran+1] ; // мутируем
mutant [ran+1]: =gen; //
child [i]: =mutant;
end;
end;
END;
procedure TForm1. FirstGeneration (Sender: TObject);
var
i,j,ram: integer; // счетчики, рандомное значение
s: string; // строка маршрута
label lbl1; // метка
BEGIN
randomize;
for i: =0 to nMarsh-1 do // цикл формирования первого поколения
{1}begin
s: ='';
setlength (parents, i+1); // устанавливаем длину массива родителей
for j: =0 to nCity-1 do // цикл формирования строки маршрута
{2}begin
setlength (s,j+1); // устанавливаем длину строки маршрута
lbl1:
ram: =random (nCity); // случайный выбор номера города
if pos (IntToStr (ram),s) =0 then // проверка на повтор номера города
begin
insert (IntToStr (ram),s,1); // добавление номера города в строку маршрута
end
else goto lbl1; // переход на метку
{2}end;
parents [i]: =s; // заполняем массив родителей (первое поколение)
{1}end;
END;
procedure TForm1. CreaChildren (Sender: TObject);
var
i: integer; // счетчики
p,m: integer; // номера родителей
label lbl2;
BEGIN
randomize;
for i: =0 to round ( (nMarsh) *kCross) - 1 do // цикл создания пар
begin
setlength (child, i+1);
p: = random (nMarsh); // выбираем номер папы
lbl2:
m: = random (nMarsh); // выбираем номер мамы
if m=p then goto lbl2; // папа не мама
child [i]: =crossover (p,m); // создаем потомков
end;
END;
procedure TForm1. Image1Click (Sender: TObject);
begin
inc (nCity); // считаем города
end;
procedure TForm1. Image1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// // /
with Image1. Canvas do
begin
Brush. Color: =clRed;
Brush. Style: =bsSolid;
Rectangle (x-5,y-5,x+5,y+5);
Brush. Color: =clWhite;
TextOut (x,y, inttostr (nCity));
end;
// // /
SetLength (pX,nCity+1);
pX [nCity]: =x;
SetLength (py,nCity+1);
pY [nCity]: =y;
// // /
end;
procedure TForm1. Button1Click (Sender: TObject);
var
i,nPokol: integer;
begin
nMarsh: =StrToInt (Edit3. Text);
kMut: =StrToFloat (Edit2. Text);
kCross: =StrToFloat (Edit4. Text);
nPokol: =StrToInt (Edit5. Text);
FirstGeneration (sender);
for i: =1 to nPokol do
begin
CreaChildren (sender);
Mutation (sender);
Mixer (sender);
DrawMarsh (sender);
end;
end;
end.