-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrainer.erl
44 lines (42 loc) · 1.74 KB
/
trainer.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
-module(trainer).
-compile(export_all).
-include("records.hrl").
-define(MAX_ATTEMPTS,5).
-define(EVAL_LIMIT,inf).
-define(FITNESS_TARGET,inf).
go(Morphology,HiddenLayerDensities)->
go(Morphology,HiddenLayerDensities,?MAX_ATTEMPTS,?EVAL_LIMIT,?FITNESS_TARGET).
go(Morphology,HiddenLayerDensities,MaxAttempts,EvalLimit,FitnessTarget)->
PId = spawn(trainer,loop,[Morphology,HiddenLayerDensities,FitnessTarget,{1,MaxAttempts},{0,EvalLimit},{0,best},experimental,0,0]),
register(trainer,PId),
PId.
loop(Morphology,_HiddenLayerDensities,FT,{AttemptAcc,MA},{EvalAcc,EL},{BestFitness,BestG},_ExpG,CAcc,TAcc) when (AttemptAcc>=MA) or (EvalAcc>=EL) or (BestFitness>=FT)->
genotype:print(BestG),
io:format(" Morphology:~p Best Fitness:~p EvalAcc:~p~n",[Morphology,BestFitness,EvalAcc]),
unregister(trainer),
case whereis(benchmarker) of
undefined ->
ok;
PId ->
PId ! {self(),BestFitness,EvalAcc,CAcc,TAcc}
end;
loop(Morphology,HiddenLayerDensities,FT,{AttemptAcc,MA},{EvalAcc,EvalLimit},{BestFitness,BestG},ExpG,CAcc,TAcc)->
genotype:construct(ExpG,Morphology,HiddenLayerDensities),
Agent_PId=exoself:map(ExpG),
receive
{Agent_PId,Fitness,Evals,Cycles,Time}->
U_EvalAcc = EvalAcc+Evals,
U_CAcc = CAcc+Cycles,
U_TAcc = TAcc+Time,
case Fitness > BestFitness of
true ->
file:rename(ExpG,BestG),
?MODULE:loop(Morphology,HiddenLayerDensities,FT,{1,MA},{U_EvalAcc,EvalLimit},{Fitness,BestG},ExpG,U_CAcc,U_TAcc);
false ->
?MODULE:loop(Morphology,HiddenLayerDensities,FT,{AttemptAcc+1,MA},{U_EvalAcc,EvalLimit},{BestFitness,BestG},ExpG,U_CAcc,U_TAcc)
end;
terminate ->
io:format("Trainer Terminated:~n"),
genotype:print(BestG),
io:format(" Morphology:~p Best Fitness:~p EvalAcc:~p~n",[Morphology,BestFitness,EvalAcc])
end.