use fmincon with 0<x1<x2<x3
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
Torsten
il 27 Ott 2022
Modificato: Torsten
il 27 Ott 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 Commenti
Marko
il 22 Ott 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];
Più risposte (1)
Steven Lord
il 22 Ott 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 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!