ga

5 visualizzazioni (ultimi 30 giorni)
Natalia
Natalia il 3 Feb 2012
Modificato: Matt J il 1 Ott 2013
Hello! I have a function:
function z=my_fun(x)
a=2;
b=3;
c=1;
z=a*x(1)-b*x(2)+c*x(3);
I use the genetic algoritm (ga, gatool) to generate input parameters x(1), x(2) and x(3). It is necessary for me, that x(1)<x(2)<x(3). How and where can I set this constraint? Thank you very much for any answer :)
Natalia

Risposta accettata

Sean de Wolski
Sean de Wolski il 3 Feb 2012
Interesting idea. This should be possible, probably with non-linear constraint option.
However, (disclaimer: this is just a thought/curiosity, no guarantees at all), what if you just sort x at the beginning of my_fun()? This would enforce the constraint in your fitness function and possibly cause convergence of the guesses. Let me know if/how it works for you.
function z=my_fun(x)
x = sort(x);
a=2;
b=3;
c=1;
z=a*x(1)-b*x(2)+c*x(3);
  2 Commenti
Natalia
Natalia il 4 Feb 2012
Yes, it works. But if I have more input parameters and more constraints (for example: x(1)<x(2)<x(3), x(5)<x(4)<x(1)) sort will not help.
I think it linear constraint (this is just a thought/curiosity too).
If x(1)<x(2)<x(3)
hence:
x(1)<x(2);
x(2)<x(3);
x(1)<x(3);
hence:
1*x(1)-1*x(2)+0*x(3)<0;
0*x(1)+1*x(2)-1*x(3)<0;
1*x(1)+0*x(2)-1*x(3)<0;
If A*x<b,
hence:
A=[1 -1 0; 0 1 -1; 1 0 -1]
b=[0;0;0]
I try to use it. And it works... What do you think about it?
Sean de Wolski
Sean de Wolski il 6 Feb 2012
Yes, that looks good, I guess it is a linear constraint.

Accedi per commentare.

Più risposte (0)

Tag

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by