matlab加限定条件,遗传算法求多元函数极值,如何加限定条件
現在想求一個多元函數,但是想加個限定條件,就是各個 變量的和為1,已有多元函數求極值的程序,但是不知道這個各個變量和為1的條件如何添加,請各位大俠賜教。(因為我實際做的時候并不是針對多元函數,而是有多個變量的過程,所以沒有辦法用ga函數)
多元函數求極值程序主要部分如下:
NIND=40;? ?? ???%個體數目(Number of individuals)
MAXGEN=50;? ?? ?%最大遺傳代數(Maximum number of generations)
NVAR=2;? ?? ???%變量的維數
PRECI=25;? ?? ? %變量的二進制位數(Precision of variables)
GGAP=0.9;? ?? ? %代溝(Generation gap)
trace=zeros(MAXGEN,2);? ?? ?? ?? ?? ?? ?? ?? ?%尋優結果的初始值
FieldD=[rep([PRECI],[1,NVAR]);rep([-3;3],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];%區域描述器(Build field descriptor)
Chrom=crtbp(NIND, NVAR*PRECI);? ?? ?? ?? ?? ?? ?? ? %初始種群
gen=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%代計數器
x=bs2rv(Chrom,FieldD);? ?? ???%初始種群的目標函數值
ObjV=Shubert(x(:,1),x(:,2));? ?? ?%計算目標函數值
while gen
FitnV=ranking(ObjV);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %分配適應度值(Assign fitness values)
SelCh=select('sus', Chrom, FitnV, GGAP);? ?? ?? ?? ?? ?%選擇
SelCh=recombin('xovsp', SelCh, 0.7);? ?? ?? ?? ?? ?? ? %重組
SelCh=mut(SelCh);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%變異
x=bs2rv(SelCh,FieldD);? ?? ?? ?? ?? ?? ?? ?? ?? ? %子代十進制轉換
ObjVSel=Shubert(x(:,1),x(:,2));? ?? ?? ?? ?? ?? ?? ? %計算子代的目標函數值
[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新種群
gen=gen+1;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%代計數器增加
Y,bs2rv(Chrom(I,:),FieldD);
trace(gen,1)=min(ObjV);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %遺傳算法性能跟蹤
trace(gen,2)=sum(ObjV)/length(ObjV);
end
總結
以上是生活随笔為你收集整理的matlab加限定条件,遗传算法求多元函数极值,如何加限定条件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java写宽带连接.adsl拨号,并且检
- 下一篇: C语言for循环语句