資源簡(jiǎn)介
PSO(粒子群優(yōu)化算法)的VB程序。VB6.0程序源代碼以及界面設(shè)計(jì),用以實(shí)現(xiàn)粒子群優(yōu)化算法.
粒子群優(yōu)化算法

代碼片段和文件信息
%?下面舉例說明遺傳算法?%
%?求下列函數(shù)的最大值?%
%?f(x)=10*sin(5x)+7*cos(4x)?x∈[010]?%
%?將?x?的值用一個(gè)10位的二值形式表示為二值問題,一個(gè)10位的二值數(shù)提供的分辨率是每為?(10-0)/(2^10-1)≈0.01?。?%
%?將變量域?[010]?離散化為二值域?[01023]?x=0+10*b/1023?其中?b?是?[01023]?中的一個(gè)二值數(shù)。?%
%?%
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%
%?編程
%-----------------------------------------------
function?y=min(x)
clear
clf
popsize=20;?%群體大小
chromlength=10;?%字符串長(zhǎng)度(個(gè)體長(zhǎng)度)
pc=0.6;?%交叉概率
pm=0.001;?%變異概率
pop=initpop(popsizechromlength);?%隨機(jī)產(chǎn)生初始群體
for?i=1:20?%20為迭代次數(shù)
[objvalue]=calobjvalue(pop);?%計(jì)算目標(biāo)函數(shù)
fitvalue=calfitvalue(objvalue);?%計(jì)算群體中每個(gè)個(gè)體的適應(yīng)度
[newpop]=selection(popfitvalue);?%復(fù)制
[newpop]=crossover(poppc);?%交叉
[newpop]=mutation(poppc);?%變異
[bestindividualbestfit]=best(popfitvalue);?%求出群體中適應(yīng)值最大的個(gè)體及其適應(yīng)值
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);?%計(jì)算最大值及其位置
x5=x(index)%計(jì)算最大值對(duì)應(yīng)的x值
y=z
%?2.1初始化(編碼)
%?initpop.m函數(shù)的功能是實(shí)現(xiàn)群體的初始化,popsize表示群體的大小,chromlength表示染色體的長(zhǎng)度(二值數(shù)的長(zhǎng)度),
%?長(zhǎng)度大小取決于變量的二進(jìn)制編碼的長(zhǎng)度(在本例中取10位)。
%遺傳算法子程序
%Name:?initpop.m
%初始化
function?pop=initpop(popsizechromlength)?
pop=round(rand(popsizechromlength));?%?rand隨機(jī)產(chǎn)生每個(gè)單元為?{01}?行數(shù)為popsize,列數(shù)為chromlength的矩陣,
%?roud對(duì)矩陣的每個(gè)單元進(jìn)行圓整。這樣產(chǎn)生的初始種群。
%?2.2?計(jì)算目標(biāo)函數(shù)值
%?2.2.1?將二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)(1)
%遺傳算法子程序
%Name:?decodebinary.m
%產(chǎn)生?[2^n?2^(n-1)?...?1]?的行向量,然后求和,將二進(jìn)制轉(zhuǎn)化為十進(jìn)制
function?pop2=decodebinary(pop)
[pxpy]=size(pop);?%求pop行和列數(shù)
for?i=1:py
pop1(:i)=2.^(py-i).*pop(:i);
end
pop2=sum(pop12);?%求pop1的每行之和
%?2.2.2?將二進(jìn)制編碼轉(zhuǎn)化為十進(jìn)制數(shù)(2)
%?decodechrom.m函數(shù)的功能是將染色體(或二進(jìn)制編碼)轉(zhuǎn)換為十進(jìn)制,參數(shù)spoint表示待解碼的二進(jìn)制串的起始位置
%?(對(duì)于多個(gè)變量而言,如有兩個(gè)變量,采用20為表示,每個(gè)變量10為,則第一個(gè)變量從1開始,另一個(gè)變量從11開始。本例為1),
%?參數(shù)1ength表示所截取的長(zhǎng)度(本例為10)。
%遺傳算法子程序
%Name:?decodechrom.m
%將二進(jìn)制編碼轉(zhuǎn)換成十進(jìn)制
function?pop2=decodechrom(popspointlength)
pop1=pop(:spoint:spoint+length-1);
pop2=decodebinary(pop1);
%?2.2.3?計(jì)算目標(biāo)函數(shù)值
%?calobjvalue.m函數(shù)的功能是實(shí)現(xiàn)目標(biāo)函數(shù)的計(jì)算,其公式采用本文示例仿真,可根據(jù)不同優(yōu)化問題予以修改。
%遺傳算法子程序
%Name:?calobjvalue.m
%實(shí)現(xiàn)目標(biāo)函數(shù)的計(jì)算
function?[objvalue]=calobjvalue(pop)
temp1=decodechrom(pop110);?%將pop每行轉(zhuǎn)化成十進(jìn)制數(shù)
x=temp1*10/1023;?%將二值域?中的數(shù)轉(zhuǎn)化為變量域?的數(shù)
objvalue=10*sin(5*x)+7*cos(4*x);?%計(jì)算目標(biāo)函數(shù)值
%?2.3?計(jì)算個(gè)體的適應(yīng)值
%遺傳算法子程序
%Name:calfitvalue.m
%計(jì)算個(gè)體的適應(yīng)值
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?選擇復(fù)制
%?選擇或復(fù)制操作是決定哪些個(gè)體可以進(jìn)入下一代。程序中采用賭輪盤選擇法選擇,這種方法較易實(shí)現(xiàn)。
%?根據(jù)方程?pi=fi/∑fi=fi/fsum?,選擇步驟:
%?1)?在第?t?代,由(1)式計(jì)算?fsum?和?pi?
%?2)?產(chǎn)生?{01}?的隨機(jī)數(shù)?rand(?.),求?s=rand(?.)*fsum
%?3)?求?∑fi≥s?中最小的?k?,則第?k?個(gè)個(gè)體被選中
%?4)?進(jìn)行?N?次2)、3)操作,得到?N?個(gè)個(gè)體,成為第?t=t+1?代種群
%遺傳算法子程序
%Name:?selection.m
%選擇復(fù)制
function?[newpop]=selection(
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
- 上一篇:集裝箱裝箱計(jì)算源代碼
- 下一篇:VB編寫的Modbus_RTU
評(píng)論
共有 條評(píng)論