How to do 'less than but not equal to' nonlinear constraints in fmincon?
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
How can I set the constraints for the solution (x1,x2,x3,x4) so that it has a non-linear constraint (x1*x2)/(x3*x4)<1 a.k.a. c = (x1*x2)/(x3*x4)-1?
I already have a separate time I test the non-linear constraint (ceq) (x1*x2)/(x3*x4)=1, and I do not want the solution of the less-than condition to necessarily overlap with the equals condition since it's usually c(x)<=0.
I am using Matlab r2019a or b.
0 Kommentare
Antworten (2)
Ameer Hamza
am 16 Sep. 2020
Numerical optimization algorithms already satisfy constraints with a tolerance value, so the less than (<) or less than equal to (<=) constraints are not fundamentally different. If you want to avoid (x1*x2)/(x3*x4)=1, then you will need to manually set the other constraint like this (x1*x2)/(x3*x4)<=0.99.
Walter Roberson
am 16 Sep. 2020
A/B < 1 implies A < B implies A - B < 0,
A-B < 0 implies A - B + epsilon <= 0 for positive epsilon and epsilon goes to 0.
So... we arrive at the constraint
x1*x2 - x3*x4 + eps(realmin)
with implied <= 0
But keep in mind that two different ways of calculating the same "algebraic" number do not necessarily give the same result in floating point.
For example let x1 = 25 and x2 = 1/3, and let x3 = 1 and x4 = 25/3 . Then algebraically 25 * 1/3 should equal 1 * 25/3 . But 25 * (1/3) - 25/3 = -1.77635683940025e-15 in double precision, because 1/3 cannot be exactly represented in binary floating point. The above calculation x1*x2 - x3*x4 + eps(realmin) is negative so the constraint would be satisfied, and yet "morally" the constraint should not be satisfied, since "morally" the two expressions should be equal. If you were to switch the variables then x1*x2 - x3*x4 would be positive instead of 0 so the constraint would fail, but "accidentally" so.
Siehe auch
Kategorien
Mehr zu Systems of Nonlinear Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!