{{\def\dash{\raise2.1pt\hbox{\rule{5pt}{0.3pt}}\hspace{1pt}}\begin{tabbing}
{\textit{\%\ Simulationsumgebung\ für\ den\ Wabenbau\ sozialer\ Insekten}}\\
\\
{\textbf{global}}\ DX;\\
{\textbf{global}}\ DY;\\
{\textbf{global}}\ Wabengitter;\\
{\textbf{global}}\ Knotenzahl;\\
{\textbf{global}}\ zeit;\\
{\textbf{global}}\ Grenzen;\\
{\textbf{global}}\ MittelPunkte;\\
{\textbf{global}}\ MittelWabe;\\
{\textbf{global}}\ raumplot;\\
{\textbf{global}}\ bebautezellen;\\
{\textbf{global}}\ wespenanzahl;\\
{\textbf{global}}\ numberofruns;\\
{\textbf{global}}\ numberofgaruns;\\
{\textbf{global}}\ gadurchlauf;\\
{\textbf{global}}\ animation;\\
\\
DX\ =\ 41;\ {\textit{\%\ Breite\ des\ Gitters}}\\
DY\ =\ 41;\ {\textit{\%\ Höhe\ des\ Gitters}}\\
wespenanzahl\ =\ uint8(1);\ {\textit{\%\ Zahl\ der\ aktiven\ Agenten}}\\
MaxSteps\ =\ uint32(200);\ {\textit{\%\ Zahl\ der\ Schritte\ pro\ Simulationslauf}}\\
numberofruns\ =\ uint8(100);\ {\textit{\%\ Zahl\ der\ Simulationsl�?ufe\ vor\ Anwendung\ des\ GA}}\\
numberofgaruns\ =\ uint8(100);\ {\textit{\%\ Zahl\ der\ Durchl�?ufe\ des\ GA}}\\
animation\ =\ false;\\
\\
{\textbf{for}}\ gadurchlauf=uint8(1):numberofgaruns\\
close\ all;\ {\textit{\%\ schließt\ alle\ vorherigen\ Fenster}}\\
\\
{\textbf{for}}\ run=uint8(1):numberofruns\\
\ \ \ \ \\
Wabengitter\ =\ hextop(DX,DY);\ {\textit{\%\ Erzeugen\ des\ hexagonalen\ Gitters}}\\
{\textit{\%\ Struktur\ der\ Matrix:}}\\
{\textit{\%\ Zeile\ 1:\ X\dash{}Koordinate\ des\ Knotenpunkts}}\\
{\textit{\%\ Zeile\ 2:\ Y\dash{}Koordinate\ des\ Knotenpunkts}}\\
{\textit{\%\ Zeile\ 3:\ Markierung,\ ob\ Knotenpunkt\ Wabenmittelpunkt\ ist\ (1/0)}}\\
{\textit{\%\ Zeile\ 4:\ Belegung\ des\ Feldes\ (0\ =\ leer,\ 1\ =\ Baustein\ Typ\ 1,\ ...)}}\\
\\
\\
Knotenzahl\ =\ size(Wabengitter,2);\ \\
\\
Position\ =\ DX\ +\ 2;\ {\textit{\%\ Initialisierung\ \dash{}\ erster\ Wabenmittelpunkt}}\\
\\
\ \ \ \ \ \ \ \ \\
{\textit{\%\ Algorithmus\ zur\ Markierung\ der\ Wabenmittelpunkte}}\\
{\textit{\%\ \dash{}\ legt\ eine\ dritte\ Zeile\ in\ der\ Matrix\ Wabengitter\ an\ und\ markiert\ jeden}}\\
{\textit{\%\ Knotenpunkt,\ der\ einem\ Wabenmittelpunkt\ entspricht,\ mit\ einer\ 1}}\\
\\
{\textbf{for}}\ Position=DX+2:3:2$\ast$DX\dash{}1\ {\textit{\%\ die\ zweite\ Reihe\ vom\ zweiten\ bis\ zum\ vorletzten\ Element}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ mit\ horizontalem\ Abstand\ 3}}\\
\ \ \ \ Position2\ =\ Position;\\
\ \ \ \ {\textbf{while}}\ Position2\ $<$\ (Knotenzahl\ \dash{}\ DX)\ {\textit{\%\ oberste\ Zeile\ ausschließen}}\\
\ \ \ \ \ \ \ \ \ \ Wabengitter(3,Position2)\ =\ 1;\ {\textit{\%\ Setze\ Markierung\ für\ Mittelpunkt}}\\
\ \ \ \ \ \ \ \ \ \ Position2\ =\ Position2\ +\ 2\ $\ast$\ DX;\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ Position2\ =\ Position\ +\ DX\ +\ 2;\\
\ \ \ \ {\textbf{if}}\ (mod(Position2,DX)\ $>$\ 1)\ \&\&\ (mod(Position2,DX)\ $<$\ DX)\ \\
\ \ \ \ \ \ \ {\textbf{while}}\ Position2\ $<$\ Knotenzahl\ \dash{}\ DX\\
\ \ \ \ \ \ \ \ \ \ \ \ \ Wabengitter(3,Position2)\ =\ 1;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ Position2\ =\ Position2\ +\ 2$\ast$DX;\\
\ \ \ \ \ \ \ {\textbf{end}}\ \ \ \ \\
\ \ \ \ {\textbf{end}}\ \ \\
{\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
MittelPunkte\ =\ find(Wabengitter(3,:));\ \\
\ \ {\textit{\%\ erzeugt\ einen\ Vektor\ mit\ Indizes\ der\ Wabenmittelpunkte}}\\
Grenzen\ =\ max(Wabengitter,{[}{]},2);\ \\
\ \ {\textit{\%\ ereugt\ einen\ Vektor,\ der\ die\ Endkoordinaten\ des\ Gitters\ enth�?lt}}\\
MittelWabe\ =\ MittelPunkte(ceil(length(MittelPunkte)\ /\ 2));\\
\ \ {\textit{\%\ Index\ der\ ann�?hernd\ mittleren\ Wabe\ (Ausgangspunkt\ für\ die\ Simulation)}}\\
mittelnachbarn\ =\ nachbarn(MittelWabe);\\
Wabengitter(4,MittelWabe)\ =\ 1;\ {\textit{\%\ Baustein\ vom\ Typ\ 1\ an\ Mittelpunkt\ gesetzt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Wird\ als\ Anfangspunkt\ benötigt}}\\
{\textbf{for}}\ nachbarindex=1:6\\
\ \ \ \ Wabengitter(4,mittelnachbarn(nachbarindex))\ =\ 1;\\
{\textbf{end}}\ {\textit{\%\ die\ sechs\ direkten\ Nachbarn\ des\ Mittelpunkts\ werden\ als\ bebaut\ markiert}}\\
\\
\ \ {\textbf{if}}\ (gadurchlauf\ ==\ numberofgaruns)\ {\textit{\%\ nur\ beim\ letzten\ Durchlauf\ grafisch\ anzeigen}}\\
\ \ \ \\
\ \ \ \ \ \ close\ all;\ {\textit{\%\ schließt\ alle\ Fenster\ \dash{}\ Fix\ um\ Absturz\ zu\ verhindern}}\\
\ \ \ \ \ \ \\
scrsz\ =\ get(0,{\texttt{{'}ScreenSize{'}}});\\
{\textit{\%\ erzeuge\ figure\ für\ die\ graphische\ Anzeige}}\\
visual\ =\ figure({\texttt{{'}Name{'}}},{[}{\texttt{{'}GA\ {'}}}\ num2str(gadurchlauf)\ {\texttt{{'}\ RS\ {'}}}\ num2str(run){]},\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}Position{'}}},{[}1\ scrsz(4)\ scrsz(3)\ scrsz(4){]},\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}NumberTitle{'}}},{\texttt{{'}off{'}}});\\
raumplot\ =\ gca;\\
hold\ on;\ {\textit{\%\ verhindern,\ dass\ gezeichnetes\ wieder\ gelöscht\ wird}}\\
\\
\\
\\
view(3);\ {\textit{\%\ Betrachtungswinkel\ einstellen}}\\
axis(raumplot,{\texttt{{'}manual{'}}});\\
set(raumplot,\ {\texttt{{'}DataAspectRatio{'}}},\ {[}1\ 1\ 1{]}\ );\ {\textit{\%\ ,\ ...}}\\
\ \ \ \ \ \ \ \ \ {\textit{\%\ {'}PlotBoxAspectRatio{'},\ {[}1\ 1\ 1{]}\ );}}\\
axis(raumplot,{[}\dash{}2\ (Grenzen(1)+2)\ \dash{}2\ (Grenzen(2)+2){]});\\
camlight({\texttt{{'}right{'}}});\\
camproj({\texttt{{'}perspective{'}}});\\
lighting\ gouraud;\\
\\
{\textit{\%\ leeres\ Gitter\ anzeigen}}\\
plotgitter(Wabengitter,\ raumplot);\\
plotwabe(MittelWabe,\ raumplot,\ 8);\ {\textit{\%\ die\ Anfangswabe\ wird\ markiert}}\\
{\textbf{for}}\ nachbarindex=1:6\\
\ \ \ \ plotwabe(mittelnachbarn(nachbarindex),\ raumplot,\ 8);\\
{\textbf{end}}\ {\textit{\%\ die\ sechs\ unmittelbaren\ Nachbarzellen\ der\ Mittelwabe\ werden\ auch\ gesetzt}}\\
\ \ \ \ {\textit{\%\ verhindert\ die\ Notwendigkeit\ einer\ Einserregel}}\\
\ \ {\textbf{end}}\\
\\
\\
\\
{\textit{\%\ wespe(numberofruns,wespenanzahl)\ =\ bauagent({[}1.0\ 1.0{]},\ 1);\ \%\ array\ preallocation}}\\
\\
{\textbf{if}}\ (gadurchlauf\ ==\ 1)\ {\textit{\%\ nur\ im\ ersten\ Durchlauf\ des\ GA\ }}\\
\ \ \ \ \\
\ \ \ \ {\textbf{for}}\ nummer=uint8(1):wespenanzahl\\
\ \ \ \ \ \ \ \ wespe(run,nummer)\ =\ bauagent(Wabengitter(1:2,\ MittelWabe){'},\ nummer);\ \\
\ \ \ \ \ \ \ \ {\textit{\%\ erzeugt\ ein\ Objekt\ der\ Klasse\ Bauagent\ auf\ den\ Koordinaten}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ der\ mittleren\ Wabe}}\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ {\textit{\%\ erzeugt\ die\ durch\ wespenanzahl\ festgelegte\ Menge\ von\ Objekten\ der}}\\
\ \ \ \ {\textit{\%\ Klasse\ {'}agent{'}}}\\
\ \ \ \ {\textbf{global}}\ wespe;\\
{\textbf{else}}\\
\ \ \ \ {\textbf{for}}\ nummer=uint8(1):wespenanzahl\\
\ \ \ \ \ \ \ \ wespe(run,nummer).BuildCounter\ =\ 0;\\
\ \ \ \ \ \ \ \ wespe(run,nummer).Position\ =\ Wabengitter(1:2,\ MittelWabe){'};\\
\ \ \ \ {\textbf{end}}\\
{\textbf{end}}\\
\\
\ \ \\
\\
\\
\\
{\textit{\%\ Simulationsstart}}\\
bebautezellen\ =\ find(Wabengitter(4,:));\ {\textit{\%\ Update\ der\ Liste\ der\ Indizes\ aller\ bebauten\ Zellen}}\\
\\
grafik\ =\ gcf;\\
{\textit{\%\ moviefile\ =\ avifile({'}simulation\_04.avi{'});}}\\
{\textit{\%\ moviefile.Quality\ =\ 100;}}\\
{\textit{\%\ moviefile.fps\ =\ 5;}}\\
\\
\\
\ \ \ \ {\textbf{for}}\ zeit=uint32(1):MaxSteps\ {\textit{\%\ aktuelle\ Simulationszeit\ als\ Integerwert\ \dash{}\ wird\ in\ jedem\ Zeitschritt\ um\ 1\ erhöht\ }}\\
\ \ \ \ \ \ \ \ {\textbf{for}}\ wespennummer=uint8(1):wespenanzahl\\
\ \ \ \ \ \ \ \ \ \ \ \ wespe(run,wespennummer).movebuild();\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ plotwaben(Wabengitter);}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ drawnow;}}\\
\\
\\
\ \ \ \ \ \ \ \ {\textit{\%\ film\ =\ getframe(grafik);\ \%\ videoaufzeichnung}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ moviefile\ =\ addframe(moviefile,film);}}\\
\\
\ \ \ \ \ \ \ \ {\textit{\%\ displayString\ =\ {[}{'}Zeit:\ {'}\ num2str(Zeit)\ {]};}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ text(5,5,displayString);}}\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ \\
{[}fitnesswert,\ idealwert,\ aussenlaenge,\ wabenanzahl,\ quotient{]}\ =\ fitness(Wabengitter);\\
outp\ =\ sprintf({\texttt{{'}run\ \%u\ $\backslash$n\ fitness\ \%f\ $\backslash$n\ idealwert\ \%f\ $\backslash$n\ aussenlaenge\ \%d\ $\backslash$n\ wabenzahl\ \%d\ $\backslash$n\ quotient\ \%f{'}}},\ ...\\
\ \ \ \ \ \ \ \ run,\ fitnesswert,\ idealwert,\ aussenlaenge,\ wabenanzahl,\ quotient)\\
\\
\ \ \ \ overallfitness(run)\ =\ quotient;\ {\textit{\%\ legt\ einen\ Vektor\ overallfitness\ an}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ hier\ wird\ für\ den\ Ph�?notyp\ (strukturelles\ Simulationsergebnis)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ jedes\ Regelsatzes\ seine\ Overall\dash{}Fitness\ abgespeichert}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Dient\ als\ Basis\ für\ den\ GA}}\\
{\textbf{end}}\\
\\
strengthga(overallfitness);\ {\textit{\%\ Aufruf\ des\ GA\ zur\ Erzeugung\ neuer\ Regels�?tze}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ mit\ anderen\ Fitnesswerten}}\\
\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ numberofruns\ =\ size(wespe,1);\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Update\ der\ Anzahl\ der\ Durchl�?ufe}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \dash{}\ wenn\ neue\ Individuen\ (Regels�?tze)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ dazukommen,\ müssen\ die\ auch\ berücksichtigt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ werden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {[}bestwert,\ bestindex{]}\ =\ max(overallfitness);\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ ermittelt\ den\ Regelsatz\ mit\ bester\ Fitness}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ maxvektor(gadurchlauf,1)\ =\ bestwert;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ maxvektor(gadurchlauf,2)\ =\ bestindex;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ maxvektor(gadurchlauf,3)\ =\ mean(overallfitness);\\
{\textbf{end}}\\
\\
{\textit{\%\ close(grafik);}}\\
{\textit{\%\ moviefile\ =\ close(moviefile);}}\\
\\
outp\ =\ sprintf({\texttt{{'}maximaler\ Fitnesswert\ /\ Index\ des\ Regelsatzes\ /\ Durchschnittsfitness{'}}})\\
maxvektor\\
\\
\\
\\
\ \ \ \ \\
\\
\\
\\
\\
\ \ \ \ \ \ \ \ 
\end{tabbing}}}
