① 粒子群演算法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;
② 我QQ是534193499,想向你請教matlab的粒子群演算法
粒子群優化演算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。 PSO同遺傳演算法類似,是一種基於迭代的優化演算法。系統初始化為一組隨機解,通過迭代搜尋最優值。但是它沒有遺傳演算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優的粒子進行搜索。同遺傳演算法比較,PSO的優勢在於簡單容易實現並且沒有許多參數需要調整。目前已廣泛應用於函數優化,神經網路訓練,模糊系統控制以及其他遺傳演算法的應用領域。
③ matlab 粒子群演算法代碼
目前混合整數規劃是一個可研究的問題,這方面的論文也較多,有的是用四捨五入的方法取整,在matlab中用round函數可實現。也有用三角函數進行轉化的,具體情況我不太清楚。另外你的問題有約束條件,在編程時需要加約束處理。
④ 粒子群演算法用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用粒子群演算法求解方程組最優解
這關鍵是適應度函數的問題,你可以編寫如下適應度函數:
F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是絕對值。
而變數你就選取X1和X2里的每個元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以設置PSO的變數為x1到x6這六個值。
答畢,不懂追問。
⑦ 求粒子群演算法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粒子群演算法求解以下函數,求主程序
這關鍵是適應度函數的問題,你可以編寫如下適應度函數: F=|E(X1y1+X2y2)-0|+|D(X1y1+X2y2)-1|,F值越小越好,||指的是絕對值。 而變數你就選取X1和X2里的每個元素。比如X1=[x1,x2,x3];X2=[x4,x5,x6];你就可以設置PSO的變數為x1到x6這六個值...