aboutsummaryrefslogtreecommitdiff
path: root/fitness.m
diff options
context:
space:
mode:
authorEugeniy Mikhailov <evgmik@gmail.com>2013-03-20 16:53:39 -0400
committerEugeniy Mikhailov <evgmik@gmail.com>2013-03-20 16:53:39 -0400
commit99f39dc1423adc360a04344689a83d2f788aae33 (patch)
tree2731d3687b663d27fad56d97c3e20fe05a5949f9 /fitness.m
parent4943c1cb5d453dd08aab0ec7000f094779178c94 (diff)
downloadmode_match-99f39dc1423adc360a04344689a83d2f788aae33.tar.gz
mode_match-99f39dc1423adc360a04344689a83d2f788aae33.zip
Matt's changes to use faster beam propagator
Diffstat (limited to 'fitness.m')
-rw-r--r--fitness.m60
1 files changed, 40 insertions, 20 deletions
diff --git a/fitness.m b/fitness.m
index 55f9d76..e92879f 100644
--- a/fitness.m
+++ b/fitness.m
@@ -3,25 +3,26 @@ function [Energy, Waist, Penalty] = fitness( q_0, q_final, x_final, optics_posit
x0 = 0;
Np=20; % # of pts between start position and second lens
N_collimated = 10; % # of pts between second lens and third lens to be collimated region
+ Energy = 0;
x1=optics_positions(1);
x2=optics_positions(2);
x3=optics_positions(3);
- x_array1=linspace(x0,x2,Np);
- x_array2=linspace(x2, x3, N_collimated);
- x = cat(2,x_array1,x_array2);
-
- q_f_trial_forward = gbeam_propagation(x,q_0,x0,optics_placer(optics_positions, optics_focal_length));
- [Waist_trial_forward, Radius_trial_forward] = q2wr(q_f_trial_forward, lambda);
- q_f_trial_backward = gbeam_propagation(x,q_final,x_final,optics_placer(optics_positions, optics_focal_length));
- [Waist_trial_backward, Radius_trial_backward] = q2wr(q_f_trial_backward, lambda);
-
- Energy = 0;
- Penalty_waist_mismatch = sum(abs((Waist_trial_forward-Waist_trial_backward)./min(Waist_trial_forward, Waist_trial_backward)))/Np;
-
- Energy = 1e-2*Penalty_waist_mismatch;
-
+% x_array1=linspace(x0,x2,Np);
+% x_array2=linspace(x2, x3, N_collimated);
+% x = cat(2,x_array1,x_array2);
+%
+% q_f_trial_forward = gbeam_propagation(x,q_0,x0,optics_placer(optics_positions, optics_focal_length));
+% [Waist_trial_forward, Radius_trial_forward] = q2wr(q_f_trial_forward, lambda);
+% q_f_trial_backward = gbeam_propagation(x,q_final,x_final,optics_placer(optics_positions, optics_focal_length));
+% [Waist_trial_backward, Radius_trial_backward] = q2wr(q_f_trial_backward, lambda);
+%
+% Energy = 0;
+% Penalty_waist_mismatch = sum(abs((Waist_trial_forward-Waist_trial_backward)./min(Waist_trial_forward, Waist_trial_backward)))/Np;
+%
+% Energy = 1e-2*Penalty_waist_mismatch;
+%
% penalty calculation
% do not put lenses too close to each other and end positions
lens_size=0.03;
@@ -58,14 +59,33 @@ function [Energy, Waist, Penalty] = fitness( q_0, q_final, x_final, optics_posit
Energy = Energy + penalty_lenses_outside_optical_path;
% make collimated region between 2nd and 3rd lens
- %intialize intermediate points between lenses
- q_intermediate = q_f_trial_forward((x2<x) & (x<x3));
- lambda_over_waist_sq = (-imag(1./q_intermediate)); %with numerical factor
- coef = 1e-3;
- penalty_not_collimated_beam = coef * sum(exp((std(lambda_over_waist_sq)/mean(lambda_over_waist_sq)/abs(optics_positions(2) - optics_positions(3)))));
+ [w0, r0] = q2wr(q_0, lambda);
+ [ w, w_pos ] = self_gbeam_propagation( w0, optics_positions, optics_focal_length, x0, lambda );
+
+ coef = 1;
+ d_object = ((optics_positions(end) - w_pos(end - 1))^2)^.5;
+ d_lens = optics_positions(end) - optics_positions(end - 1);
+ penalty_not_collimated_beam = coef * exp(-(d_object/d_lens)^2);
+
Energy = Energy + penalty_not_collimated_beam;
- Penalty = [ penalty_lenses_too_closely_spaced; penalty_lenses_too_closely_spaced; penalty_not_collimated_beam];
+% % waist at end matches desired waist
+ coef = 10;
+ waist_desired = 3.709E-5;
+
+ penalty_waist = coef *((waist_desired-w(end))^2)^.5;
+
+ Energy = Energy + penalty_waist;
+
+ %intialize intermediate points between lenses
+% q_intermediate = q_f_trial_forward((x2<x) & (x<x3));
+% lambda_over_waist_sq = (-imag(1./q_intermediate)); %with numerical factor
+%
+% coef = 1e-3;
+% penalty_not_collimated_beam = coef * sum(exp((std(lambda_over_waist_sq)/mean(lambda_over_waist_sq)/abs(optics_positions(2) - optics_positions(3)))));
+% Energy = Energy + penalty_not_collimated_beam;
+%
+ Penalty = [ penalty_lenses_too_closely_spaced; penalty_lenses_outside_optical_path; penalty_not_collimated_beam; penalty_waist];
end