Add ENGLISH IMPOSED sentence in tests.
[scilab.git] / scilab / modules / genetic_algorithms / tests / unit_tests / 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 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10 //
11 // <-- CLI SHELL MODE -->
12 // <-- ENGLISH IMPOSED -->
13 // Minimizing a quadratic function in dimension 1.
14 deff("y = test_func(x)", "y = x^2;");
15 ga_params = init_param();
16 ga_params = add_param(ga_params, "dimension", 1);
17 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = optim_ga(test_func, 50, 10, 0.1, 0.7, %F, ga_params);
18 assert_checkequal(length(pop_opt), length(pop_init));
19 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
20 // In the following example, we customize all the options in order to show all the features of the algorithm,
21 // and we increase the dimension.
22 function y = f(x)
23     y = sum(x.^2);
24 endfunction
25 PopSize     = 100;
26 Proba_cross = 0.7;
27 Proba_mut   = 0.1;
28 NbGen       = 10;
29 NbCouples   = 110;
30 Log         = %T;
31 pressure    = 0.05;
32 ga_params = init_param();
33 // Parameters to adapt to the shape of the optimization problem
34 ga_params = add_param(ga_params, "minbound", [-2; -2]);
35 ga_params = add_param(ga_params, "maxbound", [2; 2]);
36 ga_params = add_param(ga_params, "dimension", 2);
37 ga_params = add_param(ga_params, "beta", 0);
38 ga_params = add_param(ga_params, "delta", 0.1);
39 // Parameters to fine tune the Genetic algorithm.
40 // All these parameters are optional for continuous optimization
41 // If you need to adapt the GA to a special problem, you
42 ga_params = add_param(ga_params, "init_func", init_ga_default);
43 ga_params = add_param(ga_params, "crossover_func", crossover_ga_default);
44 ga_params = add_param(ga_params, "mutation_func", mutation_ga_default);
45 ga_params = add_param(ga_params, "codage_func", coding_ga_identity);
46 ga_params = add_param(ga_params, "selection_func", selection_ga_elitist);
47 //ga_params = add_param(ga_params, "selection_func", selection_ga_random);
48 ga_params = add_param(ga_params, "nb_couples", NbCouples);
49 ga_params = add_param(ga_params, "pressure", pressure);
50 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = ..
51 optim_ga(f, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
52 optim_ga: Initialization of the population
53 optim_ga: iteration 1 / 10 - min / max value found = 0.001391 / 0.995046
54 optim_ga: iteration 2 / 10 - min / max value found = 0.000341 / 0.177816
55 optim_ga: iteration 3 / 10 - min / max value found = 0.000133 / 0.044825
56 optim_ga: iteration 4 / 10 - min / max value found = 0.000002 / 0.010889
57 optim_ga: iteration 5 / 10 - min / max value found = 0.000002 / 0.001507
58 optim_ga: iteration 6 / 10 - min / max value found = 0.000002 / 0.000310
59 optim_ga: iteration 7 / 10 - min / max value found = 0.000001 / 0.000089
60 optim_ga: iteration 8 / 10 - min / max value found = 0.000000 / 0.000014
61 optim_ga: iteration 9 / 10 - min / max value found = 0.000000 / 0.000003
62 optim_ga: iteration 10 / 10 - min / max value found = 0.000000 / 0.000001
63 assert_checkequal(length(pop_opt), length(pop_init));
64 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
65 // Customizing the init function, which computes the initial population.
66 function Pop_init = myinitga(popsize, param)
67     // This message is to be displayed in the console
68     // for demonstration purpose only :
69     // remove it in a real application!
70     disp("Initializing the Population with grand")
71     // We deal with some parameters to take into account
72     // the boundary of the domain and the neighborhood size
73     [Dim, err]       = get_param(param, "dimension", 2)
74     [MinBounds, err] = get_param(param, "minbound", -2*ones(1, Dim))
75     [MaxBounds, err] = get_param(param, "maxbound", 2*ones(1, Dim))
76     // Pop_init must be a list()
77     Pop_init = list()
78     nr = size(MaxBounds, 1)
79     nc = size(MaxBounds, 2)
80     for i=1:popsize
81         u = grand(nr, nc, "def")
82         Pop_init(i) = (MaxBounds - MinBounds).*u + MinBounds
83     end
84 endfunction
85 ga_params = init_param();
86 // Parameters to adapt to the shape of the optimization problem
87 ga_params = add_param(ga_params, "minbound", [-2; -2]);
88 ga_params = add_param(ga_params, "maxbound", [2; 2]);
89 ga_params = add_param(ga_params, "dimension", 2);
90 ga_params = add_param(ga_params, "init_func", myinitga);
91 [pop_opt, fobj_pop_opt, pop_init, fobj_pop_init] = ..
92 optim_ga(f, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
93 optim_ga: Initialization of the population
94  
95  Initializing the Population with grand   
96 optim_ga: iteration 1 / 10 - min / max value found = 0.010016 / 0.928237
97 optim_ga: iteration 2 / 10 - min / max value found = 0.001402 / 0.198423
98 optim_ga: iteration 3 / 10 - min / max value found = 0.000809 / 0.045008
99 optim_ga: iteration 4 / 10 - min / max value found = 0.000053 / 0.013969
100 optim_ga: iteration 5 / 10 - min / max value found = 0.000053 / 0.003974
101 optim_ga: iteration 6 / 10 - min / max value found = 0.000040 / 0.000922
102 optim_ga: iteration 7 / 10 - min / max value found = 0.000005 / 0.000240
103 optim_ga: iteration 8 / 10 - min / max value found = 0.000001 / 0.000057
104 optim_ga: iteration 9 / 10 - min / max value found = 0.000000 / 0.000020
105 optim_ga: iteration 10 / 10 - min / max value found = 0.000000 / 0.000007
106 assert_checkequal(length(pop_opt), length(pop_init));
107 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));
108 // Passing a list to the optim_ga function, where the first element of the list is
109 // the function and the remaining elements are the extra parameters. Dimension 3.
110 function y = f(x, a1, a2)
111     y = a1*sum(x.^2) + a2;
112 endfunction
113 Warning : redefining function: f                       . Use funcprot(0) to avoid this message
114
115 ga_params = init_param();
116 // Parameters to control the initial population.
117 ga_params = add_param(ga_params, "dimension", 3);
118 // Pass the extra parameters to the objective function
119 a1 = 12;
120 a2 = 7;
121 myobjfun = list(f, a1, a2);
122 // Optimize !
123 [pop_opt, fobj_pop_opt] = optim_ga(myobjfun, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
124 optim_ga: Initialization of the population
125 optim_ga: iteration 1 / 10 - min / max value found = 7.339791 / 29.150584
126 optim_ga: iteration 2 / 10 - min / max value found = 7.054037 / 12.127766
127 optim_ga: iteration 3 / 10 - min / max value found = 7.048084 / 9.120917
128 optim_ga: iteration 4 / 10 - min / max value found = 7.025101 / 7.630176
129 optim_ga: iteration 5 / 10 - min / max value found = 7.007453 / 7.191936
130 optim_ga: iteration 6 / 10 - min / max value found = 7.005699 / 7.054037
131 optim_ga: iteration 7 / 10 - min / max value found = 7.000896 / 7.020325
132 optim_ga: iteration 8 / 10 - min / max value found = 7.000375 / 7.007070
133 optim_ga: iteration 9 / 10 - min / max value found = 7.000156 / 7.002255
134 optim_ga: iteration 10 / 10 - min / max value found = 7.000112 / 7.000828
135 assert_checkequal(length(pop_opt), length(pop_init));
136 assert_checkequal(size(fobj_pop_opt), size(fobj_pop_init));