\begin{matlab}
classdef classifier
%CLASSIFIER Definiert die Struktur eines Klassifikators
%   Klassendefinition für die Klassifikatoren
%   die das Verhalten der Agenten steuern
%
%   Ein Klassifikator in LCS besteht aus einer Regel, die
%   einen Detektor (hier als String implementiert) und
%   einen Effektor miteinander verknüpft.
%   Außerdem werden noch verschiedene zusätzliche Parameter
%   wie Stärke(Fitness) und Spezifizität der Regel als
%   Bestandteil des Klassifikators definiert.

properties
detector % enthält den String zur Definition des Detektors zur
% Verarbeitung der Umwelt
% B           = beliebiger Baustein an Position
% *           = \textit{don't care}
% 0,1,2,3,... = bestimmter (bzw. kein) Baustein an Position

effector % Definiert die Aktion des Agenten - in diesem Modell also
% den Typ des zu bauenden Bausteins als Zahlenwert (1,2,3,
% ...) bzw. auch eben KEINEN Baustein zu setzen (0)

strength % skalarer Wert zur Bestimmung der Stärke oder Fitness
% - normiert auf $0 \leq Wert \leq 255$
% wichtig wegen interner Codierung in 8bit Gray code
% für GA

fitnessstring % Fitnesswert in 8bit-Gray-Code als Textstring z.B. '00110110'

specificity % Wert zur Bestimmung der Genauigkeit der Regel
% entspricht der Zahl der Elemente des Detektor-Strings
% die nicht "*"-don't-care entsprechen

age % wird in jedem Zeitschritt erhöht, bei Benutzung des Klassifikators erniedrigt
% nach Modell von Holland(1978)

frequency % Häufigkeit der Aktivierung des Klassifikators
% Wird bei jeder Aktivierung um 1 erhöht

attenuation % Dämpfungskoeffizient
% wird bei der Berechnung des Feedback aus der Umgebung
% miteinbezogen

detectorlength = 6; % Länge des Detektors (im zweidimensionalen Modell 6,
% im dreidimensionalen 20

bid % skalarer Wert, der aus strength und specificity in jedem Zeitschritt neu berechnet wird
% wird nur berechnet, wenn Klassifikator im Matchset auftaucht
% Je höher der bid-Wert des Klassifikators, desto höher seine
% Chance auf Ausführung. Pro Zeitschritt wird nur ein
% Klassifikator angewendet.

minfit % Untergrenze für Roulette-Wheel-Selection
maxfit % Obergrenze für Roulette-Wheel-Selection


end

methods
function obj = classifier( rulestring, fitness ) % Konstruktor
obj.detector = rulestring(1:obj.detectorlength);
% kopiert die relevanten Teile des Strings in den Detektor

% Konvertierung in 8bit Gray code
obj.strength = bin2gray(fitness,'fsk',256);
% Darstellung der Fitness als Bitstring für GA
obj.fitnessstring = dec2bin(obj.strength,8);

obj.specificity = 0;
% Spezifizität der Regel wird berechnet
for pos=1:obj.detectorlength
if (~(strcmp(obj.detector(pos), '*')))
obj.specificity = obj.specificity + 1;
end
end

obj.effector = str2double(rulestring(obj.detectorlength + 1));
% letzte Position des RuleString ist der Effektor

% Initialisierung von age, frequency und attenuation
% Anfangswerte bei allen gleich Null
obj.age = 0;
obj.frequency = 0;
obj.attenuation = 0;

end

end

end
\end{matlab}
