UPDATING Upper and Lower Bounds in MultiStart Optimization

14 views (last 30 days)
Hi there,
I am performing a MultiStart Global Optimization process using 'fmincon' as a the solver and a CustomStartPoint set consisting of an array of starting points. The Objective is multi-dimensional with 11 design variables.
Well the code works fine. However, I need a small change to be incorporated in the Problem Structure. As of now, the LOWER and UPPER BOUNDS in the MultiStart problem structure are FIXED.
Now, I have another function that generates a NEW SET of Lower and Upper bounds in the immediate vicinity of the CURRENT Starting Point. So the bounds actually change with new Starting Points. What I want to do is to UPDATE the bounds as the MultiStart algorithm progresses and tests new starting points.
I tried passing a function handle in place of 'lb_0' and 'ub_0', but this returned an error.
Is there anyway to UPDATE the BOUNDS with changing Starting Points?
Any help will be greatly appreciated.
Here is the code:
function [xmin, Japp_min]=Multi_Start_opt(X,J2,B2,lb_0,ub_0,results_array)
a=size(results_array); %results_array is an input(argument) %array consisting some %data.
a=a(1);
i=1:a;
b=J2(i)<2; %_Scanning for all values of J2(also input argument) less than 2
pnts=X(b,:); %Taking corresponding values of 'X'(input) that satisfy above %condition.
%***********Creating Custom Start Points Set***************
tpoints=CustomStartPointSet(pnts);
[minJ2, ind]=min(J2); %Taking minimum of J2
x0_2=[X(ind,1:5)';X(ind,6:10)';X(ind,end)]; %Starting Point for 'fmincon'
%********LOWER & UPPER BOUNDS FUNCTION HANDLES**********
fl=@(x)space_lim3_l(x); % **Function handle for LOWER BOUND
fu=@(x)space_lim3_u(x); % **Function handle for UPPER BOUND*
%***********Creating Problem Structure***************
problem = createOptimProblem('fmincon','x0',x0_2,'objective',@(x)rsm_opt3(B2, x ),'lb',lb_0,'ub',ub_0,'nonlcon',@(x)NonlinCon0_3(B2,x),'options',opts);
% 'rsm_opt3' and 'NonlinCon0_3' are Objective and Constraint functions %respectively. 'lb_0' and 'ub_0' are FIXED Lower and %Upper Bounds.
ms=MultiStart;
[xmin, Japp_min,exit_flag,output,Solutions]=run(ms,problem,tpoints);
Thanks in advance, Best regards, Taha Khot

Accepted Answer

Steve Grikschat
Steve Grikschat on 21 Mar 2012
It seems like you want to solve several different problems. Each time you change the bounds, the optimization problem is different. This is fine, but is not what MultiStart is intended for.
MultiStart is meant to find multiple local minima (or hopefully a global minimum) for a single problem (with one set of bounds). Therefore the lb and ub inputs must remain fixed for a given problem.
If you want to adjust the bounds for each start point, you may as well call fmincon directly in a loop, changing the bounds and start point each time. Alternatively, you could call MultiStart in a loop, changing the bounds each time, and modify your custom start point generator accordingly.
  3 Comments
Steve Grikschat
Steve Grikschat on 23 Mar 2012
Hi Taha,
There is no way to have different bounds for each start point with MultiStart. Once set, they remain fixed throughout the execution.
As for calling in a loop, you'd be best calling fmincon directly with each of your start points, and their respective bounds.
However, if you could generate start points in the neighborhood of the ones you generate now, then you might call MultiStart in a loop. That is, if you generate x1 ... xk now, and have k sets of bounds for them (lb1,ub1) ... (lbk,ubk), modify your start point generator to be able to generate subsets of start points x1,1 ... x1,k that remain within your bounds (lb1,ub1).
But this seems unnecessary and will result in a longer run time, obviously. Just a thought.
Taha
Taha on 24 Mar 2012
Hi Steve,
I've now decided to keep the bounds fixed... in a manner that the start points will have just enough room to move around covering the relevant design space.
Thanks for your replies. Really appreciate it.
Best regards,
Taha Khot.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!