UPDATING Upper and Lower Bounds in MultiStart Optimization
5 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Steve Grikschat
2012-3-21
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 个评论
Steve Grikschat
2012-3-23
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Global or Multiple Starting Point Search 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!