{*** ELM-MODEL ***}
procedure ELM;
var
KPs: integer;
Liste: integer;
KPNr: integer;
VAIntens: real;
count: integer;
PeriReizKomm: real;
EinstKomm: real;
ArguQualiKomm: real;
derBeeinflusser: CIndividuum;
lokWerBeeinflusst: integer;
function FctVerarbMot: real; {* Box 1 *}
begin
FctVerarbMot := Betroff * (1 + (0.5 - ((abs(Betroff - 5) / 10))));
end;
function FctVerarbFkt: real; {* Box 2 *}
begin
FctVerarbFkt := ArguQuali * (1 - (Ablenkung / 10));
end;
function FctVAIntens: real; {* Box 3 *}
var
intrVAI, Hilfsvar: real;
begin
intrVAI := sqrt(VerarbMot * VerarbFkt);
Hilfsvar := intrVAI + (((PeriReizKomm - 5) / 2) * (1 - (abs(intrVAI - 5) / 5)));
PoolVAIntensELM := Hilfsvar + PoolVAIntensELM;
FctVAIntens := Hilfsvar;
end;
function FctEinst: real; {* Box 7 *}
var
EinstFaktor: real;
function Fctperi: real; {* Box 5 *}
begin
Fctperi := ((PeriReizKomm - 5) / 1.65);
end;
function Fctzent: real; {* Box 6 *}
begin
if ((Voreingenom > 5) and (EinstKomm < 5)) or ((Voreingenom < 5) and (EinstKomm > 5)) then
Fctzent := ((ArguQualiKomm - 5) / 2.5) + ((((5 - ArguQualiKomm) / 5) - 2) * (sqr((abs(Voreingenom - 5)) / 5)))
else
Fctzent := ((ArguQualiKomm - 5) / 2.5) + ((((5 - ArguQualiKomm) / 5) + 2) * (sqr((abs(Voreingenom - 5)) / 5)));
end;
begin
EinstFaktor := (Fctzent * (VAIntens / 10)) + (Fctperi * (1 - (VAIntens / 10)));
FctEinst := VarCheck(Einst + (EinstFaktor * ((EinstKomm - Einst) / 3)));
end;
function FctArguQualiNeuELM: real; {* Box 8 *}
var
AQzent, AQperi, AQEinfluss: real;
begin
if (ArguQualiKomm > ArguQuali) then
AQzent := ((ArguQualiKomm - ArguQuali) / 10)
else
AQzent := 0;
AQperi := ((ArguQualiKomm - ArguQuali) / 10);
AQEinfluss := (AQzent * (VAIntens / 10)) + (AQperi * (1 - (VAIntens / 10)));
FctArguQualiNeuELM := VarCheck(ArguQuali + AQEinfluss);
end;
begin {** BEGIN ELM-Mainproc **}
if ID <> 1 then
begin
PoolVAIntensELM := 0;
count := 0;
Voreingenom := (WertH + Einst) / 2;
for Liste := Freunde to Nachbarn do
begin
KPs := (GetAnzKPs(Liste));
if not ListIsEmpty(Liste) then
for KPNr := 1 to KPs do
begin
count := count + 1;
theKP := GetKP(Liste, KPNr);
PeriReizKomm := theKP.GiveOutValue(6);
EinstKomm := theKP.GiveOutValue(1);
ArguQualiKomm := theKP.GiveOutValue(2);
VerarbFkt := FctVerarbFkt;
VerarbMot := FctVerarbMot;
VAIntens := FctVAIntens;
Einst := FctEinst;
ArguQuali := FctArguQualiNeuELM;
end; {* for KPNr ... *}
end; {* for Liste ... *}
theKP := nil;
if count <> 0 then
PoolVAIntensELM := PoolVAIntensELM / count;
end; {* if ID ... *)
end;
{END ELM-Mainproc}