UPDATING Upper and Lower Bounds in MultiStart Optimization

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

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

Hi Steve,
Thanks for the answer.
Well I get your point that MultiStart is used for a single problem only.
But what I want to know is if there's a way to assign different lower and upper bounds to each of the Start points.
For example if the start points are x1, x2...xn, then there're are 'n' distinct sets of lower and upper bounds, one fore each start point. Is there a way to to this in one function call?
I tried function handles (fl & fu) instead of the fixed values (lb_0 and ub_0...see code), but this returns an error. I was hoping that since we can use function handles for the objective function, we could do the same for the bounds as well?
Also could you please elaborate calling MultiStart in a loop? Do you mean calling it for each of start points?.
Thanks
Regards,
Taha
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.
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!