我想解决涉及线性目标函数和非线性约束的最大化问题。特别是,我的问题是:
max_x f(x) = c_1x_1
s.t. g_m(x) <= 0 for m = 1,...,M
g_m(x) = 0 for m = M+1,...,N
x in X
其中X是有限维欧几里德空间的紧致子集。解决此问题的一种方法是使用fmincon
中的MatLab
函数。为此,我们致电
fmincon(@(x)linobj(x,c),x0,[],[],[],[],lx,ux,nonlinear_constraint,options_fmincon);
其中linobj(x,c)
是线性函数
function [val,gradient] = linobj(x,c)
% c is a vector with c = (c_1,0,0,...,0)'
val = dot(x,c)
if nargout > 1
gradient = [c(1) 0 0 ... 0].'
end
end
nonlinear_constraint
是x
的函数,它计算x
处的不等式和等式约束值以及渐变,ux
和lx
指定边界X
。
据我所知,有一种快速计算argmax
问题的方法,该问题具有线性/二次目标函数和线性/二次约束(例如,使用CVXGEN
)。所以我的问题是:鉴于此问题的特定结构,是否有更快的方法来计算argmax
中此问题的fmincon
(相对于Matlab
)?特别是,我可以使用我的目标函数是线性的这一事实来加速计算吗?