crossover_ga_binary was unclassical badly documented and untested
[scilab.git] / scilab / modules / genetic_algorithms / tests / unit_tests / crossover_ga_binary.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) Scilab Enterprises - 2014 - Pierre-Aime Agnel
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 // <-- CLI SHELL MODE -->
11 [Crossed_Indiv1, Crossed_Indiv2] = crossover_ga_binary('11111111','00000000',[]);
12 if (length(Crossed_Indiv1)~=8) | (length(Crossed_Indiv2)~=8) then bugmes();quit;end
13 //==============================================================================
14 // Nominal Behaviour
15 //==============================================================================
16 param = init_param("binary_length", 8, "multi_cross", %F, "multi_cross_nb", 1);
17 A = "11111111";
18 B = "00000000";
19 // Reinitialize the seed
20 grand("setsd", 0);
21 [A_crossed, B_crossed, mix] = crossover_ga_binary(A, B);
22 // Reinitialize the seed
23 grand("setsd", 0);
24 [A_crossed_p, B_crossed_p, mix] = crossover_ga_binary(A, B, param);
25 //======================================
26 // Check default behaviour of param
27 //======================================
28 assert_checkequal(A_crossed_p, A_crossed);
29 assert_checkequal(B_crossed_p, B_crossed);
30 assert_checkequal(size(mix, "*"), 1);
31 //======================================
32 // Check the crossover occurred
33 //======================================
34 // Heads
35 assert_checkequal(part(A, 1:mix), part(A_crossed, 1:mix));
36 assert_checkequal(part(B, 1:mix), part(B_crossed, 1:mix));
37 // Tails
38 assert_checkequal(part(A, (mix + 1):$), part(B_crossed, (mix + 1):$));
39 assert_checkequal(part(B, (mix + 1):$), part(A_crossed, (mix + 1):$));
40 //======================================
41 // Binary length
42 //======================================
43 param = set_param(param, "binary_length", 16);
44 A = dec2bin(2^16 - 1, 16); // 11111111 11111111
45 B = dec2bin(0, 16); // 00000000 00000000
46 [A_crossed, B_crossed, mix] = crossover_ga_binary(A, B, param);
47 assert_checkequal(length(A_crossed), 16);
48 assert_checkequal(length(B_crossed), 16);
49 //======================================
50 // Multiple Crossover
51 //======================================
52 param = init_param("binary_length", 16, "multi_cross", %T);
53 s_mix = 0;
54 iter = 0;
55 // By default 2 crossovers
56 while s_mix < 2 & iter <= 100
57     [A_crossed, B_crossed, mix] = crossover_ga_binary(A, B, param);
58     s_mix = size(mix, "*");
59     iter = iter + 1;
60 end
61 // Warning probabilistic test
62 assert_checktrue(s_mix == 2); // we have reached one mix of length 2
63 assert_checkfalse(iter>=100); // we have done it under 100 tries
64 assert_checkequal(part(A_crossed, 1:mix(1)), part(A, 1:mix(1)));
65 assert_checkequal(part(B_crossed, 1:mix(1)), part(B, 1:mix(1)));
66 // Swapped
67 assert_checkequal(part(A_crossed, (mix(1) + 1):mix(2)), part(B, (mix(1) + 1):mix(2)));
68 assert_checkequal(part(B_crossed, (mix(1) + 1):mix(2)), part(A, (mix(1) + 1):mix(2)));
69 // Same
70 assert_checkequal(part(A_crossed, (mix(2) + 1):$), part(A, (mix(2) + 1):$));
71 assert_checkequal(part(B_crossed, (mix(2) + 1):$), part(B, (mix(2) + 1):$));
72 //======================================
73 // Multiple Crossover Number
74 //======================================
75 param = init_param("binary_length", 16, "multi_cross", %T, "multi_cross_nb", 4);
76 s_mix = 0;
77 iter = 0;
78 // By default 2 crossovers
79 while s_mix < 4 & iter <= 100
80     [A_crossed, B_crossed, mix] = crossover_ga_binary(A, B, param);
81     s_mix = size(mix, "*");
82     iter = iter + 1;
83 end
84 // Warning probabilistic test
85 assert_checktrue(s_mix == 4); // we have reached one mix of length 4
86 assert_checkfalse(iter>=100); // we have done it under 100 tries