導航:首頁 > 源碼編譯 > matlab遺傳演算法vrp

matlab遺傳演算法vrp

發布時間:2022-06-20 09:13:59

『壹』 急求基於遺傳演算法的vrp模型matlab代碼

已經加你了。。。。

『貳』 如何用matlab解決多元遺傳演算法問題

如何用matlab解決多元遺傳演算法的極值問題?可以按下列步驟做

1、首先,建立自定義帶條件的最大值目標函數文件,ga_fun.m

if x(1)+x(2)>=-1

y=-(exp(-0.1*(x(1)^4+x(2)^4))+ exp(cos(2*pi*x(1))+cos(2*pi*x(2)))

else

y=inf

end

式中:x=x(1),y=x(2)

2、利用ga遺傳演算法工具箱求解

3、在工具箱中,Fitness function項輸入@ga_fun;Number of variables項輸入2;Lower項輸入[-1,2];Upper項輸入[2,1];

4、點擊Start按鈕,運行可以得到 fmax(0,0)值(Objective function value)。說明這里負號是最大值的標志

運行界面

『叄』 VRP問題的遺傳演算法,誰有MATLAB的代碼

我發一些他們的源程序你,都是我在文獻中搜索總結出來的:
%
下面舉例說明遺傳演算法
%
%
求下列函數的最大值
%
%
f(x)=10*sin(5x)+7*cos(4x)
x∈[0,10]
%
%

x
的值用一個10位的二值形式表示為二值問題,一個10位的二值數提供的解析度是每為
(10-0)/(2^10-1)≈0.01

%
%
將變數域
[0,10]
離散化為二值域
[0,1023],
x=0+10*b/1023,
其中
b

[0,1023]
中的一個二值數。
%
%
%
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%
%
編程
%-----------------------------------------------
%
2.1初始化(編碼)
%
initpop.m函數的功能是實現群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數的長度),
%
長度大小取決於變數的二進制編碼的長度(在本例中取10位)。
%遺傳演算法子程序
%name:
initpop.m
%初始化
function
pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength));
%
rand隨機產生每個單元為
{0,1}
行數為popsize,列數為chromlength的矩陣,
%
roud對矩陣的每個單元進行圓整。這樣產生的初始種群。
%
2.2.2
將二進制編碼轉化為十進制數(2)
%
decodechrom.m函數的功能是將染色體(或二進制編碼)轉換為十進制,參數spoint表示待解碼的二進制串的起始位置
%
(對於多個變數而言,如有兩個變數,採用20為表示,每個變數10為,則第一個變數從1開始,另一個變數從11開始。本例為1),
%
參數1ength表示所截取的長度(本例為10)。
%遺傳演算法子程序
%name:
decodechrom.m
%將二進制編碼轉換成十進制
function
pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
%
2.4
選擇復制
%
選擇或復制操作是決定哪些個體可以進入下一代。程序中採用賭輪盤選擇法選擇,這種方法較易實現。
%
根據方程
pi=fi/∑fi=fi/fsum
,選擇步驟:
%
1)
在第
t
代,由(1)式計算
fsum

pi
%
2)
產生
{0,1}
的隨機數
rand(
.),求
s=rand(
.)*fsum
%
3)

∑fi≥s
中最小的
k
,則第
k
個個體被選中
%
4)
進行
n
次2)、3)操作,得到
n
個個體,成為第
t=t+1
代種群
%遺傳演算法子程序
%name:
selection.m
%選擇復制
function
[newpop]=selection(pop,fitvalue)
totalfit=sum(fitvalue);
%求適應值之和
fitvalue=fitvalue/totalfit;
%單個個體被選擇的概率
fitvalue=cumsum(fitvalue);
%如
fitvalue=[1
2
3
4],則
cumsum(fitvalue)=[1
3
6
10]
[px,py]=size(pop);
ms=sort(rand(px,1));
%從小到大排列
fitin=1;
newin=1;
while
newin<=px
if(ms(newin))
評論
0
0
載入更多

『肆』 matlab中遺傳演算法如何使用

看情況是你沒安裝GA工具箱,就是要將GA工具箱(一系列m文件)復制到到matlab目錄下的toolbox文件夾裡面,之後打開matlab,點擊工具欄 file-set path-add folder,把GA工具箱所在的文件夾添加進去。

『伍』 matlab怎麼運行基於遺傳演算法的vrp

function [x fx string]=fun_SuiJiSuanFa2(N,genLenth,Pc,Pm,downbound,upbound,generation)
%[x fx string]=fun_SuiJiSuanFa2(6,16,0.7,0.01,-3,3,100)
%f 表示函數
%N表示染色體種群大小
%genLenth表示染色體長度
%Pc表示交叉概率
%Pm表示突變概率
%downbound
%upbound
%generation循環代數

%進制編碼,此處編寫為二進制
num=2;
initdata=randi([0 num-1],N,genLenth);
%二進制編碼的權值
weight=(num).^(genLenth/2-1:-1:0);
weights=repmat(weight,N,1);
%保存每代的最好值和平均值,
meanally=zeros(1,generation);
maxally=zeros(1,generation);

Nowx=zeros(generation,genLenth);
for k=1:generation
%解碼後的整數
allx1=sum(initdata(:,1:genLenth/2).*weights,2);
allx2=sum(initdata(:,genLenth/2+1:end).*weights,2);
%映射到取值范圍
delt=(upbound-downbound)/(num^(genLenth/2)-1);
allx1=allx1.*delt+downbound;
allx2=allx2.*delt+downbound;
%染色體的適應性
ally=f(allx1,allx2);
%平均值,最大值
meanally(k)=mean(ally);
maxally(k)=max(ally);
%找下標,確定是哪條染色體
index=find(ally==maxally(k));
Nowx(k,:)=initdata(index(1),:);
%最大值沒有提高就取上次的
if(k>=2&&maxally(k)<maxally(k-1))
maxally(k)=maxally(k-1);
Nowx(k,:)=Nowx(k-1,:);
end
%染色體的適應性比率
ratio=ally./sum(ally);
%交叉,變異
%??交叉幾個,從第幾個開始。
%此處只交叉1個(總共才6個),隨機給一個。
sumRatio=cumsum(ratio);
data=zeros(N,genLenth);
for i=1:N/2
Select1=find(sumRatio>=rand);
Select2=find(sumRatio>=rand);
data(2*i-1,:)=initdata(Select1(1),:);
data(2*i,:)=initdata(Select2(1),:);
if(rand<Pc)
%交叉
location=randi([1,genLenth]);
temp=data(2*i-1,location:end);
data(2*i-1,location:end)=data(2*i,location:end);
data(2*i,location:end)=temp;
else
%變異
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i-1,location)=1-data(2*i-1,location);
end
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i,location)=1-data(2*i,location);
end
end
end
initdata=data;
end

fx=max(maxally);
lastIndex=find(maxally==fx);
string=Nowx(lastIndex(1),:);

x(1)=sum(string(1:genLenth/2).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
x(2)=sum(string(1+genLenth/2:end).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
%繪制性能圖
%figure,hold on;
clf;figure(1),hold on;
plot((1:k)',meanally,'b.-');
plot((1:k)',maxally,'r.:');
end

function fun=f(x,y)
fun=(1-x).^2.*exp(-x.^2-(1+y).^2)-(x-x.^3-y.^3).*exp(-x.^2-y.^2);
%fun=-(x-1).^2-3.*(y-2).^2+100;
end

『陸』 如何用matlab遺傳演算法編程

有兩種方法,一種是用matlab自帶的遺傳演算法工具箱;還有一種是自己編寫遺傳演算法解決問題。第二種方法的話,網上可以找到很多遺傳演算法的matlab代碼,我也可以提供。第一種的話,有一定的局限性。

『柒』 求matlab關於VRP問題的遺傳演算法程序

不知你的matlab是否是7.0以上版本?
用ga工具箱應該是很方便的 你沒給出具體數據我示範不出來

關於限制條件
ga函數里直接有的,功能很全
要自己設計交叉演算法很困難,范圍夠大的話直接加個條件判斷-不行重來就可以了

初始種群:
for i=1:種群大小
while 條件不合格
p=randperm(n);
end
pop{i}=p;
end

閱讀全文

與matlab遺傳演算法vrp相關的資料

熱點內容
伺服器出現兩個IPV4地址 瀏覽:844
宜興雲存儲伺服器 瀏覽:221
如何開放遠程伺服器上的埠號 瀏覽:67
大規模單片機廠家供應 瀏覽:952
3dmax編輯樣條線快捷命令 瀏覽:708
怎麼獲得音樂的源碼 瀏覽:251
郭麒麟參加密室完整版 瀏覽:320
單片機排線怎麼用 瀏覽:485
java字元串太長 瀏覽:868
python變數計算 瀏覽:117
網銀pdf 瀏覽:136
iponedns伺服器怎麼設置復原 瀏覽:407
深圳電力巡檢自主導航演算法 瀏覽:438
十二星座的布娃娃怎麼買app 瀏覽:323
反編譯打包地圖不顯示 瀏覽:92
沒有壓縮的圖片格式 瀏覽:468
斯維爾文件需不需要加密狗 瀏覽:300
柱加密區范圍在軟體中設置 瀏覽:706
紙質音樂壓縮教程 瀏覽:33
安卓手機健康碼快捷方式怎麼設置 瀏覽:477