導航:首頁 > 源碼編譯 > matlab遺傳演算法求最大值

matlab遺傳演算法求最大值

發布時間:2022-09-23 00:01:53

⑴ 這是用遺傳演算法求解matlab多峰函數最大值的程序 看了一天 還是很混亂 希望高手給詳細講解一下

首先第一步你要懂遺傳演算法的各個部分,然後對照各個部分的演算法,看代碼。
希望這個回答另你滿意。

⑵ matlab遺傳演算法編程求最大值的問題

(1)關於fitness value,你要自己定義一個函數,如你所說從25個x變數經過一系列運算得到y值 可以其作為fitness value
(2)由於x的取值是離散的 染色體不一定要是二進制 最簡單的做法是一個5進制的長為25的串

⑶ matlab,遺傳演算法,求大佬幫忙

用遺傳演算法求最大值問題,可以這樣來解決。

1、將最大值問題轉換為最小值問題,即 max Z =- min Z;

2、建立其自定義函數,即

z=-(f1*40^1.5/1+f2*30^1.5/2+f2*20^1.5/2+。。。+f12*127^1.5/2+f12*5^1.5/4)

其中:f1,f2,f3,。。。f11,f12為0,1變數,可以用sign()符號函數來處理。

3、用遺傳演算法ga()函數求解,使用方法

objectivef=@ga_func;

nvars=12;

[x, fval] =ga(objectivef,nvars)

4、編程運行後得到

f1=1,f2=1,f3=1,f4=0,f5=1,f6=0,f7=1,f8=1,f9=1,f10=1,f11=1,f12=1

Zmax=27329.5018

⑷ 請問用matlab怎樣求一個函數的最大值

用matlab求函數最大值的步驟如下:

1.

打開matlab軟體,清空桌面環境;

clear

clc

⑸ (遺傳演算法)已知一系列多元函數的點(如A、B、C到D的函數點),如何用matlab的遺傳演算法工具箱求其最大值

首先要有一個目標函數,如:y=x1^2-1+x2^3,變數個數,如 2
再有不等式、等式、邊界約束 ,如無則為[]
命令求最小值點:
[x,fva]=ga(@y,2,A,b,Aeq,beq,Lb,Ub)

⑹ 在matlab中如何用遺傳演算法求極值

matlab有遺傳演算法工具箱。

核心函數:
(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始種群的生成函數
【輸出參數】
pop--生成的初始種群
【輸入參數】
num--種群中的個體數目
bounds--代表變數的上下界的矩陣
eevalFN--適應度函數
eevalOps--傳遞給適應度函數的參數
options--選擇編碼形式(浮點編碼或是二進制編碼)[precision F_or_B],如
precision--變數進行二進制編碼時指定的精度
F_or_B--為1時選擇浮點編碼,否則為二進制編碼,由precision指定精度)

(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遺傳演算法函數
【輸出參數】
x--求得的最優解
endPop--最終得到的種群
bPop--最優種群的一個搜索軌跡
【輸入參數】
bounds--代表變數上下界的矩陣
evalFN--適應度函數
evalOps--傳遞給適應度函數的參數
startPop-初始種群
opts[epsilon prob_ops display]--opts(1:2)等同於initializega的options參數,第三個參數控制是否輸出,一般為0。如[1e-6 1 0]
termFN--終止函數的名稱,如['maxGenTerm']
termOps--傳遞個終止函數的參數,如[100]
selectFN--選擇函數的名稱,如['normGeomSelect']
selectOps--傳遞個選擇函數的參數,如[0.08]
xOverFNs--交叉函數名稱表,以空格分開,如['arithXover heuristicXover simpleXover']
xOverOps--傳遞給交叉函數的參數表,如[2 0;2 3;2 0]
mutFNs--變異函數表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']
mutOps--傳遞給交叉函數的參數表,如[4 0 0;6 100 3;4 100 3;4 0 0]

注意】matlab工具箱函數必須放在工作目錄下
【問題】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9
【分析】選擇二進制編碼,種群中的個體數目為10,二進制編碼長度為20,交叉概率為0.95,變異概率為0.08
【程序清單】
%編寫目標函數
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函數存儲為fitness.m文件並放在工作目錄下

initPop=initializega(10,[0 9],'fitness');%生成初始種群,大小為10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遺傳迭代

運算借過為:x =
7.8562 24.8553(當x為7.8562時,f(x)取最大值24.8553)

註:遺傳演算法一般用來取得近似最優解,而不是最優解。

遺傳演算法實例2

【問題】在-5<=Xi<=5,i=1,2區間內,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】種群大小10,最大代數1000,變異率0.1,交叉率0.3
【程序清單】
%源函數的matlab代碼
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
%適應度函數的matlab代碼
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遺傳演算法的matlab代碼
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')

註:前兩個文件存儲為m文件並放在工作目錄下,運行結果為
p =
0.0000 -0.0000 0.0055

大家可以直接繪出f(x)的圖形來大概看看f(x)的最值是多少,也可是使用優化函數來驗證。matlab命令行執行命令:
fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])

evalops是傳遞給適應度函數的參數,opts是二進制編碼的精度,termops是選擇maxGenTerm結束函數時傳遞個maxGenTerm的參數,即遺傳代數。xoverops是傳遞給交叉函數的參數。mutops是傳遞給變異函數的參數。

⑺ MATLAB用遺傳演算法ga求最大值中的最小值

MATLAB用遺傳演算法ga求含有最大值的最小值問題,可以這樣處理:由於最大值問題的反問題就是最小值問題,所以 max=-min。因此,你的問題就可以改寫為

min ( min -(3*x1+4*x2+...))

⑻ 遺傳演算法matlab編程求函數最大值

X1X2要先轉成二進制編碼,然後取隨機數,從X1X2中,按這個隨機數指定的位置開始交換數據,然後轉回十進制.染色體還需要拆開嗎?
求最大值:
len = length(fit);
max = fit(1);
position = 1;
for i=2:len
if max<fit(i)
max = fit(i);
position = i;
end
end

⑼ 通過MATLAB遺傳演算法的思想來解決f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值問題。結果精確到3位小數。

首先在matlab命令窗口輸入f=@(x)-(x*sin(10*pi*x)+2) 輸出結果為

>> f=@(x)-(x*sin(10*pi*x)+2)

f =

@(x)-(x*sin(10*pi*x)+2)

接著輸入gatool會打開遺傳演算法工具箱

顯示51代之後演算法終止,最小結果為-3.85027334719567,對應的x為1.851,由於自定義函數加了負號,所以原式的最大值為3.85027334719567,對應的x為1.851。

不過這是遺傳演算法得到的結果,每次運行的結果可能會有所不同,而且不一定是確切的最大值。

遺傳演算法適合應用在一些求最優解比較復雜的問題(常規的演算法運算時間過長,甚至無法解決)。

⑽ Matlab遺傳演算法求函數最大值

figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);
NIND=40;
MAXGEN=25;
PRECI=20;
GGAP=0.9;
trace=zeros(2,MAXGEN);
FieldD=[20;-1;2;1;0;1;1];
Chrom=CRTBP(NIND,PRECI);
gen=0;
variable=BS2RV(Chrom,FieldD);
ObjV=variable.*sin(10*pi*variable)+2.0;
while gen<MAXGEN,
FitnV=ranking(-ObjV);
SelCh=SELECT('SUS',Chrom,FitnV,GGAP);
SelCh=RECOMBIN('XOVSP',SelCh,0.7)
SelCh=MUT(SelCh);
variable=BS2RV(SelCh,FieldD);
ObjVSel=variable.*sin(10*pi*variable)+2.0;
[Chrom,ObjV]=REINS(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
[Y,I]=max(ObjV),hold on;
plot(variable(I),Y,'bo');
trace(1,gen)=max(ObjV);
trace(2,gen)=sum(ObjV)/length(ObjV);
end
variable=BS2RV(Chrom,FieldD);
hold on;
grid;
plot(variable',ObjV','b*');
figure(2);
plot(trace(1,:)');
hold on;
plot(trace(2,:)','-.');
grid;
看看這個能用得上么

閱讀全文

與matlab遺傳演算法求最大值相關的資料

熱點內容
GM附魔命令 瀏覽:597
反編譯自己製作的軟體 瀏覽:33
ros用c還是python好 瀏覽:76
安卓九系統提醒怎麼關 瀏覽:654
我的世界伺服器有領地怎麼抄家 瀏覽:36
python實現多態 瀏覽:300
幼師pdf 瀏覽:941
你怎麼用python開發游戲 瀏覽:647
雷霆戰機伺服器異常是什麼問題 瀏覽:669
程序員客棧20 瀏覽:254
化妝pdf下載 瀏覽:923
takla伺服器ip地址 瀏覽:357
歐盟加密資產法律 瀏覽:573
威綸通反編譯密碼是多少 瀏覽:201
51單片機有40個外部引腳 瀏覽:956
山西撥號伺服器雲空間 瀏覽:714
python中階乘怎麼計算 瀏覽:530
linux查看塊大小 瀏覽:554
空調壓縮機壓力低 瀏覽:184
pdf怎麼復制粘貼文字 瀏覽:576