Mam wielka prośbe...
Pisze maly programik z algorytmów genetycznych i nie wiem dlaczego ale program dosc czesto mi sie wiesza, tak jak by sie gdzies zapetlal :/ bede wdzieczny za wszelkie wskazowki na temat ewentualnych bledow w moim programiku
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
RichEdit1: TRichEdit;
EChrom1: TEdit;
EChrom2: TEdit;
EChrom3: TEdit;
EChrom4: TEdit;
EChrom0: TEdit;
Eliczbaiter: TEdit;
Eliczbamut: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
chromosom: array [0..4] of string;
tab_krzyzowania: array [0..4,0..1] of string;
chromosomInt: array [0..4] of integer;
sum_przystInt, przedz0,przedz1,przedz2,przedz3,przedz4, losowanie,para,cut:integer;
make_chrom:string;
implementation
{$R *.dfm}
function BinToInt(chromosom : string) : Integer;
begin
BinToInt:=StrToInt(copy(chromosom,1,1))*16+StrToInt(copy(chromosom,2,1))*8+StrToInt(copy(chromosom,3,1))*4+StrToInt(copy(chromosom,4,1))*2+StrToInt(copy(chromosom,5,1))*1;
end;
function wart_f (x :integer) : integer;
begin
wart_f:=2*x;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j :integer;
begin
RichEdit1.Clear;
for i:=0 to 4 do
begin
randomize;
chromosom[i]:=IntToStr(random(2))+IntToStr(random(2))+IntToStr(random(2))+IntToStr(random(2))+IntToStr(random(2));
end;
EChrom0.Text:=Chromosom[0];
EChrom1.Text:=Chromosom[1];
EChrom2.Text:=Chromosom[2];
EChrom3.Text:=Chromosom[3];
EChrom4.Text:=Chromosom[4];
for j:=1 to 100 do //bez tej petli zawiesza mi sie raz na 30 a z nia prawie za kazdym razem
begin
for i:=0 to 4 do
begin
chromosomInt[i]:=BinToInt(Chromosom[i]);
RichEdit1.Lines.Add(Chromosom[i]+'->'+IntToStr(chromosomInt[i]));
end;
RichEdit1.Lines.Add('**********************');
sum_przystInt:=0;
for i:=0 to 4 do
begin
sum_przystInt:=sum_przystInt+wart_f(ChromosomInt[i]);
end;
//RichEdit1.Lines.Add(IntToStr(sum_przystInt));
przedz0:=wart_f(ChromosomInt[0]);
przedz1:=przedz0+wart_f(ChromosomInt[1]);
przedz2:=przedz1+wart_f(ChromosomInt[2]);
przedz3:=przedz2+wart_f(ChromosomInt[3]);
przedz4:=przedz3+wart_f(ChromosomInt[4]);
for i:=0 to 4 do
begin
losowanie:=random(sum_przystInt)+1;
//RichEdit1.Lines.Add('wylosowano '+IntToStr(losowanie));
if (losowanie>0) AND (losowanie<=przedz0) then
begin
tab_krzyzowania[i,0]:=Chromosom[0];
RichEdit1.Lines.Add(chromosom[0])
end
else if (losowanie>przedz0) AND (losowanie<=przedz1) then
begin
tab_krzyzowania[i,0]:=Chromosom[1];
RichEdit1.Lines.Add(chromosom[1])
end
else if (losowanie>przedz1) AND (losowanie<=przedz2) then
begin
tab_krzyzowania[i,0]:=Chromosom[2];
RichEdit1.Lines.Add(chromosom[2])
end
else if (losowanie>przedz2) AND (losowanie<=przedz3) then
begin
tab_krzyzowania[i,0]:=Chromosom[3];
RichEdit1.Lines.Add(chromosom[3])
end
else if (losowanie>przedz3) AND (losowanie<=przedz4) then
begin
tab_krzyzowania[i,0]:=Chromosom[4];
RichEdit1.Lines.Add(chromosom[4])
end;
end;
for i:=0 to 4 do
begin
repeat
begin
para:=random(5);
tab_krzyzowania[i,1]:=tab_krzyzowania[para,0];
end
until tab_krzyzowania[i,0]<>tab_krzyzowania[i,1];
end;
for i:=0 to 4 do
begin
cut:=random(5)+1;
Chromosom[i]:=copy(tab_krzyzowania[i,0],1,cut)+copy(tab_krzyzowania[i,1],cut+1,5-cut);
end;
end;
end;
end.