用非线性约束最大化线性目标

时间:2016-09-27 17:33:57

标签: matlab optimization

我想解决涉及线性目标函数和非线性约束的最大化问题。特别是,我的问题是:

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_constraintx的函数,它计算x处的不等式和等式约束值以及渐变,uxlx指定边界X

据我所知,有一种快速计算argmax问题的方法,该问题具有线性/二次目标函数和线性/二次约束(例如,使用CVXGEN)。所以我的问题是:鉴于此问题的特定结构,是否有更快的方法来计算argmax中此问题的fmincon(相对于Matlab)?特别是,我可以使用我的目标函数是线性的这一事实来加速计算吗?

0 个答案:

没有答案