Can I lump my constraints so as to avoid adding unnecessary optimization variables
1 次查看(过去 30 天)
显示 更早的评论
I have an optimization problem with numerous decision variables. Among them, a small portion of them participates in objective functions and some constraints. Other optimization variables participate in other constraints (most of them). As performance of fmincon may depends on number of decision variables, Can I lump some constraint in order to avoid adding unnecessary decision variables? For example: I have the following constraints (it's part of them). pgn,pdn,v_mt,Delta,pg,pd are optimization variables.
% First we define the new variables for the sake of
%readability of the scrips (I write only some of them here...):
pgn = X( 145:183 )';
pdn = X( 184:222 )';
pg = X( 301:310 )';
pd = X( 321:339 )';
...
pbal_eq = -(pgn-pdn)+v_mt.*((Ybus_m.*cos(Delta))*v_mt);% pgn:39/pdn:39/v_m:39/v_a=39 (39 eq)
pgn_eq = - pgn + [zeros(29,1);pg]; (39 eq)
pdn_eq= -pdn+[0;0;pd(1);pd(2);0;0;pd(3);pd(4);0;0;0;pd(5);0;0;pd(6);pd(7);0;pd(8);0;pd(9);...
pd(10);0;pd(11);pd(12);pd(13);pd(14);pd(15);pd(16);pd(17);0;pd(18);0;0;0;0;0;0;0;pd(19)];%(39eq)
Ceq=[pbal_eq;pgn_eq;pdn_eq]
Can I lump it this way and avoid having unnecessary optimization variables? So decision variables , pgn,pdn are neglected and only v_mt,Delta,pg,pd are kept.
pgn=[zeros(29,1);pg]; %
pdn= [0;0;pd(1);pd(2);0;0;pd(3);pd(4);0;0;0;pd(5);0;0;pd(6);pd(7);0;pd(8);0;pd(9);...
pd(10);0;pd(11);pd(12);pd(13);pd(14);pd(15);pd(16);pd(17);0;pd(18);0;0;0;0;0;0;0;pd(19)];%(39eq)
pbal_eq = -(pgn-pdn)+v_mt.*((Ybus_m.*cos(Delta))*v_mt);% pgn:39/pdn:39/v_m:39/v_a=39 (39 eq)
Ceq=[pbal_eq];
I know that constraints pgn_eq and pdn_eq are linear, so I should apply them with Aeq , Beq matrices. But I am writing it this way to get the gist of lumping the constraints. How ever, it doesnt change the fact, because I can still lump them in Aeq , Beq too if the idea of lumping the constraints is correct. Moreover, if lumping is possible, so I dont need to define linear constraints in Aeq,Beq for pgn , pdn. In that case, I only have one nonlinear equality constraint (pbal_eq). (if we assume these as the whole constraints I have)
0 个评论
采纳的回答
Matt J
2015-4-26
编辑:Matt J
2015-5-9
I'm not sure I understand the "lumping" procedure. However, the bottom line is that by changing the constraints, you change the feasible region, and therefore you also change the solution to the problem. The only way I can see that being useful is if the lumped problem is a decent heuristic approximation to the original problem for some reason. By solving the lumped problem, you could then maybe obtain a better initial guess, which could be used to solve the original problem in fewer iterations. There is no way to predict in advance how effective this will be, but it is is something you can always try yourself.
However, given that this is likely a spin-off of your earlier post, I really wonder if you're barking up the wrong tree by trying to eliminate variables. Do you know yet whether the slow performance is because fmincon is iterating endlessly, or is it just because each iteration itself is costly?
Six hundred unknowns is not a small problem size, but not really a huge one either, and shouldn't take too many iterations to converge. It's a size that can usually be dealt with pretty well, as long as you take care to implement the objective, constraints, and their derivatives efficiently. Part of doing so means not relying on MATLAB's default finite difference derivative approximations. You have to start getting into the Optimization Toolbox's options for implementing your own analytical derivative calculations. Where a Hessian calculation is required, you also might want to take advantage of options like HessMult, HessFcn, or HessPattern.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Problem-Based Optimization Setup 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!