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

 Akzeptierte Antwort

Sean de Wolski
Sean de Wolski am 3 Feb. 2012

0 Stimmen

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 Kommentare

Natalia
Natalia am 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 am 6 Feb. 2012
Yes, that looks good, I guess it is a linear constraint.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by