[optimization] fix tests
[scilab.git] / scilab / modules / optimization / tests / unit_tests / genetic / optim_ga.dia.ref
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008 - Yann COLLETTE <yann.collette@renault.com>
3 // Copyright (C) 2013 - Scilab Enterprises - Paul Bignier: standardized and added tests
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13 //
14 // <-- CLI SHELL MODE -->
15 // <-- ENGLISH IMPOSED -->
16 // Minimizing a quadratic function in dimension 1.
17 deff("y = test_func(x)", "y = x^2;");
18 ga_params = init_param();
19 ga_params = add_param(ga_params, "dimension", 1);
20 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = optim_ga(test_func, 50, 10, 0.1, 0.7, %F, ga_params);
21 assert_checkequal(length(pop_opt), length(pop_init));
22 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
23 // In the following example, we customize all the options in order to show all the features of the algorithm,
24 // and we increase the dimension.
25 function y = f(x)
26     y = sum(x.^2);
27 endfunction
28 PopSize     = 100;
29 Proba_cross = 0.7;
30 Proba_mut   = 0.1;
31 NbGen       = 10;
32 NbCouples   = 110;
33 Log         = %T;
34 pressure    = 0.05;
35 ga_params = init_param();
36 // Parameters to adapt to the shape of the optimization problem
37 ga_params = add_param(ga_params, "minbound", [-2; -2]);
38 ga_params = add_param(ga_params, "maxbound", [2; 2]);
39 ga_params = add_param(ga_params, "dimension", 2);
40 ga_params = add_param(ga_params, "beta", 0);
41 ga_params = add_param(ga_params, "delta", 0.1);
42 // Parameters to fine tune the Genetic algorithm.
43 // All these parameters are optional for continuous optimization
44 // If you need to adapt the GA to a special problem, you
45 ga_params = add_param(ga_params, "init_func", init_ga_default);
46 ga_params = add_param(ga_params, "crossover_func", crossover_ga_default);
47 ga_params = add_param(ga_params, "mutation_func", mutation_ga_default);
48 ga_params = add_param(ga_params, "codage_func", coding_ga_identity);
49 ga_params = add_param(ga_params, "selection_func", selection_ga_elitist);
50 //ga_params = add_param(ga_params, "selection_func", selection_ga_random);
51 ga_params = add_param(ga_params, "nb_couples", NbCouples);
52 ga_params = add_param(ga_params, "pressure", pressure);
53 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = ..
54 optim_ga(f, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
55 optim_ga: iteration 1 / 10 
56     min / max value found = 0.001391 / 0.995046
57 optim_ga: iteration 2 / 10 
58     min / max value found = 0.000206 / 0.191417
59 optim_ga: iteration 3 / 10 
60     min / max value found = 0.000126 / 0.048784
61 optim_ga: iteration 4 / 10 
62     min / max value found = 0.000118 / 0.011398
63 optim_ga: iteration 5 / 10 
64     min / max value found = 0.000046 / 0.001167
65 optim_ga: iteration 6 / 10 
66     min / max value found = 0.000034 / 0.000284
67 optim_ga: iteration 7 / 10 
68     min / max value found = 0.000004 / 0.000114
69 optim_ga: iteration 8 / 10 
70     min / max value found = 0.000001 / 0.000036
71 optim_ga: iteration 9 / 10 
72     min / max value found = 0.000000 / 0.000010
73 optim_ga: iteration 10 / 10 
74     min / max value found = 0.000000 / 0.000003
75 assert_checkequal(length(pop_opt), length(pop_init));
76 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
77 // Customizing the init function, which computes the initial population.
78 function Pop_init = myinitga(popsize, param)
79     // This message is to be displayed in the console
80     // for demonstration purpose only :
81     // remove it in a real application!
82     disp("Initializing the Population with grand")
83     // We deal with some parameters to take into account
84     // the boundary of the domain and the neighborhood size
85     [Dim, err]       = get_param(param, "dimension", 2)
86     [MinBounds, err] = get_param(param, "minbound", -2*ones(1, Dim))
87     [MaxBounds, err] = get_param(param, "maxbound", 2*ones(1, Dim))
88     // Pop_init must be a list()
89     Pop_init = list()
90     nr = size(MaxBounds, 1)
91     nc = size(MaxBounds, 2)
92     for i=1:popsize
93         u = grand(nr, nc, "def")
94         Pop_init(i) = (MaxBounds - MinBounds).*u + MinBounds
95     end
96 endfunction
97 ga_params = init_param();
98 // Parameters to adapt to the shape of the optimization problem
99 ga_params = add_param(ga_params, "minbound", [-2; -2]);
100 ga_params = add_param(ga_params, "maxbound", [2; 2]);
101 ga_params = add_param(ga_params, "dimension", 2);
102 ga_params = add_param(ga_params, "init_func", myinitga);
103 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = ..
104 optim_ga(f, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
105   "Initializing the Population with grand"
106 optim_ga: iteration 1 / 10 
107     min / max value found = 0.010016 / 0.928237
108 optim_ga: iteration 2 / 10 
109     min / max value found = 0.006862 / 0.161421
110 optim_ga: iteration 3 / 10 
111     min / max value found = 0.001781 / 0.037628
112 optim_ga: iteration 4 / 10 
113     min / max value found = 0.000544 / 0.011567
114 optim_ga: iteration 5 / 10 
115     min / max value found = 0.000039 / 0.003271
116 optim_ga: iteration 6 / 10 
117     min / max value found = 0.000039 / 0.001117
118 optim_ga: iteration 7 / 10 
119     min / max value found = 0.000005 / 0.000307
120 optim_ga: iteration 8 / 10 
121     min / max value found = 0.000001 / 0.000092
122 optim_ga: iteration 9 / 10 
123     min / max value found = 0.000000 / 0.000034
124 optim_ga: iteration 10 / 10 
125     min / max value found = 0.000000 / 0.000010
126 assert_checkequal(length(pop_opt), length(pop_init));
127 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
128 // Passing a list to the optim_ga function, where the first element of the list is
129 // the function and the remaining elements are the extra parameters. Dimension 3.
130 function y = f(x, a1, a2)
131     y = a1*sum(x.^2) + a2;
132 endfunction
133 Warning : redefining function: f                       . Use funcprot(0) to avoid this message
134 ga_params = init_param();
135 // Parameters to control the initial population.
136 ga_params = add_param(ga_params, "dimension", 3);
137 // Pass the extra parameters to the objective function
138 a1 = 12;
139 a2 = 7;
140 myobjfun = list(f, a1, a2);
141 // Optimize !
142 [pop_opt, fobj_pop_opt] = optim_ga(myobjfun, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
143 optim_ga: iteration 1 / 10 
144     min / max value found = 7.339791 / 29.150584
145 optim_ga: iteration 2 / 10 
146     min / max value found = 7.199192 / 11.923950
147 optim_ga: iteration 3 / 10 
148     min / max value found = 7.199192 / 8.613638
149 optim_ga: iteration 4 / 10 
150     min / max value found = 7.106121 / 7.425043
151 optim_ga: iteration 5 / 10 
152     min / max value found = 7.026332 / 7.199192
153 optim_ga: iteration 6 / 10 
154     min / max value found = 7.002293 / 7.078284
155 optim_ga: iteration 7 / 10 
156     min / max value found = 7.002293 / 7.032606
157 optim_ga: iteration 8 / 10 
158     min / max value found = 7.000564 / 7.012589
159 optim_ga: iteration 9 / 10 
160     min / max value found = 7.000280 / 7.004547
161 optim_ga: iteration 10 / 10 
162     min / max value found = 7.000039 / 7.001819
163 assert_checkequal(length(pop_opt), length(pop_init));
164 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));