Code covered by the BSD License  

Highlights from
Global Optimization with MATLAB

image thumbnail

Global Optimization with MATLAB

by

 

Demo files from the 2010 webinar "Global Optimization with MATLAB Products"

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

Global Minimization of 1D Equation

Global Minimization of 1D Equation

Customer provided this example where he was puzzled why fmincon had a hard time finding the mimimum value.

Copyright (c) 2010, The MathWorks, Inc.
All rights reserved.

Contents

Equation to minimize

f = @(x) x.*sin(x) + x.*cos(2.*x);

Bounds

lb = 0;
ub = 10;

Find Minimum and Plot

x0 = [0 1 3 6 8 10];
hf = figure;
for i=1:6
    x(i) = fmincon(f,x0(i),[],[],[],[],lb,ub,[],...
                   optimset('Algorithm','SQP','Disp','none'));
    subplot(2,3,i)
    ezplot(f,[lb ub]);
    hold on
    plot(x0(i),f(x0(i)),'k+')
    plot(x(i),f(x(i)),'ro')
    hold off
    title(['Starting at ',num2str(x0(i))])
    if i == 1 || i == 4
        ylabel('x sin(x) + x cos(2 x)')
    end
end

A common GOTCHA!

This problem is a 1D bounded minimization problem. There is a specialized solver for this type of problem: fminbnd.

x2 = fminbnd(f,lb,ub)
figure
ezplot(f,[lb ub]);
hold on
plot(x2,f(x2),'ro')
hold off
ylabel('x sin(x) + x cos(2 x)')
title({'Solution using fminbnd.','Required no starting point!'})
x2 =

    4.7954

Leason Learned: Use the appropriate solver for your problem type!

But what if fmincon was the only choice?

Use globalSearch or MultiStart

problem = createOptimProblem('fmincon','objective',f,'x0',x0(1),'lb',lb,...
             'ub',ub,'options',optimset('Algorithm','SQP','Disp','none'));
gs = GlobalSearch;
xgs = run(gs,problem);
figure
ezplot(f,[lb ub]);
hold on
plot(xgs,f(xgs),'ro')
hold off
ylabel('x sin(x) + x cos(2 x)')
title('Solution using globalSearch.')
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.

Contact us