{{\def\dash{\raise2.1pt\hbox{\rule{5pt}{0.3pt}}\hspace{1pt}}\begin{tabbing}
{\textbf{function}}\ {[}{]}\ =\ strengthga(\ overallfitness\ )\\
{\textit{\%STRENGTHGA\ Genetischer\ Algorithmus\ zur\ Anpassung\ der\ Fitnesswerte}}\\
{\textit{\%\ \ \ Dieser\ GA\ soll\ nach\ mehreren\ erfolgten\ Simulationsl�?ufen\ mit\ dem}}\\
{\textit{\%\ \ \ gleichen\ Regelsatz\ aber\ unterschiedlichen\ Fitnesswerten\ der\ einzelnen}}\\
{\textit{\%\ \ \ Regeln\ die\ Ergebnisse\ der\ L�?ufe\ miteinander\ vergleichen\ und\ aufgrund}}\\
{\textit{\%\ \ \ der\ globalen\ Fitness\ der\ entstandenen\ Strukturen\ die\ einzelnen}}\\
{\textit{\%\ \ \ St�?rkewerte\ der\ Regeln\ genetisch\ rekombinieren.\ Dadurch\ sollen\ neue}}\\
{\textit{\%\ \ \ Regels�?tze\ erzeugt\ werden,\ die\ sich\ nur\ durch\ die\ Fitness\ der\ einzelnen}}\\
{\textit{\%\ \ \ Regeln\ von\ den\ alten\ Regels�?tzen\ unterscheiden.}}\\
\\
{\textbf{global}}\ wespe;\\
{\textbf{global}}\ Wabengitter;\\
{\textbf{global}}\ MittelWabe;\\
\\
probmutation\ =\ 0.2;\ {\textit{\%\ feste\ Mutationswahrscheinlichkeit}}\\
elternzahl\ =\ 4;\ {\textit{\%\ Zahl\ der\ auszuw�?hlenden\ Individuen\ pro\ GA\dash{}Durchlauf}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ \dash{}\ muss\ ein\ Vielfaches\ von\ 2\ sein}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
overallrezip\ =\ 1\ ./\ overallfitness;\ {\textit{\%\ Die\ reziproken\ Werte\ der\ Gesamtfitness}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ zur\ Berechnung\ der\ zu\ löschenden}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Elemente}}\\
overallrezip\ =\ overallrezip\ /\ sum(overallrezip);\ {\textit{\%\ Normierung\ auf\ Gesamtsumme\ 1}}\\
\\
overallfitness\ =\ overallfitness\ /\ sum(overallfitness);\ {\textit{\%\ Normierung\ auf\ Gesamtfitness\ 1}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ wichtig\ für\ Roulette\_wheel\dash{}Selection}}\\
\\
cumulfitness\ =\ 0;\\
cumulrezip\ =\ 0;\\
{\textit{\%\ es\ werden\ zwei\ Vektoren\ (maxfitness\ und\ maxrezip)\ erzeugt,\ in\ denen\ für}}\\
{\textit{\%\ jeden\ Regelsatz\ in\ wespe\ ein\ Wert\ abgespeichert\ ist,\ der\ der\ Position\ des}}\\
{\textit{\%\ jeweiligen\ Abschnitts\ auf\ dem\ Roulette\dash{}Wheel\ entspricht.\ Der\ Vektor\ ist}}\\
{\textit{\%\ normiert\ auf\ 1,\ d.h.\ der\ letzte\ Wert\ im\ Vektor\ sollte\ 1.0\ betragen.}}\\
{\textbf{for}}\ regelsatz=1:length(overallfitness)\\
\ \ \ \ cumulfitness\ =\ cumulfitness\ +\ overallfitness(regelsatz);\\
\ \ \ \ maxfitness(regelsatz)\ =\ cumulfitness;\\
\ \ \ \ cumulrezip\ =\ cumulrezip\ +\ overallrezip(regelsatz);\\
\ \ \ \ maxrezip(regelsatz)\ =\ cumulrezip;\\
{\textbf{end}}\\
\\
{\textit{\%\ Selektion}}\\
eltern\ =\ roulette(overallfitness,\ maxfitness);\\
\\
{\textit{\%\ Rekombination}}\\
newstrings\ =\ onepointxover(eltern);\\
\\
{\textit{\%\ Mutation}}\\
newstrings\ =\ mutation(newstrings);\\
\\
{\textit{\%\ Selektion\ der\ zu\ löschenden\ bauagent\dash{}Objekte}}\\
{\textit{\%\ \dash{}\ Es\ wird\ das\ gleiche\ Prinzip\ zur\ Roulette\dash{}Wheel\dash{}Selektion\ angewendet\ wie}}\\
{\textit{\%\ bei\ der\ Eltern\dash{}Selektion,\ nur\ dass\ auf\ den\ Kehrwerten\ der\ Fitnesswerte}}\\
{\textit{\%\ gearbeitet\ wird\ und\ deshalb\ die\ Selektionswahrscheinlichkeit\ mit}}\\
{\textit{\%\ steigender\ Fitness\ abnimmt,\ d.h.\ dass\ weniger\ fitte\ bauagent\dash{}Objekte\ mit}}\\
{\textit{\%\ höherer\ Wahrscheinlichkeit\ gelöscht\ werden.}}\\
todelete\ =\ roulette(overallrezip,\ maxrezip);\\
\\
{\textit{\%\ Erzeugen\ von\ zwei\ zus�?tzlichen\ bauagent\dash{}Objekten\ in\ wespe}}\\
{\textit{\%\ \dash{}\ nicht\ mehr\ nötig,\ da\ die\ Populationsgröße\ konstant\ gehalten\ werden\ soll}}\\
{\textit{\%\ und\ für\ die\ neuen\ Objekte\ alte\ überschrieben\ werden}}\\
{\textit{\%\ Stattdessen\ direktes\ Ersetzen\ der\ zu\ löschenden\ Objekte\ und\ Einfügen\ der}}\\
{\textit{\%\ neuen\ Fitnessstrings}}\\
\\
{\textit{\%\ rulesetanzahl\ =\ size(wespe,1);}}\\
{\textbf{for}}\ elternindex=1:elternzahl\\
\ \ \ \ wespe(todelete(elternindex),1)\ =\ bauagent(Wabengitter(1:2,\ MittelWabe){'},\ 1);\\
\ \ \ \ wespe(todelete(elternindex),1).classifierfitnessstring\ =\ newstrings(1,:);\\
\ \ \ \ wespe(todelete(elternindex),1).updatefitness;\\
{\textbf{end}}\\
\\
\\
{\textbf{function}}\ index\ =\ roulette(fitnessvektor,\ maxvektor)\\
\ \ \ \ \\
\ \ \ \ {\textbf{for}}\ candid=1:elternzahl\\
\ \ \ \ \ \ \ \ a\ =\ rand;\\
\ \ \ \ \ \ \ \ {\textit{\%\ b\ =\ rand;}}\\
\ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{for}}\ ruleset=length(fitnessvektor):\dash{}1:2\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ (\ (a\ $>$=\ maxvektor(ruleset\dash{}1))\ \&\&\ (fitnessvektor(ruleset)\ $>$\ 0.0)\ )\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ index(candid)\ =\ ruleset\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ maxfitness(ruleset\dash{}1)\ =\ 1.0;\ \%\ verhindert,\ dass\ für\ index2\ der\ gleiche\ Wert\ gew�?hlt\ wird}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{if}}\ (\ a\ $<$\ maxvektor(1)\ )\\
\ \ \ \ \ \ \ \ \ \ \ \ index(candid)\ =\ 1\\
\ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ fitnessvektor(index(candid))\ =\ 0.0;\ {\textit{\%\ Fitness\ des\ gew�?hlten\ Individuums\ auf\ 0\ setzen}}\\
\ \ \ \ \ \ \ \ fitnessvektor\ =\ fitnessvektor\ /\ sum(fitnessvektor);\ {\textit{\%\ neue\ Normierung}}\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ cumul\ =\ 0;\\
\ \ \ \ \ \ \ \ {\textbf{for}}\ regel=1:length(fitnessvektor)\\
\ \ \ \ \ \ \ \ \ \ \ \ cumul\ =\ cumul\ +\ fitnessvektor(regel);\\
\ \ \ \ \ \ \ \ \ \ \ \ maxvektor(regel)\ =\ cumul;\\
\ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ neuen\ Vektor\ mit\ Maximalwerten\ für\ Roulette\dash{}Selection\ erzeugen}}\\
\ \ \ \ {\textbf{end}}\\
{\textbf{end}}\\
\\
\ \ \ \ {\textbf{function}}\ kinder\ =\ onepointxover(eltern)\\
\ \ \ \ \ \ {\textbf{for}}\ xoverindex=1:uint8(elternzahl/2)\\
\ \ \ \ \ \ \ \ string1\ =\ wespe(eltern(xoverindex),1).classifierfitnessstring;\\
\ \ \ \ \ \ \ \ string2\ =\ wespe(eltern(xoverindex+1),1).classifierfitnessstring;\\
\ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ kopiert\ die\ Fitness\dash{}Strings\ der\ ausgew�?hlten\ Eltern\ in\ Graycode}}\\
\ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ in\ zwei\ lokale\ String\dash{}Variablen}}\\
\ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ Es\ wird\ der\ Gesamtstring\ (St�?rke\ aller\ Regeln}}\\
\ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ hintereinander)\ verwendet}}\\
\ \ \ \ \ \ \ \ xoverpoint\ =\ uint16(rand\ $\ast$\ length(string1));\\
\ \ \ \ \ \ \ \ \ \ \ {\textit{\%\ w�?hlt\ einen\ zuf�?lligen\ Crossoverpunkt}}\\
\ \ \ \ \ \ \ \ neustring1\ =\ {[}string1(1:xoverpoint)\ string2(xoverpoint+1:length(string2)){]};\\
\ \ \ \ \ \ \ \ neustring2\ =\ {[}string2(1:xoverpoint)\ string1(xoverpoint+1:length(string1)){]};\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ kinder(xoverindex,:)\ =\ neustring1;\ \\
\ \ \ \ \ \ \ \ kinder(xoverindex+1,:)\ =\ neustring2;\\
\ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ \\
\ \ \ \ {\textbf{function}}\ newbitstring\ =\ mutation(bitstring)\\
\ \ \ \ \ \ {\textbf{for}}\ mutindex=1:uint8(elternzahl/2)\ \ \\
\ \ \ \ \ \ \ \ bitstring1\ =\ bitstring(mutindex,:);\\
\ \ \ \ \ \ \ \ bitstring2\ =\ bitstring(mutindex+1,:);\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{if}}\ (rand\ $<$\ probmutation)\ {\textit{\%\ wenn\ Zufallszahl\ unter\ Mutationswahrscheinlichkeit}}\\
\ \ \ \ \ \ \ \ \ \ \ \ mutbit\ =\ uint16(rand\ $\ast$\ length(bitstring1));\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ strcmp(bitstring1(mutbit),{\texttt{{'}0{'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bitstring1(mutbit)\ =\ {\texttt{{'}1{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ strcmp(bitstring1(mutbit),{\texttt{{'}1{'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bitstring1(mutbit)\ =\ {\texttt{{'}0{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ für\ bitstring1}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ {\textbf{if}}\ (rand\ $<$\ probmutation)\ {\textit{\%\ wenn\ Zufallszahl\ unter\ Mutationswahrscheinlichkeit}}\\
\ \ \ \ \ \ \ \ \ \ \ \ mutbit\ =\ uint16(rand\ $\ast$\ length(bitstring2));\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ strcmp(bitstring2(mutbit),{\texttt{{'}0{'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bitstring2(mutbit)\ =\ {\texttt{{'}1{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{if}}\ strcmp(bitstring2(mutbit),{\texttt{{'}1{'}}})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bitstring2(mutbit)\ =\ {\texttt{{'}0{'}}};\\
\ \ \ \ \ \ \ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ {\textbf{end}}\ {\textit{\%\ für\ bitstring2}}\\
\ \ \ \ \ \ \ \ \\
\ \ \ \ \ \ \ \ newbitstring(mutindex,:)\ =\ bitstring1;\\
\ \ \ \ \ \ \ \ newbitstring(mutindex+1,:)\ =\ bitstring2;\\
\ \ \ \ \ \ {\textbf{end}}\\
\ \ \ \ {\textbf{end}}\\
\ \ \ \ \ \ \ \ \\
{\textbf{end}}
\end{tabbing}}}
