我想遵從下面給出Matlab的 - 正確設置fmincon當目標和非線性制約性需要參數
http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-7.html
的意見,但我有麻煩。我有一個複雜的目標,可以將複雜的非線性約束減至最小,所有這些都是我3個選擇變量的函數,以及各種各樣的參數。我的腳本啓動一切看起來是這樣的:
% define a bunch of parameters
gamma= .2;
beta = .3; %
x0=[.5 .5 .5];
%etc
solution = nested_minimization_program(x0,gamma,beta)
Nested_minimization_program看起來是這樣的:
function out = nest_minimization-program(x0,gamma,beta)
options = optimset('GradObj','on');
out = fmincon(@objective,x0,[],[],[],[],[0 0 0],[1 1 1],@nonlin,options)
function [obj obj_gradient] = objective(x)
[obj obj_gradient] = complicated_objective(x,gamma,beta);
end
function [ineq_constriant eq_constraint] = nonlin(x)
[ineq_constriant eq_constraint] = complicated_constaints(x,beta,gamma)
end
end
Complicated_objective是用於返回第一個參數的客觀價值的文件,並且anlaytical梯度值爲第二。 Complicated_constaints爲其第一個參數返回一個非線性不等式約束矢量,併爲其第二個非線性等式約束矢量。
做的原因是這樣的話,我可以使用fmincon的@objective和@nonlin語法; objective和nonlin只是x的函數,而不是參數的函數,因爲它們是已經傳遞了參數的函數的子函數。我相信這是我爲了將梯度和非線性約束傳遞給fmincon而應該使用的形式。我的問題是,當我運行此代碼,我得到以下錯誤
警告:信賴域反射算法不能解決使用有效集算法這類問題, 。您也可以嘗試內點或SQP 算法:設置算法選項設置爲「內點」或「小數量議定書」並重新運行。對於 更多幫助,請參閱文檔中選擇的算法。
IE,由於某些原因,fmincon離開Trust-region反射算法並轉到活動集,它不利用我的分析梯度。爲fmincon使用分析梯度的要求是,根據http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-3.html,
編寫代碼返回: 目標函數(標量)作爲第一輸出
梯度(載體)作爲第二輸出
設置「對」的GradObj選項與optimset。
objective返回目標的標量值和所需的梯度,Gradobj打開,所以我沒有看到我的問題。
fmincon通常希望回答它可以與開始:(OUT = fmincon(@目標,X0,[],[],[],[0 0 0],[1 1 1],@ NONLIN,選項)X0不能爲空......(至少在使用優化工具箱我簡短的經驗) – Rasman 2011-04-13 04:24:18
你當然是正確的 - 如果我跑了代碼上面寫的,它甚至不會跑,不要介意不使用算法我想要。在我的實際代碼中提供了初始猜測,我將更新問題以反映這一點。 – Dennis 2011-04-13 16:20:56