summaryrefslogtreecommitdiff
path: root/fitness.m
blob: 285cf12d57688fc0dfd2d2176658f5faf89ab792 (plain)
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
function Energy = fitness( q_0, q_final, x_final, optics_positions )
%FITNESS Summary of this function goes here
%   Detailed explanation goes here
    x0 = 0;
    q_f_trial = gbeam_propagation(x_final,q_0,x0,optics_placer(optics_positions));
    
    Energy = abs(q_final-q_f_trial);
    
    % penalty calculation
    % do not put lenses too close to each other and end positions
    lens_size=0.03;
    
    x1=optics_positions(1);
    x2=optics_positions(2);
    x3=optics_positions(3);
    
    d(1)=abs(x1-x2);
    d(2)=abs(x2-x3);
    d(3)=abs(x1-x3);
    
    d_from_start=abs(x0-optics_positions);
    d_from_end=abs(x_final-optics_positions);
    
    
    
    d=cat(2, d, d_from_start, d_from_end);
    
    coef = 1e-1;
    
    penalty=coef*sum( exp(-(d/lens_size).^2) );
    
    Energy = Energy + penalty;
    
    % make sure that lenses are between ends
    d_from_start=(x0-optics_positions);
    d_from_end=(optics_positions-x_final);
    
    d = cat(2, d_from_start, d_from_end);
    
    coef = 1e-1;
    
    penalty = coef * sum(1 + tanh(d.^2));
    
    Energy = Energy + penalty;
    
end