finite difference step size value in fmincon

57 views (last 30 days)
Hi
I'm using fmincon to solve an optimization problem.
I have question regarding step size in fmincon. When I use finite difference step size (ds) of the magnitude 1e-03, design variable (x) changes from x to x+ds.
But when I use step size (ds) of the magnitude 1, design varible(x) changes from x to 2x or when ds = 2, design variable changes from x to 3x.
Because of this very large change in design variables, the solver exceeds the upper bound (ub) and the solver tries to adjust the bounds which leads to errors.
Why is this happening?
TIA...
  3 Comments
Hainan Wang
Hainan Wang on 10 Apr 2021
Hi, Mario
I am curious for the equation in the document:
delta = v.*sign(x).*max(abs(x),TypicalX);
What does v, x, and TypicalX mean?
Please enlight me, thank you!
Mario Malic
Mario Malic on 11 Apr 2021
v is the actual FiniteDifferenceStepSize scalar, or vector, if you would like to set the step size for each of your variables.
x is the value of your optimization variable(s) at current iteration
TypicalX is described well in the documentation.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 4 Aug 2020
Edited: Matt J on 4 Aug 2020
You might try the sqp or interior point algorithm, instead of whatever fmincon algorithm setting you are currently using. According to the documentation, the sqp algorithm in particular will take finite differencing steps that respect bounds
  4 Comments
Akshay Bhapkar
Akshay Bhapkar on 4 Aug 2020
You are right. During the first iteration, with the step size of magnitude 2, the 10th design variable exceeded the ub. But that is because the design variable (x) changes from x to 3x (with step size of 2) which is way too large. I want it to change from x to x+step size.
My question is, why does it (x) not change from x to x + step-size, like when we use step size of magnitude 1e-03 or 1e-04?
Thanks...
Matt J
Matt J on 4 Aug 2020
Edited: Matt J on 4 Aug 2020
Because the formula used for the actual step is what Mario posted previously
delta = v.*sign(x).*max(abs(x),TypicalX);

Sign in to comment.

More Answers (0)

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!