use fmincon with 0<x1<x2<x3
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
xone92_
el 27 de Oct. de 2022
Respondida: Steven Lord
el 22 de Oct. de 2023
Hello there,
I would be interested if I can use fmincon in a way that 0<x1<x2<x3 when i have a function f(x) with x=[x1 x2 x3....]
Greetings
0 comentarios
Respuesta aceptada
Torsten
el 27 de Oct. de 2022
Editada: Torsten
el 27 de Oct. de 2022
Strict inequality is not possible. If you are satified with <= instead of <, use
-x1 <= 0
x1 - x2 <= 0
x2 - x3 <= 0
or in the A,b setting of fmincon
A = [-1 0 0;1 -1 0;0 1 -1]
b = [0;0;0]
3 comentarios
Marko
el 22 de Oct. de 2023
This thread is "solved" and almost 1year old.
But maybe, somebody need a solution which is strictly "<" instead of "<=".
I suggest this workaround: choose a small number as delta, e.g.:
dx = 2*eps
-x1 <= dx
x1 - x2 <= dx
x2 - x3 <= dx
or in the syntax for fmincon:
dx = eps;
A = [-1 0 0;1 -1 0;0 1 -1];
b = [dx;dx;dx];
Más respuestas (1)
Steven Lord
el 22 de Oct. de 2023
Another possible solution is to redefine your code in terms of d(1), d(2), d(3), etc. Constrain all the elements of the d vector to be greater than eps (or some other small value, whatever difference you want to be the minimum that the elements of x can be separated by) using a lower bound. Inside your objective function compute the x vector as cumsum(d) and use it in your calculations.
d = [1 0.25 3]
x = cumsum(d)
If you want to allow some of the consecutive elements of x to be equal, the lower bound for that element in d is 0.
d = [1 0.25 0 3]
x = cumsum(d)
0 comentarios
Ver también
Categorías
Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!