Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
{$R-}
Halaman1dari10
: : : : : :
real; {variables used in testing of the code} integer; {ditto} char; text; param_array_; param_rec_;
PROCEDURE wait;
BEGIN tinch := readkey; END;
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman2dari10
PROCEDURE demo;
CONST max_k = 999; mach_inf = 1E37; (* k = 49; goal = 3.141592653589793; error_level = 4096; mutation_threshold = 0.7; cross2invers = 0.7; transcribe = 0.7; debug : boolean = FALSE; TYPE byte_map_ population_ out_rec_
{carrying capacity - 1} {smaller carrying capacity = faster generations} {the value to strive for} {goal is arbitrary, change to whatever you like} {inverse of amount of error allowed in goal completion} {probability that chromosome will not undergo mutation} {probability that reproduction method will be crossover as opposed to inversion} {1 - probability that transcription occurs} *)
VAR k goal error_level mutation_threshold cross2invers transcribe generation_number max_generations pop sel_dist how_far success, finish close_enough ii, jj how_close outf inch raoutf tstr1, tstr2 str1 fom
: : : : : : : : : : : : : : : : : : : : :
integer; real; integer; real; real; real; integer; real; population_; array[0..max_k] of real;
{count of generations} {frustration capacity} {current candidates} {probability of each candidate to reproduce one time} array[0..max_k] of real; {distance of candidate from goal} boolean; real; {range about goal that fulfills the requirements} integer; real; text; char; file of out_rec_; out_rec_; string[80]; real; {Figure Of Merit: Improvement over average random search}
PROCEDURE initialize;
VAR ii, jj : integer; rr, ss : real; BEGIN k goal error_level mutation_threshold cross2invers transcribe generation_number success close_enough
:= := := := := := := := :=
params.k - 1; {adjust for base zero} params.g; params.e; params.m; params.c; params.t; 1; false; goal / error_level;
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman3dari10
rr := error_level; FOR jj := 1 TO 9 DO rr := rr * 2; {have to match sign and exponent bits as well} max_generations := rr / (k+1) / 2.0; writeln('Maximum # of generations = ',max_generations:8:3); {k is base zero; average random search will find in n/2 experiments} randomize; END;
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman4dari10
PROCEDURE generate_selectionist_distribution;
VAR sum_distance : real; ii, jj : integer; dist : real; BEGIN sum_distance := 0.0; FOR ii := 0 TO k DO BEGIN dist := ln(distance(ii)); sel_dist[ii] := 1- (1 /(1+exp(- dist))); sum_distance := sum_distance + sel_dist[ii]; END; IF debug THEN writeln('Population: Selectionist Distribution: '); FOR ii := 0 TO k DO BEGIN sel_dist[ii] := sel_dist[ii] / sum_distance; IF debug THEN writeln(pop[ii]:12:6,' ',sel_dist[ii]:12:6); END; IF debug THEN writeln; END;
PROCEDURE evaluate_population;
VAR ii : integer; rr : real; BEGIN FOR ii := 0 TO k DO how_far[ii] := distance(ii);
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman5dari10
: real; : chromosome_);
:= := := := := := := :=
1 1 1 1 1 1 1 1
:= := := := := := := :=
0; 0; 0; 0; 0; 0; 0; 0;
: real; : chromosome_);
br;
+ + + +
* * * *
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman6dari10
PROCEDURE crossover(
VAR ii, split, jj : integer; BEGIN zygote := gene1; FOR ii := start TO (start + length) DO BEGIN jj := ii mod 48; zygote [jj] := gene2 [jj]; END; END;
PROCEDURE inversion (
VAR ii, split, jj, kk : integer; BEGIN zygote := gene1; jj := length + 48; FOR ii := start TO (start + length) DO BEGIN zygote [jj mod 48] := gene2 [ii mod 48]; jj := jj - 1; END; END;
PROCEDURE mutation (
VAR ii : integer; BEGIN IF gene1[position] > 0 THEN gene1[position] := 0 ELSE gene1[position] := 1; END;
: chromosome_; : integer);
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman7dari10
BEGIN {generate_offspring}
{have not yet included transcription} phenotype_to_genotype(par1,c1); phenotype_to_genotype(par2,c2); rr := random; IF (rr > mutation_threshold) THEN mutation(c1,random(48)); rr := random; IF (rr > mutation_threshold) THEN mutation(c2,random(48)); rr := random; IF (rr > transcribe) THEN BEGIN phenotype_to_genotype(pop[random(k+1)],c3); rr := random(2); IF (rr = 0) THEN transcription(c1,c3,c1,random(48),random(24)) ELSE transcription(c2,c3,c2,random(48),random(24)); END; rr := random; IF (rr > cross2invers) THEN inversion(c1, c2, cz, random(48), random(48)) ELSE crossover(c1, c2, cz, random(48), random(48)); print_genotype(c1); print_genotype(c2); print_genotype(cz); genotype_to_phenotype(rr, cz); generate_offspring := rr;
END; {generate_offspring}
BEGIN {generate_new_population}
{ writeln('New population made by: ');} FOR ii := 0 TO k DO BEGIN finished := false; jj := 0; p1 := find_parent(random); p2 := find_parent(random); pr1 := pop[p1]; pr2 := pop[p2]; IF debug THEN write(pr1:8:5,' x ',pr2:8:5); new_pop[ii] := generate_offspring(pr1,pr2); IF debug THEN writeln(' = ',new_pop[ii]:8:5); END; IF debug THEN writeln; pop := new_pop;
END; {generate_new_population}
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman8dari10
PROCEDURE report;
{give out lines that indicate population distribution} VAR ii, jj : integer; ss : real; fdist : array[-38..38] of integer;
BEGIN {report}
fillchar(fdist,sizeof(fdist),0); (* FOR ii := 0 TO k DO BEGIN jj := signum(pop[ii])*order_of_magnitude(abs(pop[ii])); writeln(jj); fdist[jj] := fdist[jj] + 1; END; *) { IF ((generation_number mod 10) = 0) THEN writeln('Generation ',generation_number);} FOR ii := -38 TO 38 DO BEGIN IF debug THEN BEGIN IF fdist[ii] < 1 THEN write('_') ELSE IF fdist[ii] > 9 THEN write('^') ELSE write(fdist[ii]:1); END; END; IF debug THEN BEGIN writeln; writeln('0 E1 writeln; END;
E38');
END; {report}
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman9dari10
BEGIN {demo}
initialize; generate_starting_population; REPEAT evaluate_population; generate_selectionist_distribution; finish := done; IF not finish THEN BEGIN generate_new_population; report; writeln('Within ',(how_close/goal*100):8:5, '% of goal condition in generation ',generation_number); generation_number := generation_number + 1; END; UNTIL (finish); {$I-} assign(raoutf,'garesult.dat'); reset(raoutf); CASE IOResult OF $02 : BEGIN Assign(RaOutF,'GARESULT.DAT'); Rewrite(RaOutF); END; END; {$I+} seek(raoutf,filesize(raoutf)); {go to end of file} fillchar(tstr1,sizeof(tstr1),' '); fom := max_generations / generation_number; str((k+1),str1); tstr1.s := 'K:' + str1; str(goal:12:8,str1); tstr1.s := tstr1.s + ' G:' + str1; str(error_level,str1); tstr1.s := tstr1.s + ' E:' + str1; str(mutation_threshold:5:3,str1); tstr1.s := tstr1.s + ' M:' + str1; str(cross2invers:5:3,str1); tstr1.s := tstr1.s + ' CI:' + str1; str(transcribe:5:3,str1); tstr1.s := tstr1.s + ' T:' + str1; str(fom:8:3,str1); tstr1.s := tstr1.s + ' FOM:' + str1; tstr1.s[79] := CR; tstr1.s[80] := LF; write(raoutf,tstr1); writeln(tstr1.s); fillchar(tstr1,sizeof(tstr1),' '); IF success THEN BEGIN tstr1.s := 'Achieved goal in generation '; str(generation_number:6,str1); tstr1.s := tstr1.s + str1; tstr1.s[79] := CR; tstr1.s[80] := LF; write(raoutf,tstr1); writeln(tstr1.s); END ELSE BEGIN tstr1.s := 'No better than ave. random search '; str(max_generations:16:0,str1); tstr1.s := tstr1.s + str1; write(raoutf,tstr1); writeln(tstr1.s); END; close(raoutf);
END; {demo}
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya
ContohProgramAlgoritmaGenetikauntukMenebakSebuahBilanganReal
Halaman10dari10
www.hansmichael.comMateriKuliah#8AlgoritmaGenetika(Edisi16Juli2007)I3Surabaya