粒子群優化演算法(pso 的matlab執行程式謝謝大家啦

2021-08-02 04:14:22 字數 1776 閱讀 5635

1樓:

%不知道你具體的問題是什麼,下面是一個最基本的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;

%下面是主程式

%% 清空環境

clcclear

%% 引數初始化

%粒子群演算法中的兩個引數

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,:)popmax))=popmax;

pop(j,find(pop(j,:)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);

endend

yy(i)=fitnesszbest;

end%% 結果分析

plot(yy)

title(['適應度曲線 ' '終止代數=' num2str(maxgen)]);

xlabel('進化代數');ylabel('適應度');

2樓:匿名使用者

問題補充:所需的svmmatlab程式有c版本的和matlab由於此演算法精度高,採取措施對誤差進行抑制,所以其實現原理也較複雜。該演算法

量子粒子群優化演算法到底是李士勇還是孫俊提出的

量子 是全球著名的大規模對沖 美國金融家喬治 索羅斯旗下經營的五個對沖 之一。量子 是高風險 主要借款在世界範圍內投資於 債券 外匯和商品。量子美元 在美國 交易委員會登記註冊,它主要採取私募方式籌集資金。據說,索羅斯為之取名 量子 是源於索羅斯所讚賞的一位德國物理學家 量子力學的創始人海森堡提出 ...

如何用遺傳演算法實現多變數的最優化問題

將多個變數的數值編碼編排進去,進行組合,只需要增長基因個體的長度,但是要明確每個變數具體的位置,然後讓每個變數轉化成二進位制的等長編碼,組合在一起,就可以來運算了。具體操作步驟如下 1 首先要利用一個矩陣去跟蹤每組迭代的結果的大小 2 然後,要構造一個譯碼矩陣fieldd,由bs2rv函式將種群ch...