簡體   English   中英

fmincon找不到凸函數的全局最小值

[英]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); 那就是我的困惑。

fmincon使用以下算法

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

這些方法將收斂到局部最小值,但不一定收斂到全局最小值。 進一步的最小值可能不是唯一的。 保證全局最小值的唯一方法是搜索整個解決方案空間。

根據您的評論,似乎只有信號極小值? (例如,拋物線移動了嗎?)然后它應該收斂。

編輯 -

即使您的函數看起來是凸的,約束也可能導致多個局部最小值 有時這稱為“松散”凸函數

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM