導航:首頁 > 源碼編譯 > 粒子群演算法數學建模應用實例

粒子群演算法數學建模應用實例

發布時間:2022-03-01 05:53:51

㈠ 粒子群優化演算法(PSO)有沒有專門的軟體啊

MATLAB裡面有遺傳演算法的的工具箱,PSO可以用到

㈡ 求幫忙啊,粒子群演算法的代碼基於MATLAB編寫

20072*g,fkd自己想啊

㈢ 粒子群優化演算法(PSO)的matlab運行程序~~謝謝大家啦!

%不知道你具體的問題是什麼,下面是一個最基本的pso演算法解決函數極值問題,如果是一些大型的問題,需要對速度、慣性常數、和自適應變異做進一步優化,希望對你有幫助
function y = fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289;
%下面是主程序
%% 清空環境
clc
clear

%% 參數初始化
%粒子群演算法中的兩個參數
c1 = 1.49445;
c2 = 1.49445;

maxgen=200; % 進化次數
sizepop=20; %種群規模

Vmax=1;%速度限制
Vmin=-1;
popmax=5;%種群限制
popmin=-5;

%% 產生初始粒子和速度
for i=1:sizepop
%隨機產生一個種群
pop(i,:)=5*rands(1,2); %初始種群
V(i,:)=rands(1,2); %初始化速度
%計算適應度
fitness(i)=fun(pop(i,:)); %染色體的適應度
end

%找最好的染色體
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %個體最佳
fitnessgbest=fitness; %個體最佳適應度值
fitnesszbest=bestfitness; %全局最佳適應度值

%% 迭代尋優
for i=1:maxgen

for j=1:sizepop

%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;

%種群更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;

%自適應變異(避免粒子群演算法陷入局部最優)
if rand>0.8
k=ceil(2*rand);%ceil朝正無窮大方向取整
pop(j,k)=rand;
end

%適應度值
fitness(j)=fun(pop(j,:));

%個體最優更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end

%群體最優更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end

end
yy(i)=fitnesszbest;

end

%% 結果分析
plot(yy)
title(['適應度曲線 ' '終止代數=' num2str(maxgen)]);
xlabel('進化代數');ylabel('適應度');

㈣ 粒子群演算法及其應用

既然是數學系的,可以考慮從粒子群演算法的收斂性證明和分布性檢驗方面著手,偏理論性的證明,這方面比較欠缺,有點類似於高樓地基不穩,大家卻在上面繼續壘
可以參考遺傳演算法的模式定理或隱性並行性定理等,如果能夠提出關於粒子群演算法的定理,應該足夠具有挑戰性了
還有就是對粒子群演算法進行演算法融合或改進,然後針對改進的演算法進行測試,檢驗其在函數優化等方面的效能。

㈤ 粒子群演算法及應用的介紹

粒子群演算法是一種新的模仿鳥類群體行為的智能優化演算法,現已成為進化演算法的一個新的重要分支。全書共分為八章,分別論述了基本粒子群演算法和改進粒子群演算法的原理,並且詳細介紹了粒子群演算法在函數優化、圖像壓縮和基因聚類中的應用,最後給出了粒子群演算法的應用綜述和相關程序代碼。

㈥ 求實現基於粒子群演算法的函數極值尋優演算法MATLAB程序

for i=1:sizepop
% 隨機產生一個種群
pop(i,:)=2*rands(1,2); % 初始化粒子
V(i,:)=0.5*rands(1,2); % 初始化速度

% 計算粒子適應度值
fitness(i)=fun(pop(i,:));
end

[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); % 群體極值位置
gbest=pop; % 個體極值位置
fitnessgbest=fitness; % 個體極值適應度值
fitnesszbest=bestfitness % 群體極值適應度值
% 迭代尋優
for i=1:maxgen
% 粒子位置和速度更新
for j=1:sizepop
% 速度更新
V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;

% 粒子更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;

%新粒子適應度值
fitness(j)=fun(pop(j,:));
end

% 個體極值和種群極值更新
for j=1:sizepop

% 個體極值更新
if fitness(j)>fitnessgbest(j)
gbest(j,:)=pop(j,:);
fitnessgbest(j)=fitness(j);
end

% 群體極值更新
if fitness(j)>fitnesszbest
zbest=pop(j,:);
fitnesszbest=fitness(j);
end
end

% 每代最優值記錄到yy數組中
result(i)=fitnesszbest;
end
% 畫出每代最優個體適應度值
plot(result)
title('最優個體適應度值','fontsize',12);
xlabel('進化代數','fontsize',12);ylabel('適應度值','fontsize',12);

㈦ 求大神給出基於粒子群演算法的多目標搜索演算法的完整程序。。。從目標函數到最後。。

%% 該函數演示多目標perota優化問題
%清空環境
clc
clear
load data
%% 初始參數
objnum=size(P,1); %類中物品個數
weight=92; %總重量限制

%初始化程序
Dim=5; %粒子維數
xSize=50; %種群個數
MaxIt=200; %迭代次數
c1=0.8; %演算法參數
c2=0.8; %演算法參數
wmax=1.2; %慣性因子
wmin=0.1; %慣性因子

x=unidrnd(4,xSize,Dim); %粒子初始化
v=zeros(xSize,Dim); %速度初始化

xbest=x; %個體最佳值
gbest=x(1,:); %粒子群最佳位置

% 粒子適應度值
px=zeros(1,xSize); %粒子價值目標
rx=zeros(1,xSize); %粒子體積目標
cx=zeros(1,xSize); %重量約束

% 最優值初始化
pxbest=zeros(1,xSize); %粒子最優價值目標
rxbest=zeros(1,xSize); %粒子最優體積目標
cxbest=zeros(1,xSize); %記錄重量,以求約束

% 上一次的值
pxPrior=zeros(1,xSize);%粒子價值目標
rxPrior=zeros(1,xSize);%粒子體積目標
cxPrior=zeros(1,xSize);%記錄重量,以求約束

%計算初始目標向量
for i=1:xSize
for j=1:Dim %控制類別
px(i) = px(i)+P(x(i,j),j); %粒子價值
rx(i) = rx(i)+R(x(i,j),j); %粒子體積
cx(i) = cx(i)+C(x(i,j),j); %粒子重量
end
end
% 粒子最優位置
pxbest=px;rxbest=rx;cxbest=cx;

%% 初始篩選非劣解
flj=[];
fljx=[];
fljNum=0;
%兩個實數相等精度
tol=1e-7;
for i=1:xSize
flag=0; %支配標志
for j=1:xSize
if j~=i
if ((px(i)<px(j)) && (rx(i)>rx(j))) ||((abs(px(i)-px(j))<tol)...
&& (rx(i)>rx(j)))||((px(i)<px(j)) && (abs(rx(i)-rx(j))<tol)) || (cx(i)>weight)
flag=1;
break;
end
end
end

%判斷有無被支配
if flag==0
fljNum=fljNum+1;
% 記錄非劣解
flj(fljNum,1)=px(i);flj(fljNum,2)=rx(i);flj(fljNum,3)=cx(i);
% 非劣解位置
fljx(fljNum,:)=x(i,:);
end
end

%% 循環迭代
for iter=1:MaxIt

% 權值更新
w=wmax-(wmax-wmin)*iter/MaxIt;

%從非劣解中選擇粒子作為全局最優解
s=size(fljx,1);
index=randi(s,1,1);
gbest=fljx(index,:);

%% 群體更新
for i=1:xSize
%速度更新
v(i,:)=w*v(i,:)+c1*rand(1,1)*(xbest(i,:)-x(i,:))+c2*rand(1,1)*(gbest-x(i,:));

%位置更新
x(i,:)=x(i,:)+v(i,:);
x(i,:) = rem(x(i,:),objnum)/double(objnum);
index1=find(x(i,:)<=0);
if ~isempty(index1)
x(i,index1)=rand(size(index1));
end
x(i,:)=ceil(4*x(i,:));
end

%% 計算個體適應度
pxPrior(:)=0;
rxPrior(:)=0;
cxPrior(:)=0;
for i=1:xSize
for j=1:Dim %控制類別
pxPrior(i) = pxPrior(i)+P(x(i,j),j); %計算粒子i 價值
rxPrior(i) = rxPrior(i)+R(x(i,j),j); %計算粒子i 體積
cxPrior(i) = cxPrior(i)+C(x(i,j),j); %計算粒子i 重量
end
end

%% 更新粒子歷史最佳
for i=1:xSize
%現在的支配原有的,替代原有的
if ((px(i)<pxPrior(i)) && (rx(i)>rxPrior(i))) ||((abs(px(i)-pxPrior(i))<tol)...
&& (rx(i)>rxPrior(i)))||((px(i)<pxPrior(i)) && (abs(rx(i)-rxPrior(i))<tol)) || (cx(i)>weight)
xbest(i,:)=x(i,:);%沒有記錄目標值
pxbest(i)=pxPrior(i);rxbest(i)=rxPrior(i);cxbest(i)=cxPrior(i);
end

%彼此不受支配,隨機決定
if ~( ((px(i)<pxPrior(i)) && (rx(i)>rxPrior(i))) ||((abs(px(i)-pxPrior(i))<tol)...
&& (rx(i)>rxPrior(i)))||((px(i)<pxPrior(i)) && (abs(rx(i)-rxPrior(i))<tol)) || (cx(i)>weight) )...
&& ~( ((pxPrior(i)<px(i)) && (rxPrior(i)>rx(i))) ||((abs(pxPrior(i)-px(i))<tol) && (rxPrior(i)>rx(i)))...
||((pxPrior(i)<px(i)) && (abs(rxPrior(i)-rx(i))<tol)) || (cxPrior(i)>weight) )
if rand(1,1)<0.5
xbest(i,:)=x(i,:);
pxbest(i)=pxPrior(i);rxbest(i)=rxPrior(i);cxbest(i)=cxPrior(i);
end
end
end

%% 更新非劣解集合
px=pxPrior;
rx=rxPrior;
cx=cxPrior;
%更新升級非劣解集合
s=size(flj,1);%目前非劣解集合中元素個數

%先將非劣解集合和xbest合並
pppx=zeros(1,s+xSize);
rrrx=zeros(1,s+xSize);
cccx=zeros(1,s+xSize);
pppx(1:xSize)=pxbest;pppx(xSize+1:end)=flj(:,1)';
rrrx(1:xSize)=rxbest;rrrx(xSize+1:end)=flj(:,2)';
cccx(1:xSize)=cxbest;cccx(xSize+1:end)=flj(:,3)';
xxbest=zeros(s+xSize,Dim);
xxbest(1:xSize,:)=xbest;
xxbest(xSize+1:end,:)=fljx;

%篩選非劣解
flj=[];
fljx=[];
k=0;
tol=1e-7;
for i=1:xSize+s
flag=0;%沒有被支配
%判斷該點是否非劣
for j=1:xSize+s
if j~=i
if ((pppx(i)<pppx(j)) && (rrrx(i)>rrrx(j))) ||((abs(pppx(i)-pppx(j))<tol) ...
&& (rrrx(i)>rrrx(j)))||((pppx(i)<pppx(j)) && (abs(rrrx(i)-rrrx(j))<tol)) ...
|| (cccx(i)>weight) %有一次被支配
flag=1;
break;
end
end
end

%判斷有無被支配
if flag==0
k=k+1;
flj(k,1)=pppx(i);flj(k,2)=rrrx(i);flj(k,3)=cccx(i);%記錄非劣解
fljx(k,:)=xxbest(i,:);%非劣解位置
end
end

%去掉重復粒子
repflag=0; %重復標志
k=1; %不同非劣解粒子數
flj2=[]; %存儲不同非劣解
fljx2=[]; %存儲不同非劣解粒子位置
flj2(k,:)=flj(1,:);
fljx2(k,:)=fljx(1,:);
for j=2:size(flj,1)
repflag=0; %重復標志
for i=1:size(flj2,1)
result=(fljx(j,:)==fljx2(i,:));
if length(find(result==1))==Dim
repflag=1;%有重復
end
end
%粒子不同,存儲
if repflag==0
k=k+1;
flj2(k,:)=flj(j,:);
fljx2(k,:)=fljx(j,:);
end

end

%非劣解更新
flj=flj2;
fljx=fljx2;

end

%繪制非劣解分布
plot(flj(:,1),flj(:,2),'o')
xlabel('P')
ylabel('R')
title('最終非劣解在目標空間分布')
disp('非劣解flj中三列依次為P,R,C')

㈧ 粒子群演算法在數據挖掘方面的應用有哪些可以舉一些實例么,或者推薦一些相關的網站,謝謝

看樣子應該是優化,特徵提取,聚類,預測,關聯都可以用到的演算法
如果單純的說數據挖掘的應用應該很不好說,不通的主題可能他都能嵌入,但是適用與否應該要具體分析了

㈨ 粒子群演算法怎麼應用到實際問題中

每個粒子的位置有n維,每一維代表一個未知數

閱讀全文

與粒子群演算法數學建模應用實例相關的資料

熱點內容
程序員考試考什麼科目 瀏覽:483
程序員必備文檔編輯 瀏覽:958
踩水果解壓大全 瀏覽:632
什麼是dk伺服器在 瀏覽:459
nusoapphp下載 瀏覽:927
黑莓原生解壓rar 瀏覽:954
百度解壓縮在哪 瀏覽:786
硬解壓卡怎麼用 瀏覽:181
新買的聯想伺服器怎麼配置 瀏覽:755
mc命令方塊的代碼 瀏覽:650
伺服器老打不開怎麼辦 瀏覽:254
單片機智能儀器 瀏覽:706
別告訴我你會記筆記pdf 瀏覽:160
一套谷歌51瀏覽器易源碼 瀏覽:378
unix安裝命令 瀏覽:57
cephmonitor源碼 瀏覽:439
單片機的硬體結構重點 瀏覽:557
地鐵逃生用什麼伺服器最好 瀏覽:930
租用雲伺服器怎麼樣 瀏覽:440
app上訴通訊錄有什麼後果 瀏覽:515