當前位置:首頁 » 操作系統 » 粒子群演算法matlab代碼

粒子群演算法matlab代碼

發布時間: 2023-06-06 17:44:10

❶ 粒子群演算法用matlab做,要把粒子初始化為矩陣要怎麼做

可以參考一下這段代碼

%------給定初始化條件----------------------------------------------
c1=1.8; %學習因子1
c2=1.8; %學習因子2
WMax=1.6; %慣性權重
WMin=0.8; %慣性權重
MaxDT=100; %最大迭代次數
D=3; %搜索空間維數(未知數個數)
N=30; %初始化群體個體數目
XUp=20/(2^0.5); %初始化位移上限
XDown=-20/(2^0.5); %初始化位移下限
VUp=0.5; %初始化速度上限
VDown=0.0; %初始化速度下限
eps=10^(-6); %設置精度(在已知最小值時候用)
%------初始化種群的個體(可以在這里限定位置和速度的范圍)------------

x=((XUp-XDown).*rand(N,2*D)+XDown); %隨機初始化位置
v=((VUp-VDown).*rand(N,2*D)+VDown); %隨機初始化速度

❷ matlab實現粒子群演算法優化LQR法得不到最優解

PSO確實會存在得不到最優解的情況,因為嚴格意義上它不是全局最優的演算法,而且在比較復雜的問題上,得不到最優解的情況很容易發現。

建議你增大種群大小,增加迭代次數。

❸ 求粒子群演算法MATLAB完整代碼

%% 清空環境
clear
clc
tic
%% 參數初始化
% 粒子群演算法中的兩個參數
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);
pop(j,k) = rand;
end

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

% 個體最優更新
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

yy(i) = fitnesszbest;

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

fun函數如下
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;

❹ 用粒子群演算法求解線性約束整數規劃的Matlab程序

對粒子群的約束問題涉及的比較少。這兒摘抄下網路的內容:

PSO演算法推廣到約束優化問題,分為兩類:(http://ke..com/view/1531379.htm)
(1)罰函數法。罰函數的目的是將約束優化問題轉化成無約束優化問題。
(2)將粒子群的搜索范圍都限制在條件約束簇內,即在可行解范圍內尋優。

第一種方法有相關論文,看了下,感覺比較適合等式約束情況,比較類似於在適應度函數中加入拉格朗日乘子的做法,如果論文下不到的話,請留言。

第二種做法倒是用過。大概講下。
針對你的問題,初始化兩維向量,但是由於存在不等式約束,所以考慮先初始化向量的第一維,然後動態算出第二維的范圍,隨機出第二維變數。然後就是計算適應度值,全局、局部最優。
更新過程一樣,先更新第一維變數,然後動態計算第二維的范圍,更新第二維,如果更新後超過了邊界,則取邊界值(或者也可以再次重新更新,直到滿足條件,直覺上感覺第一種還好點,第二種可能會出現無法更新的情況),更新完畢後,計算適應度,更新全局、局部最優解。

補充兩個鏈接吧
http://download.csdn.net/detail/yinjian_2004/1567342
論文:基於改進粒子群優化演算法的約束多目標優化

❺ 求實現基於粒子群演算法的函數極值尋優演算法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);

❻ matlab用粒子群演算法求解方程組最優解

這關鍵是適應度函數的問題,你可以編寫如下適應度函數:
F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是絕對值。

而變數你就選取X1和X2里的每個元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以設置PSO的變數為x1到x6這六個值。
答畢,不懂追問。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:626
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:356
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:71
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:296
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:787
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:337
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:202
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:798
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:355
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:582