{{\def\dash{\raise2.1pt\hbox{\rule{5pt}{0.3pt}}\hspace{1pt}}\begin{tabbing}
classdef\ bauagent\ $<$\ handle\\
\ \ \ \ {\textit{\%BAUAGENT\ Diese\ Klasse\ definiert\ die\ Eigenschaften\ des\ einzelnen\ Agenten}}\\
\ \ \ \ {\textit{\%\ \ \ Hier\ werden\ die\ Eigenschaften\ festgelegt,\ die\ den\ einzelnen\ Agenten}}\\
\ \ \ \ {\textit{\%\ \ \ ausmachen,\ der\ für\ den\ Bau\ der\ Wabenstruktur\ zust�?ndig\ ist.}}\\
\ \ \ \ {\textit{\%\ \ \ Für\ jeden\ einzelnen\ Agenten\ wird\ ein\ Objekt\ dieser\ Klasse\ erzeugt.}}\\
\ \ \ \ \\
\ \ \ \ properties\\
\ \ \ \ \ \ \ \ Position\ {\textit{\%\ Vektor,\ welcher\ die\ Position\ des\ Agenten\ in\ }}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ X\dash{}Y(\dash{}Z)\dash{}Koordinaten\ enth�?lt.\ Je\ nach\ Umgebung\ }}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ zwei\dash{}\ oder\ dreidimensional.}}\\
\ \ \ \ \ \ \ \ Ausrichtung\ {\textit{\%\ Blickrichtung\ des\ Agenten\ im\ Gradmaß\ (0\ bis\ 360)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Null\ entspricht\ Blick\ waagerecht\ nach\ rechts}}\\
\ \ \ \ \ \ \ \ RuleSet\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Enth�?lt\ die\ Ausgangsregeln,\ nach\ denen\ gebaut\ oder\ nicht}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ gebaut\ wird.\ Hier\ werden\ nur\ Regeln\ festgelegt,\ mit}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ denen\ begonnen\ wird,\ danach\ werden\ die\ Regeln\ in\ das}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Array\ classifierset\ kopiert\ und\ nur\ noch\ von\ dort}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ ausgelesen\ und\ auch\ durch\ den\ GA\ ver�?ndert.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Könnte\ auch\ aus\ Datei\ gelesen\ werden...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ BuildCounter\ {\textit{\%\ Z�?hlt\ die\ Anzahl\ der\ gesetzten\ Bausteine.}}\\
\ \ \ \ \ \ \ \ Abstand\ {\textit{\%\ Ein\ Abstandsvektor,\ der\ die\ absoluten\ Abstandswerte\ zu}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ allen\ Zellenmittelpunkten\ enth�?lt}}\\
\ \ \ \ \ \ \ \ Speed\ =\ 1;\ {\textit{\%\ relative\ Geschwindigkeit,\ mit\ der\ sich\ der\ Agent\ bewegt}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ Markierung\ {\textit{\%\ graphisches\ Objekt\ zur\ Positionsmarkierung}}\\
\ \ \ \ \ \ \ \ Index\ {\textit{\%\ enth�?lt\ die\ laufende\ Nummer\ des\ Agenten}}\\
\ \ \ \ \ \ \ \ Farbe\ {\textit{\%\ die\ Farbe\ zur\ Markierung}}\\
\ \ \ \ \ \ \ \ classifierset\ {\textit{\%\ ein\ Array,\ in\ dem\ die\ Objekte\ vom\ Typ\ {'}classifier{'}}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ abgelegt\ werden}}\\
\ \ \ \ \ \ \ \ numberofclassifiers\ {\textit{\%\ Anzahl\ der\ vorhandenen\ Regeln}}\\
\ \ \ \ \ \ \ \ matchset\ {\textit{\%\ Array\ in\ dem\ die\ Indizes\ aller\ passenden\ Klassifikatoren\ für\ einen\ Zeitschritt\ abgelegt\ werden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \dash{}\ wird\ nach\ jedem\ Zeitschritt\ gelöscht}}\\
\ \ \ \ \ \ \ \ bucket\ {\textit{\%\ enth�?lt\ den\ Index\dash{}Wert\ des\ letzten\ benutzten\ Klassifikators}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wird\ für\ den\ bucket\dash{}brigade\dash{}Algorithmus\ benötigt}}\\
\ \ \ \ \ \ \ \ classifierfitnessstring\ {\textit{\%\ enth�?lt\ die\ Fitnessstrings\ aller\ Regeln\ im\ Gray\ code\ hintereinander}}\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ \\
\ \ \ \ methods\\
\ \ \ \ \ \ \ \ {\textbf{function}}\ obj\ =\ bauagent(InitialPosition,\ indexNummer)\ {\textit{\%\ Konstruktor}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ Grenzen;\\
\ \ \ \ \ \ \ \ \ \ \ \ obj.Ausrichtung\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.RuleSet\ =\ {[}{'}BBB$\ast$$\ast$$\ast$1{'};\ {'}B$\ast$BB$\ast$$\ast$1{'};\ {'}B$\ast$$\ast$BB$\ast$1{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}B$\ast$$\ast$$\ast$BB1{'};\ {'}$\ast$BBB$\ast$$\ast$1{'};\ {'}$\ast$B$\ast$BB$\ast$1{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$B$\ast$$\ast$BB1{'};\ {'}$\ast$$\ast$BBB$\ast$1{'};\ {'}$\ast$$\ast$BB$\ast$B1{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$$\ast$$\ast$BBB1{'};\ {'}$\ast$BB$\ast$$\ast$$\ast$2{'};\ {'}$\ast$$\ast$$\ast$$\ast$BB2{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$$\ast$$\ast$B$\ast$$\ast$3{'};\ {'}B$\ast$$\ast$$\ast$$\ast$$\ast$3{'}\ {]};}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.RuleSet\ =\ {[}{'}B$\ast$$\ast$$\ast$$\ast$$\ast$1{'};\ {'}$\ast$$\ast$$\ast$B$\ast$$\ast$4{'};\ {'}$\ast$B$\ast$$\ast$$\ast$$\ast$2{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$$\ast$$\ast$$\ast$B$\ast$5{'}{]};\ \%\ {'}$\ast$$\ast$B$\ast$$\ast$$\ast$3{'};\ {'}$\ast$$\ast$$\ast$$\ast$$\ast$B6{'}\ {]};\ \%\ Regelwerk\ zum\ Testen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.RuleSet\ =\ {[}{'}BBB$\ast$$\ast$$\ast$3{'};\ {'}$\ast$BBB$\ast$$\ast$3{'};\ {'}$\ast$$\ast$BBB$\ast$3{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$$\ast$$\ast$BBB3{'};\ {'}$\ast$BB$\ast$$\ast$$\ast$1{'};\ {'}$\ast$$\ast$$\ast$$\ast$BB1{'};\ ...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {'}$\ast$$\ast$$\ast$B$\ast$$\ast$2{'};\ {'}B$\ast$$\ast$$\ast$$\ast$$\ast$2{'}\ {]};\ \%\ simulation01.avi\ \dash{}\ 31x31\ \dash{}\ 500\ steps}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ obj.RuleSet\ =\ {[}{\texttt{{'}BBBBBB1{'}}};\ {\texttt{{'}BBBBB01{'}}};\ {\texttt{{'}0BBBBB1{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}B0BBBB1{'}}};\ {\texttt{{'}BB0BBB1{'}}};\ {\texttt{{'}BBB0BB1{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}BBBB0B1{'}}};\ {\texttt{{'}BBBB001{'}}};\ {\texttt{{'}0BBBB01{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}00BBBB1{'}}};\ {\texttt{{'}B00BBB1{'}}};\ {\texttt{{'}BB00BB1{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}BBB00B1{'}}};\ {\texttt{{'}BBB0001{'}}};\ {\texttt{{'}0BBB001{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}00BBB01{'}}};\ {\texttt{{'}000BBB1{'}}};\ {\texttt{{'}B000BB1{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}BB000B1{'}}};\ {\texttt{{'}BB00001{'}}};\ {\texttt{{'}0BB0001{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}00BB001{'}}};\ {\texttt{{'}000BB01{'}}};\ {\texttt{{'}0000BB1{'}}};\ {\texttt{{'}B0000B1{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}B000000{'}}};\ {\texttt{{'}0B00000{'}}};\ {\texttt{{'}00B0000{'}}};\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}000B000{'}}};\ {\texttt{{'}0000B00{'}}};\ {\texttt{{'}00000B0{'}}}{]};\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ rule=1:size(obj.RuleSet,1)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ classifiers(rule)\ =\ classifier(obj.RuleSet(rule,:),\ uint8(rand$\ast$255));\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ Erzeugung\ des\ Regelsatzes\ \dash{}\ für\ jede\ Regel\ eine\ Zufallszahl\ zwischen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ 0\ und\ 255,\ um\ genau\ mit\ 8\dash{}bit\ Gray\ code\ arbeiten\ zu}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ können}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ obj.classifierset\ =\ classifiers;\ \\
\ \ \ \ \ \ \ \ \ \ \ \ obj.numberofclassifiers\ =\ length(obj.classifierset);\\
\\
\ \ \ \ \ \ \ \ \ \ \ \ obj.classifierfitnessstring\ =\ strcat(obj.classifierset.fitnessstring);\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ nargin\ $>$\ 0\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Index\ =\ indexNummer;\ {\textit{\%\ übergibt\ den\ Index\ aus\ dem\ Vektor}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ von\ Agenten\ als\ Eigenschaft}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{else}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Index\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (mod(obj.Index,\ 7)\ ==\ 1)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}blue{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ (mod(obj.Index,\ 7)\ ==\ 2)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}cyan{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ (mod(obj.Index,\ 7)\ ==\ 3)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}green{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ (mod(obj.Index,\ 7)\ ==\ 4)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}white{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ (mod(obj.Index,\ 7)\ ==\ 5)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}black{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ (mod(obj.Index,\ 7)\ ==\ 6)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}yellow{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{else}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Farbe\ =\ {\texttt{{'}magenta{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ obj.BuildCounter\ =\ 0;\ {\textit{\%\ Anzahl\ der\ gebauten\ Bausteine\ auf\ Null}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ nargin\ $>$\ 0\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Position\ =\ InitialPosition;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{else}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.Position\ =\ rand(1,2);}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.Position(1,1)\ =\ obj.Position(1,1)\ $\ast$\ Grenzen(1);\ \%\ Setzt\ die\ Position\ des\ Agenten\ auf\ einen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ obj.Position(1,2)\ =\ obj.Position(1,2)\ $\ast$\ Grenzen(2);\ \%\ beliebigen\ Punkt\ in\ den\ Grenzen\ des\ Gitters}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Position(1,1)\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ obj.Position(1,2)\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ obj.Markierung\ =\ line(obj.Position(1),\ obj.Position(2),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1.1,\ {\texttt{{'}Marker{'}}},{\texttt{{'}.{'}}},\ {\texttt{{'}MarkerFaceColor{'}}},obj.Farbe,\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}Color{'}}},obj.Farbe\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ aktuelle\ Position\ des\ Agenten\ wird\ graphisch}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ markiert}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ set(obj.Markierung,\ {'}XDataSource{'},{'}agent.Position(1){'});}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ set(obj.Markierung,\ {'}YDataSource{'},{'}agent.Position(2){'});}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Verknüpfung\ des\ Grafikobjekts\ mit\ der\ Position}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textit{\%\ function\ obj\ =\ bauagent()\ \%\ dummy\ konstruktor}}\\
\ \ \ \ \ \ \ \ {\textit{\%\ end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{function}}\ obj\ =\ movebuild(agent)\ {\textit{\%\ Diese\ Funktion\ wird\ einmal\ pro\ Zeitschritt\ für\ jeden\ Agenten\ aufgerufen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Die\ Umgebung\ wird\ verarbeitet\ und\ nach\ den\ Regeln\ des\ Agenten}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ entschieden,\ ob\ der\ Agent\ an\ der\ aktuellen\ Position\ eine\ Wabe\ baut}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ oder\ sich\ weiterbewegt.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ Wabengitter;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ Knotenzahl;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ Grenzen;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ raumplot;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ bebautezellen;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ animation;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ gadurchlauf;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ numberofgaruns;\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ matchset\ muss\ gelöscht\ werden\ (empty\ matrix)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ agent.matchset\ =\ {[}{]};\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ agent.Ausrichtung\ =\ mod(agent.Ausrichtung\ +\ rand$\ast$360,\ 360);\ {\textit{\%\ dreht\ den\ Agenten\ in\ eine\ zuf�?llige\ Richtung}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ Zelle\ =\ agent.indexPosition;\ \ \ \ \ \ {\textit{\%\ Index\ der\ Zelle,\ auf\ dessen\ Fl�?che\ sich\ der\ Agent\ befindet}}\\
\ \ \ \ \ \ \ \ \ \ \ \ Nachbarn\ =\ agent.nachbarn(Zelle);\ {\textit{\%\ erzeugt\ Liste\ der\ Indizes\ der\ den\ Agenten\ unmittelbar}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ umgebenden\ Zellen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ refreshdata(agent.Markierung);\ \%\ Markierung\ wird\ neu\ gezeichnet}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ nachbarZelle=1:6\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ builtFlag\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 1;\ {\textit{\%\ Initialisierung}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bauPosition\ =\ Nachbarn(nachbarZelle);\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ setze\ potentielle\ Position\ für\ neuen\ Baustein\ auf\ einen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ der\ sechs\ Nachbarzellen\ der\ aktuellen\ Position}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (\ (bauPosition\ $<$\ 1)\ $|$$|$\ (bauPosition\ $>$\ Knotenzahl)\ $|$$|$\ ...\ {\textit{\%\ Grenzen\ des\ Gitters}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (Wabengitter(4,bauPosition)\ \~{}=\ 0)\ $|$$|$\ ...\ {\textit{\%\ Bebauung\ der\ Zelle}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (Wabengitter(3,bauPosition)\ ==\ 0)\ )\ {\textit{\%\ und\ ist\ die\ Wabe\ noch\ im\ Gitter?}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 0;\ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bauNachbarn\ =\ agent.nachbarn(bauPosition);\ {\textit{\%\ erzeugt\ Liste\ der\ unmittelbaren\ Nachbarn\ der}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ potentiellen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Bauposition}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ ruleNumber=1:agent.numberofclassifiers\ {\textit{\%\ jeder\ Klassifikator\ wird\ auf\ Validit�?t\ geprüft}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (validFlag\ ==\ 0)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\ {\textit{\%\ wenn\ sich\ die\ Position\ außerhalb\ des}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Gitters\ befindet\ oder\ schon\ bebaut\ ist,}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wird\ die\ n�?chste\ Position\ geprüft}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 1;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ ruleCellNumber=1:6\ {\textit{\%\ jede\ Position\ der\ Regel\ einzeln\ geprüft}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (\ (validFlag\ ==\ 0)\ $|$$|$\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (bauNachbarn(ruleCellNumber)\ $>$\ Knotenzahl)\ $|$$|$\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (bauNachbarn(ruleCellNumber)\ $<$\ 1)\ )\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\ {\textit{\%\ wenn\ schon\ die\ letzte\ Stelle\ der\ Regel\ ungültig\ war,}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ braucht\ diese\ nicht\ mehr\ getestet\ zu}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ werden\ \dash{}\ wenn\ die\ Position\ außerhalb}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ des\ Gitters\ liegt,\ auch\ nicht}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ strcmp(agent.classifierset(ruleNumber).detector(ruleCellNumber),\ {\texttt{{'}B{'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 1\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 2\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 3\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 4\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 5\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 6\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $|$$|$\ Wabengitter(4,bauNachbarn(ruleCellNumber))\ ==\ 7\ )\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 1;\ {\textit{\%\ wenn\ die\ Regel\ an\ dieser\ Stelle\ {'}B{'}\ enth�?lt,}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wird\ validFlag\ {'}true{'}\ gesetzt,\ falls\ ein}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ beliebiger\ Baustein\ (1\dash{}7)\ vorhanden\ ist.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{else}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{elseif}}\ strcmp(agent.classifierset(ruleNumber).detector(ruleCellNumber),\ {\texttt{{'}$\ast${'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 1;\ {\textit{\%\ enth�?lt\ die\ Regel\ an\ der\ betreffenden\ Stelle\ ein\ {'}$\ast${'}}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ so\ ist\ der\ Zustand\ der\ Zelle}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ egal.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{else}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ strcmp(num2str(Wabengitter(4,bauNachbarn(ruleCellNumber))),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(ruleNumber).detector(ruleCellNumber));\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ in\ allen\ anderen\ F�?llen\ (genaue}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Spezifikation\ in\ der\ Regel)\ muss}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ der\ Zelleninhalt\ exakt\ mit\ der}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Regelposition\ übereinstimmen.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (validFlag\ ==\ 1)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(ruleNumber).bid\ =\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gray2bin(agent.classifierset(ruleNumber).strength,{\texttt{{'}fsk{'}}},256)\ $\ast$\ ...\ {\textit{\%\ Rückkonvertierung\ von\ Gray}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ log2(agent.classifierset(ruleNumber).specificity\ +\ 1);\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ bid\dash{}Wert\ wird\ berechnet:\ }}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ bid(r)\ =\ strength(r)\ $\ast$\ log2(specificity(r))}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.matchset(length(agent.matchset)+1)\ =\ ruleNumber;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wenn\ die\ Regel\ des\ Klassifikators\ gültig\ ist,}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wird\ seine\ Indexnummer\ in\ matchset\ übernommen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ validFlag\ =\ 1;\ {\textit{\%\ sonst\ wird\ die\ n�?chste\ Regel\ nicht\ angewendet}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ an\ dieser\ Position\ sind\ alle\ Regeln\ ausgewertet\ und}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ matchset\ sollte\ alle\ passenden\ Regeln\ enthalten}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ overallbid\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cumulativebid\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ chosenrule\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ \~{}isempty(agent.matchset)\ {\textit{\%\ bei\ leerem\ matchset\ muss\ nichts\ ausgew�?hlt\ werden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ clsf=1:length(agent.matchset)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ overallbid\ =\ overallbid\ +\ agent.classifierset(agent.matchset(clsf)).bid;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ clsf=1:length(agent.matchset)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ normalbid\ =\ agent.classifierset(agent.matchset(clsf)).bid\ /\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ overallbid;\ {\textit{\%\ Normalisierung\ des\ bid\dash{}Wertes}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ auf\ Wert\ zwischen\ 0\ und\ 1}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ (Anteil\ an\ der\ Summe\ aller}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ bid\dash{}Werte\ aller\ Regeln)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(agent.matchset(clsf)).minfit\ =\ cumulativebid;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cumulativebid\ =\ cumulativebid\ +\ normalbid;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(agent.matchset(clsf)).maxfit\ =\ cumulativebid;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Unter\dash{}\ und\ Obergrenzen\ werden\ gesetzt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ decision\ =\ rand;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ clsf=1:length(agent.matchset)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (decision\ $>$=\ agent.classifierset(agent.matchset(clsf)).minfit\ \&\&\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ decision\ $<$=\ agent.classifierset(agent.matchset(clsf)).maxfit)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ chosenrule\ =\ agent.matchset(clsf);\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ hier\ wird\ die\ zu\ verwendende\ Regel\ ausgew�?hlt\ und\ ihr\ Index\ in\ chosenrule\ abgespeichert}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wenn\ eine\ Regel\ ausgew�?hlt\ wurde\ (chosenrule),\ muss\ nach}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ dieser\ Regel\ auch\ gebaut\ werden:}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (chosenrule)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Wabengitter(4,bauPosition)\ =\ agent.classifierset(chosenrule).effector;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ hier\ wird\ gebaut!!}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.bucket\ =\ chosenrule;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ benutzte\ Regel\ wird\ für\ BBA}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ zwischengespeichert}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.BuildCounter\ =\ agent.BuildCounter\ +\ 1;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Counter\ erhöhen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ builtFlag\ =\ 1;\ {\textit{\%\ zeigt\ an,\ dass\ in\ diesem\ Zeitschritt\ gebaut\ wurde}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (gadurchlauf\ ==\ numberofgaruns)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ plotwabe(bauPosition,\ raumplot,\ Wabengitter(4,bauPosition));\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ die\ gebaute\ Wabe\ wird\ graphisch\ markiert}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Parameter:}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ bauPosition\ =\ Index\ der\ zu\ bebauenden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Zelle}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ raumplot\ =\ Handle\ des\ zu\ benutzenden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Achsenobjekts}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Wabengitter(...)\ =\ Typ\ des\ Bausteins}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ (definiert\ die\ Farbe)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bebautezellen\ =\ find(Wabengitter(4,:));\ {\textit{\%\ Update\ der\ Liste\ der\ Indizes\ aller\ bebauten\ Zellen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ true(builtFlag)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ builtFlag\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\ {\textit{\%\ jeder\ Agent\ soll\ höchstens\ einmal\ pro\ Zeitschritt\ bauen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ agent.Position(1)\ =\ agent.Position(1)\ +\ cosd(agent.Ausrichtung\ $\ast$\ agent.Speed);\ {\textit{\%\ Bewegung\ in\ x\dash{}Richtung}}\\
\ \ \ \ \ \ \ \ \ \ \ \ agent.Position(2)\ =\ agent.Position(2)\ +\ sind(agent.Ausrichtung\ $\ast$\ agent.Speed);\ {\textit{\%\ Bewegung\ in\ y\dash{}Richtung}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ zelle\ =\ agent.indexPosition;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (\ (Wabengitter(4,zelle)\ ==\ 0)\ $|$$|$\ ...\ {\textit{\%\ wenn\ Position\ unbebaut\ ist...}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (agent.Position(1)\ $>$\ Grenzen(1))\ $|$$|$\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (agent.Position(1)\ $<$\ 0)\ $|$$|$...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (agent.Position(2)\ $>$\ Grenzen(2))\ $|$$|$\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (agent.Position(2)\ $<$\ 0)\ )\ {\textit{\%\ ..\ oder\ außerhalb\ des\ Gitters\ liegt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ ...dann\ mache\ Positions�?nderung\ rückg�?ngig}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.Position(1)\ =\ agent.Position(1)\ +\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cosd(\ mod((agent.Ausrichtung\ +\ 180),360)\ $\ast$\ agent.Speed\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.Position(2)\ =\ agent.Position(2)\ +\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sind(\ mod((agent.Ausrichtung\ +\ 180),360)\ $\ast$\ agent.Speed\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (gadurchlauf\ ==\ numberofgaruns)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ delete(agent.Markierung);\ \%\ alte\ Markierung\ wird\ gelöscht}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.Markierung\ =\ line(agent.Position(1),\ agent.Position(2),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1.1,\ {\texttt{{'}Marker{'}}},{\texttt{{'}.{'}}},\ {\texttt{{'}MarkerFaceColor{'}}},agent.Farbe,\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\texttt{{'}Color{'}}},agent.Farbe,\ {\texttt{{'}Parent{'}}},raumplot\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ und\ neue\ Markierung\ gesetzt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (animation)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ drawnow;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ zeigt\ die\ animierte\ Bausequenz,\ wenn\ animation\dash{}flag\ gesetzt}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{function}}\ liste\ =\ nachbarn(obj,\ mittelpunkt)\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Gibt\ für\ einen\ gegebenen\ Knoten\ im\ Wabengitter\ die\ Liste\ der}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ direkten\ Nachbarn\ zurück\ \dash{}\ Reihenfolge\ vom\ oberen\ Nachbarn\ }}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ beginnend\ im\ Uhrzeigersinn}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ DX;\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ liste\ =\ {[}\ mittelpunkt+2$\ast$DX,\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mittelpunkt+DX+1+mod(idivide(mittelpunkt,uint32(DX)),2),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mittelpunkt\dash{}DX+1+mod(idivide(mittelpunkt,uint32(DX)),2),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mittelpunkt\dash{}2$\ast$DX,\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mittelpunkt\dash{}DX\dash{}2+mod(idivide(mittelpunkt,uint32(DX)),2),\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mittelpunkt+DX\dash{}2+mod(idivide(mittelpunkt,uint32(DX)),2)\ {]};\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{function}}\ indexnummer\ =\ indexPosition(agent)\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Gibt\ für\ jeden\ Agenten\ den\ Index\ des\ Mittelpunkts\ derjenigen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Wabe\ zurück,\ auf\ deren\ Fl�?che\ sich\ der\ Agent\ nach\ seinen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Koordinaten\ befindet}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ Wabengitter;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{global}}\ MittelPunkte;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ global\ bebautezellen;}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ agent.Abstand\ =\ {[}abs(Wabengitter(1,MittelPunkte)\ \dash{}\ agent.Position(1));\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ abs(Wabengitter(2,MittelPunkte)\ \dash{}\ agent.Position(2)){]};\\
\ \ \ \ \ \ \ \ \ \ \ \ kandidatenX\ =\ find(agent.Abstand(1,:)\ $<$=\ 1);\\
\ \ \ \ \ \ \ \ \ \ \ \ kandidatenY\ =\ find(agent.Abstand(2,:)\ $<$=\ 1);\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ indexnummer\ =\ 0;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ kandX=1:length(kandidatenX)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ kandY=1:length(kandidatenY)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (kandidatenX(kandX)\ ==\ kandidatenY(kandY))\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ indexnummer\ =\ MittelPunkte(kandidatenX(kandX));\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (indexnummer\ \~{}=\ 0)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ folgender\ Code\ ist\ zu\ langsam\ und\ wird\ nur\ noch\ verwendet,}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wenn\ der\ andere\ kein\ Ergebnis\ bringt:}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ indexnummer\ ==\ 0\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.Abstand\ =\ sqrt((Wabengitter(1,MittelPunkte)\ \dash{}\ (agent.Position(1,1))).\^{}2\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ +\ (Wabengitter(2,MittelPunkte)\ \dash{}\ (agent.Position(1,2))).\^{}2\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ erzeugt\ einen\ Vektor\ mit\ den\ euklidischen\ Abst�?nden\ des\ Agenten}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ von\ allen\ Wabenmittelpunkten:\ }}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ D(X,Y)\ =\ sqrt\ {[}\ (x1\dash{}y1)\^{}2\ +\ (x2\dash{}y2)\^{}2\ {]}}}\\
\ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {[}abstand,\ I{]}\ =\ min(agent.Abstand);\ {\textit{\%\ gibt\ den\ Abstand\ zum\ n�?chstgelegenen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Wabenmittelpunkt\ (abstand)\ und\ den\ dazugehörigen}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Index\ im\ Vektor\ Abstand\ (I)\ zurück}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ indexnummer\ =\ MittelPunkte(I);\ {\textit{\%\ der\ n�?chste\ Mittelpunkt\ ist\ der}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ mit\ Index\ I\ im\ Vektor\ Abstand,\ also\ ist\ sein}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Index\ im\ Array\ Wabengitter\ der\ Wert\ an\ Stelle\ i}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ im\ Vektor\ Abstand}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{function}}\ updatefitness(agent)\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Kopiert\ den\ Gesamt\dash{}Fitnesstring\ in\ die\ St�?rkewerte\ der}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ einzelnen\ Regeln.}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{for}}\ regelindex=1:agent.numberofclassifiers\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(regelindex).fitnessstring\ =\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierfitnessstring(\ ((regelindex\dash{}1)$\ast$8)+1:((regelindex\dash{}1)$\ast$8)+8\ );\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ graystrength\ =\ bin2dec(agent.classifierset(regelindex).fitnessstring);\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Konvertierung\ von\ Bin�?rstring\ in}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Dezimalzahl(Graycodiert)}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ agent.classifierset(regelindex).strength\ =\ ...\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gray2bin(graystrength,{\texttt{{'}fsk{'}}},256);\ {\textit{\%\ konvertiert\ von\ gray\ in\ standard\ bin�?r}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ und\ speichert\ im\ strength\dash{}Feld}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ {\textbf{end}}\\
\\
{\textbf{end}}\\

\end{tabbing}}}
