[英]fmincon doesn't find a global minimum for a convex function
我认为, fmincon
是matlab中用于局部最小值的内置函数。 如果目标函数是凸问题,则只有一个盆地,而局部最小值是整体最小值。 当从实验中的不同初始点开始时,该算法获得了不同的最小值函数。 我想知道fmincon
保证收敛到凸问题的全局最小值。 如果没有,我是否可以使用其他任何技术来尽可能快地进行凸优化? 谢谢。
PS 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);
时的情况不同problem.x0=2*ones(user_num,1);
。 那就是我的困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.