簡體   English   中英

如何使用其導數應始終大於0的約束來最小化函數

[英]How to minimize a function with the constraint that its derivative should be always greater than 0

我試圖用Matlab中的fmincon幫助優化1500個變量(瞬時相位)的非線性函數。 對最優變量的約束是獲得的最優變量中的連續元素之間的差異應該大於0.我如何在成本函數中實現這一點? 我使用了非線性約束:

function [c,ceq] = insta_freq(phase)
f=diff(phase);
c=-1*double(min(f));
ceq = [];

優化通過以下方式執行:

nonlcon=@insta_freq;
[variable_opt,fval,exitflag,output] = fmincon(fun,ph0,[],[],[],[],[],[],nonlcon,options);

優化應該是約束nonlcon<=0但是在用fmincon優化時,不滿足這些約束。 那么,還有其他方法可以確保最優變量向量的差異總是大於0嗎?

您可以嘗試減少約束容差 同樣在問題中,你似乎指的是目標函數的導數,而在問題本身中,你似乎希望每個單詞都比前一個更大,如x1 <= x2 <= x3 <= ... <= xn。 我建議一個可能解決后一個問題的方法(第一個甚至不能定義局部最優,所以我假設報告的條件是你想要的)。

您可以在A = [1 -1 0 ... 0; 0 1 -1 0 ... 0; .... 1 -1]所以你的約束是不等式線性約束,簡單地寫成Aineq x <= b其中b = [0; ...; 0];

你剛才打電話

[variable_opt,fval,exitflag,output] = fmincon(fun,ph0,A,b,[],[],[],[],nonlcon,options);

其中A和b是上面定義的。

暫無
暫無

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

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