-
Notifications
You must be signed in to change notification settings - Fork 11
/
evalfitness.m
50 lines (41 loc) · 1.61 KB
/
evalfitness.m
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
45
46
47
48
49
50
function gp = evalfitness(gp)
%EVALFITNESS Calls the user specified fitness function.
%
% GP = EVALFITNESS(GP) evaluates the the fitnesses of individuals stored
% in the GP structure and updates various other fields of GP accordingly.
%
% Copyright (c) 2009-2015 Dominic Searson
%
% GPTIPS 2
%
% See also TREE2EVALSTR, EVALFITNESS_PAR
%check parallel mode.
if gp.runcontrol.parallel.enable && gp.runcontrol.parallel.ok
gp = evalfitness_par(gp);
return;
%regular version
else
for i = 1:gp.runcontrol.pop_size
gp.state.current_individual = i;
%retrieve values if cached
if gp.runcontrol.usecache && gp.fitness.cache.isKey(i)
cache = gp.fitness.cache(i);
gp.fitness.complexity(i,1) = cache.complexity;
gp.fitness.values(i,1) = cache.value;
gp.fitness.returnvalues{i,1} = cache.returnvalues;
else
%preprocess cell array of string expressions into a form that
%Matlab can evaluate
evalstr = tree2evalstr(gp.pop{i},gp);
%store complexity of individual (either number of nodes or tree
%expressional complexity)
if gp.fitness.complexityMeasure
gp.fitness.complexity(i,1) = getcomplexity(gp.pop{i});
else
gp.fitness.complexity(i,1) = getnumnodes(gp.pop{i});
end
[fitness,gp] = feval(gp.fitness.fitfun,evalstr,gp);
gp.fitness.values(i) = fitness;
end
end
end