1. 程式人生 > >[Algorithm] 群體智慧優化演算法之粒子群優化演算法

[Algorithm] 群體智慧優化演算法之粒子群優化演算法

%% 該檔案演示基於TSP-PSO演算法
clc;clear

%% 載入資料
data=load('eil51.txt')
cityCoor=[data(:,2) data(:,3)];%城市座標矩陣

figure
plot(cityCoor(:,1),cityCoor(:,2),'ms','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g')
legend('城市位置')
ylim([4 78])
title('城市分佈圖','fontsize',12)
xlabel('km','fontsize',12
) ylabel('km','fontsize',12) %ylim([min(cityCoor(:,2))-1 max(cityCoor(:,2))+1]) grid on %% 計算城市間距離 n=size(cityCoor,1); %城市數目 cityDist=zeros(n,n); %城市距離矩陣 for i=1:n for j=1:n if i~=j cityDist(i,j)=((cityCoor(i,1)-cityCoor(j,1))^2+... (cityCoor(i,
2)-cityCoor(j,2))^2)^0.5; end cityDist(j,i)=cityDist(i,j); end end nMax=1000; %進化次數 indiNumber=50; %個體數目 individual=zeros(indiNumber,n); %^初始化粒子位置 for i=1:indiNumber individual(i,:)=randperm(n); end %% 計算種群適應度 indiFit=fitness(individual,cityCoor,cityDist); [value,index]
=min(indiFit); tourPbest=individual; %當前個體最優 tourGbest=individual(index,:) ; %當前全域性最優 recordPbest=inf*ones(1,indiNumber); %個體最優記錄 recordGbest=indiFit(index); %群體最優記錄 xnew1=individual; %% 迴圈尋找最優路徑 L_best=zeros(1,nMax); for N=1:nMax N %計算適應度值 indiFit=fitness(individual,cityCoor,cityDist); %更新當前最優和歷史最優 for i=1:indiNumber if indiFit(i)<recordPbest(i) recordPbest(i)=indiFit(i); tourPbest(i,:)=individual(i,:); end if indiFit(i)<recordGbest recordGbest=indiFit(i); tourGbest=individual(i,:); end end [value,index]=min(recordPbest); recordGbest(N)=recordPbest(index); %% 交叉操作 for i=1:indiNumber % 與個體最優進行交叉 c1=unidrnd(n-1); %產生交叉位 c2=unidrnd(n-1); %產生交叉位 while c1==c2 c1=round(rand*(n-2))+1; c2=round(rand*(n-2))+1; end chb1=min(c1,c2); chb2=max(c1,c2); cros=tourPbest(i,chb1:chb2); ncros=size(cros,2); %刪除與交叉區域相同元素 for j=1:ncros for k=1:n if xnew1(i,k)==cros(j) xnew1(i,k)=0; for t=1:n-k temp=xnew1(i,k+t-1); xnew1(i,k+t-1)=xnew1(i,k+t); xnew1(i,k+t)=temp; end end end end %插入交叉區域 xnew1(i,n-ncros+1:n)=cros; %新路徑長度變短則接受 dist=0; for j=1:n-1 dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1)); end dist=dist+cityDist(xnew1(i,1),xnew1(i,n)); if indiFit(i)>dist individual(i,:)=xnew1(i,:); end % 與全體最優進行交叉 c1=round(rand*(n-2))+1; %產生交叉位 c2=round(rand*(n-2))+1; %產生交叉位 while c1==c2 c1=round(rand*(n-2))+1; c2=round(rand*(n-2))+1; end chb1=min(c1,c2); chb2=max(c1,c2); cros=tourGbest(chb1:chb2); ncros=size(cros,2); %刪除與交叉區域相同元素 for j=1:ncros for k=1:n if xnew1(i,k)==cros(j) xnew1(i,k)=0; for t=1:n-k temp=xnew1(i,k+t-1); xnew1(i,k+t-1)=xnew1(i,k+t); xnew1(i,k+t)=temp; end end end end %插入交叉區域 xnew1(i,n-ncros+1:n)=cros; %新路徑長度變短則接受 dist=0; for j=1:n-1 dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1)); end dist=dist+cityDist(xnew1(i,1),xnew1(i,n)); if indiFit(i)>dist individual(i,:)=xnew1(i,:); end %% 變異操作 c1=round(rand*(n-1))+1; %產生變異位 c2=round(rand*(n-1))+1; %產生變異位 while c1==c2 c1=round(rand*(n-2))+1; c2=round(rand*(n-2))+1; end temp=xnew1(i,c1); xnew1(i,c1)=xnew1(i,c2); xnew1(i,c2)=temp; %新路徑長度變短則接受 dist=0; for j=1:n-1 dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1)); end dist=dist+cityDist(xnew1(i,1),xnew1(i,n)); if indiFit(i)>dist individual(i,:)=xnew1(i,:); end end [value,index]=min(indiFit); L_best(N)=indiFit(index); tourGbest=individual(index,:); end tourGbest minbest=min(L_best) %% 結果作圖 figure plot(L_best) title('演算法訓練過程') xlabel('迭代次數') ylabel('適應度值') grid on figure hold on plot([cityCoor(tourGbest(1),1),cityCoor(tourGbest(n),1)],[cityCoor(tourGbest(1),2),... cityCoor(tourGbest(n),2)],'ms-','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g') hold on for i=2:n plot([cityCoor(tourGbest(i-1),1),cityCoor(tourGbest(i),1)],[cityCoor(tourGbest(i-1),2),... cityCoor(tourGbest(i),2)],'ms-','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g') hold on end legend('規劃路徑') scatter(cityCoor(:,1),cityCoor(:,2)); title('規劃路徑','fontsize',10) xlabel('km','fontsize',10) ylabel('km','fontsize',10) grid on ylim([4 80])

相關推薦

[Algorithm] 群體智慧優化演算法粒子優化演算法

%% 該檔案演示基於TSP-PSO演算法 clc;clear %% 載入資料 data=load('eil51.txt') cityCoor=[data(:,2) data(:,3)];%城市座標矩陣 figure plot(cityCoor(:,1),cityCoor(:,2),'m

進化演算法粒子(PSO)

概述: 正如其他的那些進化演算法一樣,粒子群演算法的靈感同樣來自於大自然。它由Eberhart和Kennedy共同提出的,其基本思想來自於他們早期對許多鳥類的群體行為進行建模模擬研究結果的啟發。 假設在一塊廣袤無垠的棲息地上有一群自由自在的鳥兒和一堆豐盛的食

遺傳演算法 差分進化演算法 粒子優化演算法區別

一 遺傳演算法 遺傳演算法(GA)作為一種經典的進化演算法,自 Holland提出之後在國際上已經形成了一個比較活躍的研究領域. 人們對 GA 進行了大量的研究,提出了各種改進演算法用於提高演算法的收斂速度和精確性. 遺傳演算法採用選擇,交叉,變異操作,在問題空間搜尋最優解.

粒子優化演算法(PSO)基於離散化的特徵選擇(FS)(二)

作者:Geppetto 前面我們介紹了特徵選擇(Feature Selection,FS)與離散化資料的重要性,總覽的介紹了PSO在FS中的重要性和一些常用的方法。今天講一講FS與離散化的背景,介紹本文所採用的基於熵的切割點和最小描述長度原則(MDLP

粒子優化演算法

粒子群優化演算法是模仿生物社會系統而設計的,更確切的說,是由簡單個體組成的群體與環境以及個體之間的互動行為,是一種基於群智慧方法的進化計算技術。 粒子群演算法源於鳥群捕食行為的模擬。一群鳥在一個固定的區域裡隨機搜尋區域裡唯一的一塊食物,所有的鳥都不知到食物在哪裡,但是他們知道自己當前所處的位置離

粒子優化演算法 PSO

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

智慧演算法粒子演算法(Particle Swarm Optimization)超詳細解析+入門程式碼例項講解

喜歡的話可以掃碼關注我們的公眾號哦,更多精彩盡在微信公眾號【程式猿聲】 01 演算法起源 粒子群優化演算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。該演算法最初是受到飛鳥叢集

粒子優化演算法(PSO)簡介及MATLAB實現

目錄 粒子群優化演算法概述 • 粒子群優化(PSO, particle swarm optimization)演算法是計算智慧領域,除了蟻群演算法,魚群演算法之外的一種群體智慧的優化演算法,該演算法最早由Kennedy和Eberhart在1995年提出的,

matlab學習筆記(1)——粒子優化演算法(PSO)的程式實現

     本文內容參考matlab R2016a完全自學一本通。     粒子群優化演算法(PSO)屬於進化演算法的一種,它從隨機解出發,通過迭代找到最優解。該演算法通過適應度來評價解的品質,並通過追隨當前搜尋到的最優值來尋找全域性最優。     假設在一個D維的目標搜尋空間

MATLAB粒子優化演算法實現(PSO)

PSO(PSO——Particle Swarm Optimization)(基於種群的隨機優化技術演算法) 粒子群演算法模仿昆蟲、獸群、鳥群和魚群等的群集行為,這些群體按照一種合作的方式尋找食物,群體

PSO-粒子優化演算法

PSO 演算法 粒子群優化演算法 PSO 1. 常見的群體智慧優化演算法分類 常見的群體智慧優化演算法主要有如下幾類:   (1)蟻群演算法(Ant Colony Optimization,簡稱ACO)[1992年提出];   (2)粒子群優化演算法(Particle

[人工智慧] 粒子優化演算法 & 差分進化演算法

粒子群優化演算法 & 差分進化演算法 前言 演算法理論 演算法實踐 視覺化 前言 演算法理論 粒子群優化演算法 簡介 粒子群優化演算法( Particle Swarm Optimization,PSO)是進化計算的一個分支,是一種模擬

粒子優化演算法對BP神經網路優化 Matlab實現

1、粒子群優化演算法 粒子群演算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,該演算法模擬鳥叢集飛行覓食的行為,鳥之間通過集體的協作使群體達到最優目的,是一種基於 Swarm Inteligence的優化方法。同遺傳演算法類似,也是一種

標準粒子優化(Particle Swarm Optimization, PSO)算法

span color swa pan 先來 war fill 度量 pso 先來嘮嘮什麽是最優化問題,就是在滿足一定的約束條件下,找到一組合適參數,使得系統的某些性能指標(最優性度量)達到最值。叠代提供了一種求解最優化問題的基本思路: \[\left\{ \

粒子優化算法PSO及matlab實現

參數 min 功能 結果 ide 過程 mil .html none 算法學習自:MATLAB與機器學習教學視頻 1、粒子群優化算法概述 粒子群優化(PSO, particle swarm optimization)算法是計算智能領域,除了蟻群算法,魚群算法

論文:基於粒子優化的測試資料生成及其實證分析-----生成過程以及實驗(計算機研究與發展)

來源:2012年版的計算機研究與發展期刊 基於PSO的測試資料生成 (1) 核心問題:  如何保證PSO搜尋演算法和測試過程的協作執行  演算法的基本的流程: (1)對被測程式P進行靜態分析並完成: 1.  提取程式的 介面資

【尋優演算法粒子演算法(PSO) 引數尋優的python實現

【尋優演算法】粒子群演算法(PSO) 引數尋優的python實現 一、演算法原理 1、粒子群演算法的名詞解釋 2、粒子更新 二、PSO演算法引數尋優的python實現 參考資料 粒子群優化演算法(Particle

基於粒子優化的分類特徵選擇:多目標方法

#引用 ##LaTex @ARTICLE{6381531, author={B. Xue and M. Zhang and W. N. Browne}, journal={IEEE Transactions on Cybernetics}, title={Par

粒子演算法4——粒子演算法與蟻演算法的異同點

群體智慧演算法家族的兩個重要成員就是粒子群演算法與蟻群演算法。基本思想都是模擬自然界生物群體行為來構造隨機優化演算法的,不同的是粒子群演算法模擬鳥類群體行為,而蟻群演算法模擬螞蟻覓食原理。 1.相同點 (1)都是一類不確定演算法。不確定性體現了自然界生物的生物機制,並且在求解某些特定問題方面優於確定性演算法。

粒子PSO演算法的基本原理

先看兩個概述: 1. 2. 好了,進入主題: PSO演算法是基於群體智慧理論的優化演算法,群體中的粒子在每次迭代搜尋的過程中,通過跟蹤群體2個極值:粒子本身所找到的最優解Pbest和群體找到的最優解Gbest來動態調整自己位置和速度[5, 6],完成對問題尋優,對於如下的函式優化問題 m