aboutsummaryrefslogtreecommitdiff
path: root/fitness.m
diff options
context:
space:
mode:
Diffstat (limited to 'fitness.m')
-rw-r--r--fitness.m47
1 files changed, 47 insertions, 0 deletions
diff --git a/fitness.m b/fitness.m
new file mode 100644
index 0000000..285cf12
--- /dev/null
+++ b/fitness.m
@@ -0,0 +1,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
+