matlab粒子群演算法代碼
⑴ matlab 粒子群演算法代碼
目前混合整數規劃是一個可研究的問題,這方面的論文也較多,有的是用四捨五入的方法取整,在matlab中用round函數可實現。也有用三角函數進行轉化的,具體情況我不太清楚。另外你的問題有約束條件,在編程時需要加約束處理。
⑵ 求帶約束條件的粒子群演算法的MATLAB編程
恩
這個比較簡單,可以很容易的做出來
Matlab中提供了兩種方法,數值和解析
1.數值解法使用filter函數
對於遞推公式
a(1)*y(n)+a(2)*y(n-1)
+
...
+
a(na+1)*y(n-na)
=
b(1)*x(n)
+
b(2)*x(n-1)
+
...
+
b(nb+1)*x(n-nb)
我們可以變成如下
filter(b,a,x,zi)其中a和b就是上面的系數,x是需要計算的n,zi是初值
由於使用filter函數需要信號基礎
我們這里不詳細說明
2.解析解法就是Z變換
%首先我們要改變遞推公式如下,否則沒法的到正確結果
%y(n+1)=2y(n),y(0)=-2
L=ztrans(sym('y(n+1)'));%等式左邊的Z變換
R=ztrans(sym('2*y(n)'));%等式右邊的Z變換
S=L-R
%將初值y(0)帶入,我們可以根據y(-1)推出y(0)=-2
%令Y=ztrans(y(n),n,z),y0=y(0),求解出S中的y(n)的Z變換結果
y0=-2;
s=subs(S,{'ztrans(y(n),n,z)','y(0)'},{'Y',y0});
%求解出y(n)的Z變換結果
Y=solve(s,'Y')
%對Y進行反Z變化
iztrans(Y)
S
=
z*ztrans(y(n),n,z)-y(0)*z-2*ztrans(y(n),n,z)
Y
=
-2*z/(z-2)
ans
=
-2*2^n
⑶ 使用matlab粒子群演算法求解以下函數,求主程序
這關鍵是適應度函數的問題,你可以編寫如下適應度函數: F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是絕對值。 而變數你就選取X1和X2里的每個元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以設置PSO的變數為x1到x6這六個值...
⑷ 我QQ是534193499,想向你請教matlab的粒子群演算法
粒子群優化演算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。 PSO同遺傳演算法類似,是一種基於迭代的優化演算法。系統初始化為一組隨機解,通過迭代搜尋最優值。但是它沒有遺傳演算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優的粒子進行搜索。同遺傳演算法比較,PSO的優勢在於簡單容易實現並且沒有許多參數需要調整。目前已廣泛應用於函數優化,神經網路訓練,模糊系統控制以及其他遺傳演算法的應用領域。
⑸ 粒子群演算法MATLAB代碼,怎麼運行不行,高手們給我修改一下,本人是菜鳥!謝謝!
混合整數規劃是一個研究報告,在這方面也更加圓潤,一些圓潤,在MATLAB中採用了圓形功能可以實現的。也很有用三角函數變換,我不知道具體情況。另一個問題,的約束需要添加的規劃,約束處理。
⑹ 急急急!!!求解粒子群演算法matlab程序
%------------------------------------------------------------------
%------Initial Format--------------------------------------------------
clear all;
clc;
format long;
%------Given initial conditions----------------------------------------------
c1=1.4962; %learning factor1
c2=1.4962; %learning factor2
w=0.9872; %inertia weight
MaxDT=200; %Maximum number of iterations
D=2; %Search space dimensions (number of variables )
N=40; %Initialize the number of groups of indivials
eps=10^(-6); %Setting accuracy
%------Initialized indivials of population (can limit the position and velocity)------------
for i=1:N
for j=1:D
x(i,j)=randn; %position initialization using random
v(i,j)=randn; %velocity initialization using random
end
end
%------First calculate the fitness of each particle, and initialize Pi and Pg----------------------
for i=1:N
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
pg=x(1,:); %Pg is global extreme
for i=2:N
if fitness(x(i,:),D)<fitness(pg,D)
pg=x(i,:);
end
end
%------the main loop,iterate according to the formula followed , until meet the accuracy------------
for t=1:MaxDT
for i=1:N
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if fitness(x(i,:),D)<p(i)
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
if p(i)<fitness(pg,D)
pg=y(i,:);
end
end
Pbest(t)=fitness(pg,D);
end
%------, the final results
disp('*************************************************************')
disp('Global best position:')
Solution=pg'
disp('Extreme optimization result:')
Result=fitness(pg,D)
disp('*************************************************************')
⑺ 求粒子群演算法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程序
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);
⑼ 粒子群(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做,要把粒子初始化為矩陣要怎麼做
可以參考一下這段代碼
%------給定初始化條件----------------------------------------------
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); %隨機初始化速度