* Bug #8964 fixed - The optim_{ga, moga, nsga, nsga2} functions may not create 67/9867/4
Sylvestre Ledru [Thu, 29 Nov 2012 13:23:09 +0000 (14:23 +0100)]
              pop_init.

Change-Id: I6ce9c02934d62007eff188bfa85d98a10357f0d8

scilab/modules/genetic_algorithms/macros/optim_ga.sci
scilab/modules/genetic_algorithms/macros/optim_moga.sci
scilab/modules/genetic_algorithms/macros/optim_nsga.sci
scilab/modules/genetic_algorithms/macros/optim_nsga2.sci
scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.dia.ref [new file with mode: 0644]
scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.tst [new file with mode: 0644]

index 6ffbd74..12e8998 100644 (file)
@@ -57,7 +57,7 @@ end
 Pop = list();
 Pop = init_func(pop_size,param);
 
-if (nargout==4) then
+if (nargout>=3) then
   pop_init = Pop;
 end
 
index c661482..66a6d6a 100644 (file)
@@ -51,9 +51,10 @@ end
 Pop = list();
 Pop = init_func(pop_size,param);
 
-if (nargout==4) then
+if (nargout>=3) then
   pop_init = Pop;
 end
+
 // Code the individuals
 Pop = codage_func(Pop,'code',param);
 
index 6cab689..2bfda9f 100644 (file)
@@ -57,7 +57,8 @@ end
 Pop = list();
 Pop = init_func(pop_size,param);
 
-if (nargout==4) then
+
+if (nargout>=3) then
   pop_init = Pop;
 end
 
index 7222469..687f682 100644 (file)
@@ -48,7 +48,7 @@ end
 
 Pop = init_func(pop_size,param);
 
-if (nargout==4) then
+if (nargout>=3) then
   pop_init = Pop;
 end
 
diff --git a/scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.dia.ref b/scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.dia.ref
new file mode 100644 (file)
index 0000000..e85a645
--- /dev/null
@@ -0,0 +1,51 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - S/E - Sylvestre Ledru
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- NO CHECK REF --> 
+//
+// <-- Non-regression test for bug 8964 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8964
+//
+// <-- Short Description -->
+// The optim_* function may not create pop_init.
+// 1. Define the Rastrigin function.
+function y = rastriginV ( x1 , x2  )
+  // Vectorized function for contouring.
+  y = x1.^2 + x2.^2-cos(12*x1)-cos(18*x2)
+endfunction
+function y = rastrigin ( x )
+  // Non-vectorized function for optimization.
+  y = rastriginV ( x(1) , x(2) )
+endfunction
+// 2. Compute the optimum.
+PopSize     = 100;
+Proba_cross = 0.7;
+Proba_mut   = 0.1;
+NbGen       = 10;
+NbCouples   = 110;
+Log         = %T;
+ga_params = init_param();
+ga_params = add_param(ga_params,"minbound",[-1 -1]');
+ga_params = add_param(ga_params,"maxbound",[1 1]');
+ga_params = add_param(ga_params,"dimension",2);
+[pop_opt, fobj_pop_opt, pop_init] = optim_ga(rastrigin, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
+optim_ga: Initialization of the population
+optim_ga: iteration 1 / 10 - min / max value found = -1.672837 / -0.107933
+optim_ga: iteration 2 / 10 - min / max value found = -1.883604 / -0.526168
+optim_ga: iteration 3 / 10 - min / max value found = -1.906659 / -1.048334
+optim_ga: iteration 4 / 10 - min / max value found = -1.990831 / -1.282218
+optim_ga: iteration 5 / 10 - min / max value found = -1.990831 / -1.479429
+optim_ga: iteration 6 / 10 - min / max value found = -1.990831 / -1.554544
+optim_ga: iteration 7 / 10 - min / max value found = -1.990831 / -1.624791
+optim_ga: iteration 8 / 10 - min / max value found = -1.990831 / -1.774173
+optim_ga: iteration 9 / 10 - min / max value found = -1.994666 / -1.856775
+optim_ga: iteration 10 / 10 - min / max value found = -1.998189 / -1.923837
+// If it fails like in the past, the following tests will fail
+assert_checkequal(size(pop_opt),100);
+assert_checkequal(size(pop_init),100);
diff --git a/scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.tst b/scilab/modules/genetic_algorithms/tests/nonreg_tests/bug_8964.tst
new file mode 100644 (file)
index 0000000..d5c2e48
--- /dev/null
@@ -0,0 +1,46 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - S/E - Sylvestre Ledru
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- NO CHECK REF --> 
+//
+// <-- Non-regression test for bug 8964 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8964
+//
+// <-- Short Description -->
+// The optim_* function may not create pop_init.
+// 1. Define the Rastrigin function.
+function y = rastriginV ( x1 , x2  )
+  // Vectorized function for contouring.
+  y = x1.^2 + x2.^2-cos(12*x1)-cos(18*x2)
+endfunction
+
+function y = rastrigin ( x )
+  // Non-vectorized function for optimization.
+  y = rastriginV ( x(1) , x(2) )
+endfunction
+
+// 2. Compute the optimum.
+PopSize     = 100;
+Proba_cross = 0.7;
+Proba_mut   = 0.1;
+NbGen       = 10;
+NbCouples   = 110;
+Log         = %T;
+
+ga_params = init_param();
+ga_params = add_param(ga_params,"minbound",[-1 -1]');
+ga_params = add_param(ga_params,"maxbound",[1 1]');
+ga_params = add_param(ga_params,"dimension",2);
+
+
+[pop_opt, fobj_pop_opt, pop_init] = optim_ga(rastrigin, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
+// If it fails like in the past, the following tests will fail
+
+assert_checkequal(size(pop_opt),100);
+assert_checkequal(size(pop_init),100);