[scilab-Users] Genetic Algoritm
michael.baudin at contrib.scilab.org
michael.baudin at contrib.scilab.org
Tue Jul 10 10:06:11 CEST 2012
Hi,
You are right, the "Optimization in Scilab" document does not provide
examples of the GA with integer variables. But the demos of Scilab can
help - please type :
demo_gui()
in the console, and search for the "Optimization and Simulation >
Genetic Algorithms > Genetic Algorithms" demo. If you click this, it
will execute the demo. The graphics window then contains a button "View
Code", which lets you explore the code. The "binary" example is at the
end of the script. We used this demo in a training dedicated to
optimization we did last year, because it shows the sensitivity of the
encoding on the convergence on the algorithm.
In this example, the real variable is encoded in binary form. This
requires to change the objective function, which now gets x as a string
which contains a binary coding of the real variable. Before calling the
function func (which manages real inputs), we convert the binary string
into a real with the convert_to_float function which is provided by the
GA toolbox.
function y=f(x)
BinLen = get_param(ga_params,'binary_length')
tmp = convert_to_float(x, BinLen, Max, Min)
y = func(tmp)
endfunction
Then there are some particular settings for managing the binary coding
of the problem. We first have to set the 'binary_length' option which
counts the number of bits used in the encoding and then set the
crossover_ga_binary, mutation_ga_binary and coding_ga_binary functions.
ga_params = add_param(ga_params,'binary_length',8);
ga_params = set_param(ga_params,'crossover_func',crossover_ga_binary);
ga_params = set_param(ga_params,'mutation_func',mutation_ga_binary);
ga_params = set_param(ga_params,'codage_func',coding_ga_binary);
In another context, working with integer variables may force you to
write dedicated crossover_func, mutation_func and codage_func functions.
But you may be able to use the current functions with binary encoding :
just multiply the output of convert_to_float by 2^8 and you get an
integer, uniform in the [0,2^8-1] range.
-->floor(convert_to_float("11010101",8, 1, 0)*2^8)
ans =
213.
-->floor(convert_to_float("00000000",8, 1, 0)*2^8)
ans =
0.
Notice that, in multi-dimensional problems, the string x is the
concatenation of the strings in all dimensions. For example, if the
problem is in dimension 2, then the 8-bytes string x="11111111" can
represent two different 4-bytes values.
Best regards,
Michaƫl
PS
The convert_to_float function has no help page :
http://bugzilla.scilab.org/show_bug.cgi?id=7912
On Mon, 9 Jul 2012 14:32:46 -0700 (PDT), rcbsimoes
<rcbsimoes at hotmail.com> wrote:
> Hi All,
>
> i'm looking for a nice tutorial (with examples) for genetic
> algorithms.
> specificaly descrete (not continous) input variables.
>
> can same one point me a link?
>
> i've seen the presentation from
> http://www.scilab.org/support/documentation/tutorials ->
> Optimization in
> Scilab
>
> this one is nice, but i would like same more tutorials.
>
> greetings from pt, and thanks in advance.
> rui
>
>
> --
> View this message in context:
> http://mailinglists.scilab.org/Genetic-Algoritm-tp4024549.html
> Sent from the Scilab users - Mailing Lists Archives mailing list
> archive at Nabble.com.
>
> --
> To unsubscribe from this mailing-list, please send an empty mail to
> users-unsubscribe at lists.scilab.org
> To check the archives of this mailing list, see
> http://mailinglists.scilab.org/
More information about the users
mailing list