fmincon没有找到凸函数的全局最小值

时间:2018-05-10 02:21:26

标签: matlab newtons-method convex-optimization

在我看来,fmincon是matlab中局部最小值的内置函数。如果目标函数是凸问题,则只有一个盆地,局部最小值是全局最小值。在我的实验中从不同的初始点开始,该算法得到不同的最小值函数。我想知道fmincon是否保证收敛到凸问题的全局最小值。如果没有,是否还有其他技术可以尽快用于凸面优化?感谢。

P.S。 fmincon使用interior-point-method在默认情况下搜索最小值。这是interior-point method的正常问题,也就是说,从不同的初始点开始,该方法可以得到凸问题的不同全局最小值?

编辑:

目标是在通信过程中最小化一组用户的能量消耗总和,同时带宽的分配是搜索。传输速率

$r_k = x_k * log_2(1+\frac{g_k*p_k}{x_k})$

优化问题如下

$min_{x} sum_k \frac{p_k*b_k}{r_k}$
s.t. $sum_k x_k \leq X_{max}$

目标和约束都是凸的,因此这应该是凸优化问题。

对于编程代码,它如下,

options = optimoptions('fmincon');
problem.options = options;
problem.solver = 'fmincon';
problem.objective = @(x) langBW(x, in_s, in_e, C1, a, p_ul);
problem.Aineq = ones(1,user_num);
problem.bineq = BW2;
problem.nonlcon = @(x) nonlConstr_bw(x,a,p_ul,T1,in_s,in_e,BW2);

problem.x0 = ones(user_num,1)
[b_ul,fval] = fmincon(problem);

langBW是目标函数,它是x的凸函数,langBW的代码如下,

function fmin = langBW(x, in_s, in_e, C1, a, p_ul)
if size(x,1)<size(x,2)
    x = x';
end
b_ul = x;
r_ul = b_ul .* log2(1 + a.*p_ul./b_ul);

fmin = sum((in_s+in_e).*p_ul./r_ul) + sum(C1);

end

nonlConstr_bw是非线性约束的函数。如下所示,

function [c,ceq] = nonlConstr_bw(x,a,p_ul,T1,in_s,in_e)
user_num = size(p_ul,1);
if size(x,1)<size(x,2)
    x = x';
end
b_ul = x;
r_ul = b_ul .* log2(1 + a.*p_ul./b_ul);

c1 = max(in_s./r_ul) + in_e./r_ul - T1;
c = c1;
ceq = zeros(user_num,1);

end

x以外,提供所有其他变量。问题是,当我设置不同的problem.x0时,例如problem.x0=ones(user_num,1);时,[b_ul,fval] = fmincon(problem);的解与problem.x0=2*ones(user_num,1);时的解不同。这就是我感到困惑的原因。

1 个答案:

答案 0 :(得分:0)

fmincon使用following algorithms

'interior-point' (default)
'trust-region-reflective'
'sqp' (Sequential Quadratic Programming)
'sqp-legacy'
'active-set'

这些方法将汇聚到局部最小值,但不一定是全局最小值。进一步的最小值可能不是唯一的。保证全局最小值的唯一方法是搜索整个解决方案空间。

从您的评论中,似乎只有最小信号? (例如,移位的抛物线?)然后它应该收敛。

编辑 -

即使您的函数显示为凸面,约束也可能导致to multiple local minima。有时这被称为“松散”凸函数

enter image description here