『壹』 matlab fmincon 怎麼添加非線性約束
,un為目標函數,它可用前面的方法定義;
『貳』 matlab ga函數的非線性約束和目標函數能不能不單獨寫M文件,把所有的代碼都放到一個M文件可以嗎
可以,將所有函數都寫到一個文件中
不過這個文件也只能是函數文件
你可以為你的函數文件先寫一個總函數,類似於C語言的main函數
然後其它的函數寫在後面
寫在同一個函數文件中的函數是可以互相調用的
例如:
function[]=main()
.....
.....
x=ga(@objfun,nvars,.....);
.....
end
functionoutput=objfun(x)
.....
.....
end
實際上,就是將原來要在命令行里運行的代碼
或者要寫在腳本m文件中要運行的代碼寫到main函數中
當然不一定要命名為main,可以改其它名字
只要將該函數放在最先的位置就可以了
函數m文件以第一個定義的函數作為主函數
而後面可以定義更多的函數,都可以被主函數調用
這樣就是將優化函數、約束函數、和主函數寫在同一個文件的辦法
但是,由於主體運行的代碼被被封裝為一個函數
所以不能像腳本m文件那樣調用base工作空間中變數
生成的變數也不保存在base工作空間中
當函數運行完畢,退出的時候,它運行時所產生的變數將會被清空
你可以將要輸入和輸出的變數以函數輸入參數和輸出參數的形式傳遞
實際上不及用腳本m文件方便
但是腳本m文件中是不能用function語句定義函數的
『叄』 請問,Matlab遺傳演算法工具箱能施加的非線性隱性約束條件嗎謝謝!!!
Matlab遺傳演算法工具箱是可以施加的非線性隱性約束條件的。例如:
min z= 3050*x1³+0.25*x2;
其中x1定義域[-0.381,0.381],x2定義域[-100,100]
求目標函數值為10時的x1、x2值。
求解結果
x1=0.14169943480903302 x2=5.289387991237991
function [c,ceq]=ga_con(x) %非線性約束條件函數
c=10-(3050*x(1)^3+0.25*x(2));
ceq=[];
『肆』 Matlab利用GA演算法的多約束非線性問題求助
你的ga函數使用不對,猜測是你用的代碼的matlab版本比較老,你自己的matlab比較新,ga函數經過幾次的升級,調用方法進行了改進。
『伍』 使用matlab遺傳演算法工具箱如何加入目標函數中變數的約束條件啊,可否在M文件中加
首先回答你第一個問題:怎麼加入變數的約束條件?
打開遺傳演算法工具箱的窗體中會有下圖所示的選項,即是約束條件的編輯
至於添加的方式,這里要重點的提一下,首先將問題抽象成規劃問題的標准形式(如果你不懂什麼是標准形式的話,建議你去翻閱運籌學那本書,上告訴你什麼是標准形式),然後用矩陣語言寫出來,最後將矩陣的系數填寫到線性不等約束和線性相等約束中,同時定義所求變數x的上界和下界(記住有多少個變數就有多少列,如果你發現有些條件中沒有出現某些變數,那麼就應該用0補足,這個是matlab解決規劃問題與lingo想比較麻煩的一個地方,)。
然後回答你第二個問題:可否在M文件中添加約束條件?
當然可以,界面的東西是為了方便不熟悉matlab編程的人而設計出來的,但是其底層的演算法和介面肯定是有的。
碰到不懂的函數,請記得:help函數名
helpga之後會得到一下一些函數
ga
//這個是定義
Syntax //這個是語法也即是調用的規則
x=ga(fitnessfcn,nvars)
x=ga(fitnessfcn,nvars,A,b)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
x=ga(problem)
[x,fval]=ga(...)
[x,fval,exitflag]=ga(...)直接給你將最長的那個吧
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
X是返回所求的解
fitnessfcn是適應度函數
nvars是適應度函數中所含變數的維數
A是不等式約束中變數的系數矩陣,b是不等式約束中不含變數的值矩陣
Aeq是等式約束中變數的系數矩陣,beq是等式約束中不含變數的值矩陣
LB是下界,UB是上界
nonlcon是非線性約束條件
至於options嘛 我也木有用過,其實你也可以不用管的。
懂了木有呢,親?
『陸』 用matlab的optimization工具箱遺傳演算法,添加約束條件的問題。
你看到下邊那個nonlinear constraint function了嗎?
把你的約束寫在一個m文件的function中,函數名比如取為:xconstr
則將@xconstr寫到nonlinear constraint function後面的框里,應該就可以了。線性約束的話直接寫在上方的欄目中。
你的優化問題沒看到,用遺傳演算法求解一般沒有問題。這種智能優化演算法的最大優點在於求解多局部解優化問題時能得到全局性較好的最有解。如果你不考解的全局最優性的話,可以直接使用fmincon函數來求解。關於fmincon函數,可以在matlab命令行中輸入 doc fmincon命令以查看幫助。
『柒』 用Matlab解決有約束的非線性問題
用matlab裡面的optimazation tool工具,來解決有約束的非線性問題。
首先,應分別建立自定義極值函數fmincon_fun(x)和自定義約束函數fmincon_con(x)
其二,用optimtool命令,打開optimazation tool工具箱
其三,分別用@fmincon_fun和@fmincon_con填入對於命令框內,同時將初值設定為【0,0】
最後,點擊Start按鈕,可以求得x1=-0.2,x2=0.2,f=0.8
自定義極值函數fmincon_fun(x)和自定義約束函數fmincon_con(x)的內容:
function f=fmincon_fun(x)
x1=x(1);x2=x(2);
f=(x1-x2)^2+(x2-1)^2
end
function [c,ceq]=fmincon_con(x)
x1=x(1);x2=x(2);
c(1)=x1^2-x2;
c(2)=x1+x2
ceq=[];
end
『捌』 matlab遺傳演算法優化問題中,非線性等式約束怎麼添加啊
建立約束條件函數,把非線性的等式約束條件添加加在[c,ceq]中。如
function [c,ceq]=NonCon(x)
c=x(1)^2+x(2)^2-9;
ceq=[];
然後,再用ga()函數調用,如
[x, fval, exitflag] =ga(o@FitFun,nvars,A,b,Aeq,beq,lb,ub,NonCon)