Multistart apparently does not respect the supplied initial points

4 visualizzazioni (ultimi 30 giorni)
Hello,
I have a simple, but annoying, problem about multistart in MATLAB. Consider the following example from MATLAB description of multistart:
fun = @(x) x.^2 + 4*sin(5*x);
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
fun,'x0',2.5,'lb',-5,'ub',5,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,1)
This gives me the following answer
The local solver ran once and converged with a positive local solver exit flag.
x =
-2.7713
f =
3.8366
But, I expected to roughly get x=2.159 based on the initial point x0=2.5 I supplied. I attach a figure which shows my initial point (open circle) and my expection of local minimum (red star).
Any idea?
Thanks in advance!
Babak

Risposta accettata

Alan Weiss
Alan Weiss il 14 Apr 2023
The only error here is your expectation that fmincon always converges to the closest local minimum. It does not.
fun = @(x) x.^2 + 4*sin(5*x);
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
fun,'x0',2.5,'lb',-5,'ub',5,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,1)
MultiStart completed the runs from all start points. The local solver ran once and converged with a positive local solver exit flag.
x = -2.7713
f = 3.8366
% Now let's see where fmincon goes
[x2,f2] = fmincon(problem)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x2 = -2.7713
f2 = 3.8366
Understand? MultiStart works as documented. When you call it with 1 run, it takes the supplied start point and proceeds to call fmincon. The error was expecting fmincon to converge to the closest local minimum.
Alan Weiss
MATLAB mathematical toolbox documentation
  1 Commento
Mohammad Shojaei Arani
Mohammad Shojaei Arani il 15 Apr 2023
Hi Alan,
Thanks for your response.
If you look at my figure you will see that my starting point is very far from the solution being found. But, as you mentioned in your response tro my other question the use of CustomStartPointSet should fix my problem. I hope it is not so complicated to do it (I am a mathematician but unfortunately am not a good programmer :-) ).
Thank!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Global or Multiple Starting Point Search in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by