資源簡介
PSO(粒子群優化算法)的VB程序。VB6.0程序源代碼以及界面設計,用以實現粒子群優化算法.
粒子群優化算法

代碼片段和文件信息
%?下面舉例說明遺傳算法?%
%?求下列函數的最大值?%
%?f(x)=10*sin(5x)+7*cos(4x)?x∈[010]?%
%?將?x?的值用一個10位的二值形式表示為二值問題,一個10位的二值數提供的分辨率是每為?(10-0)/(2^10-1)≈0.01?。?%
%?將變量域?[010]?離散化為二值域?[01023]?x=0+10*b/1023?其中?b?是?[01023]?中的一個二值數。?%
%?%
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%
%?編程
%-----------------------------------------------
function?y=min(x)
clear
clf
popsize=20;?%群體大小
chromlength=10;?%字符串長度(個體長度)
pc=0.6;?%交叉概率
pm=0.001;?%變異概率
pop=initpop(popsizechromlength);?%隨機產生初始群體
for?i=1:20?%20為迭代次數
[objvalue]=calobjvalue(pop);?%計算目標函數
fitvalue=calfitvalue(objvalue);?%計算群體中每個個體的適應度
[newpop]=selection(popfitvalue);?%復制
[newpop]=crossover(poppc);?%交叉
[newpop]=mutation(poppc);?%變異
[bestindividualbestfit]=best(popfitvalue);?%求出群體中適應值最大的個體及其適應值
y(i)=max(bestfit);
n(i)=i;
pop5=bestindividual;
x(i)=decodechrom(pop51chromlength)*10/1023;
pop=newpop;
end
fplot(‘10*sin(5*x)+7*cos(4*x)‘[0?10])
hold?on
plot(xy‘r*‘)
hold?off
[z?index]=max(y);?%計算最大值及其位置
x5=x(index)%計算最大值對應的x值
y=z
%?2.1初始化(編碼)
%?initpop.m函數的功能是實現群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數的長度),
%?長度大小取決于變量的二進制編碼的長度(在本例中取10位)。
%遺傳算法子程序
%Name:?initpop.m
%初始化
function?pop=initpop(popsizechromlength)?
pop=round(rand(popsizechromlength));?%?rand隨機產生每個單元為?{01}?行數為popsize,列數為chromlength的矩陣,
%?roud對矩陣的每個單元進行圓整。這樣產生的初始種群。
%?2.2?計算目標函數值
%?2.2.1?將二進制數轉化為十進制數(1)
%遺傳算法子程序
%Name:?decodebinary.m
%產生?[2^n?2^(n-1)?...?1]?的行向量,然后求和,將二進制轉化為十進制
function?pop2=decodebinary(pop)
[pxpy]=size(pop);?%求pop行和列數
for?i=1:py
pop1(:i)=2.^(py-i).*pop(:i);
end
pop2=sum(pop12);?%求pop1的每行之和
%?2.2.2?將二進制編碼轉化為十進制數(2)
%?decodechrom.m函數的功能是將染色體(或二進制編碼)轉換為十進制,參數spoint表示待解碼的二進制串的起始位置
%?(對于多個變量而言,如有兩個變量,采用20為表示,每個變量10為,則第一個變量從1開始,另一個變量從11開始。本例為1),
%?參數1ength表示所截取的長度(本例為10)。
%遺傳算法子程序
%Name:?decodechrom.m
%將二進制編碼轉換成十進制
function?pop2=decodechrom(popspointlength)
pop1=pop(:spoint:spoint+length-1);
pop2=decodebinary(pop1);
%?2.2.3?計算目標函數值
%?calobjvalue.m函數的功能是實現目標函數的計算,其公式采用本文示例仿真,可根據不同優化問題予以修改。
%遺傳算法子程序
%Name:?calobjvalue.m
%實現目標函數的計算
function?[objvalue]=calobjvalue(pop)
temp1=decodechrom(pop110);?%將pop每行轉化成十進制數
x=temp1*10/1023;?%將二值域?中的數轉化為變量域?的數
objvalue=10*sin(5*x)+7*cos(4*x);?%計算目標函數值
%?2.3?計算個體的適應值
%遺傳算法子程序
%Name:calfitvalue.m
%計算個體的適應值
function?fitvalue=calfitvalue(objvalue)
global?Cmin;
Cmin=0;
[pxpy]=size(objvalue);
for?i=1:px
if?objvalue(i)+Cmin>0
temp=Cmin+objvalue(i);
else
temp=0.0;
end
fitvalue(i)=temp;
end
fitvalue=fitvalue‘;
%?2.4?選擇復制
%?選擇或復制操作是決定哪些個體可以進入下一代。程序中采用賭輪盤選擇法選擇,這種方法較易實現。
%?根據方程?pi=fi/∑fi=fi/fsum?,選擇步驟:
%?1)?在第?t?代,由(1)式計算?fsum?和?pi?
%?2)?產生?{01}?的隨機數?rand(?.),求?s=rand(?.)*fsum
%?3)?求?∑fi≥s?中最小的?k?,則第?k?個個體被選中
%?4)?進行?N?次2)、3)操作,得到?N?個個體,成為第?t=t+1?代種群
%遺傳算法子程序
%Name:?selection.m
%選擇復制
function?[newpop]=selection(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-02-01?13:43??PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\
?????文件??????110229??2018-07-29?19:30??PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\WechatIMG2.jpeg
?????目錄???????????0??2019-02-01?13:43??__MACOSX\
?????目錄???????????0??2019-02-01?13:43??__MACOSX\PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\
?????文件?????????266??2018-07-29?19:30??__MACOSX\PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\._WechatIMG2.jpeg
?????文件????????6148??2019-02-01?13:43??PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\.DS_Store
?????文件?????????120??2019-02-01?13:43??__MACOSX\PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\._.DS_Store
?????文件????????5932??2019-02-01?13:41??PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\GA.m
?????文件?????????676??2019-02-01?13:41??__MACOSX\PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\._GA.m
?????文件???????23447??2019-02-01?13:40??PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\vbpso.zip
?????文件?????????666??2019-02-01?13:40??__MACOSX\PSO(綺掑瓙緹や紭鍖栫畻娉?鐨刅B紼嬪簭\._vbpso.zip
- 上一篇:集裝箱裝箱計算源代碼
- 下一篇:VB編寫的Modbus_RTU
評論
共有 條評論