『壹』 matlab運行程序時不報錯,只顯示出ans=程序名,這是為什麼,以下是詳細代碼,用pso演算法求解tsp問題
換個名字就好了。
不要使用「純數字」、「關鍵字」等等。
名稱裡面,也不要有運算符號:-、+等等。
也不要用漢字。
『貳』 如何用pso演算法優化離散數據(matlab程序)
如果你是想找一個三階的多項式擬合你的離散數據的話,可以用PSO。
直接用基礎pso就可以,不過你的適應度函數是三維(因為是3階的多項式),要利用你的數據編一個,常用的話就是差值平方和,就是fitness=(真實值1-多項式計算值1)^2+(真實值2-多項式計算值2)^2+...... 你有13組數據就可以加13次夠了,不過提醒一下,你的每個變數的范圍要注意設置。
如果還有不懂的可以M我,不過我不常在(⊙o⊙)哦,謝謝
『叄』 求把MATLAB的pso源代碼演算法修改為 qpso演算法 要求返回參數相同
下面的代碼是量子群優化演算法,你參照著改下:
popsize=20;
MAXITER=2000;
dimension=30;
irange_l=-5.12;
irange_r=5.12;
xmax=10;
sum1=0;
sum2=0;
mean=0;
st=0;
runno=10;
data1=zeros(runno,MAXITER);
for run=1:runno
T=cputime;
x=(irange_r- irange_l)*rand(popsize,dimension,1) + irange_l;
pbest=x;
gbest=zeros(1,dimension);
for i=1:popsize
f_x(i)=f3(x(i,:));
f_pbest(i)=f_x(i);
end
g=min(find(f_pbest==min(f_pbest(1:popsize))));
gbest=pbest(g,:);
f_gbest=f_pbest(g);
MINIUM=f_pbest(g);
for t=1:MAXITER
beta=(1-0.5)*(MAXITER-t)/MAXITER+0.5;
mbest=sum(pbest)/popsize;
for i=1:popsize
fi=rand(1,dimension);
p=fi.*pbest(i,:)+(1-fi).*gbest;
u=rand(1,dimension);
b=beta*(mbest-x(i,:));
v=-log(u);
y=p+((-1).^ceil(0.5+rand(1,dimension))).*b.*v;
x(i,:)=y;
x(i,:)=sign(y).*min(abs(y),xmax);
f_x(i)=f3(x(i,:));
if f_x(i)<f_pbest(i)
pbest(i,:)=x(i,:);
f_pbest(i)=f_x(i);
end
if f_pbest(i)<f_gbest
gbest=pbest(i,:);
f_gbest=f_pbest(i);
end
MINIUM=f_gbest;
end
data1(run,t)=MINIUM;
if MINIUM>1e-007
mean=t;
end
end
sum1=sum1+mean;
sum2=sum2+MINIUM;
%MINIUM
time=cputime-T;
st=st+time;
end
av1=sum1/10; %輸出平均收驗代數
av2=sum2/10; %輸出平均最優解
st/10 %就是最後anw輸出的解
『肆』 粒子群優化演算法(PSO)解決單目標優化問題的matlab編程
我之前做過的,
『伍』 求教PSO演算法優化函數的matlab程序,比如sphere、schaffer、rosenbrock、rastrigin、shubert函數,
呵呵,其實,如果你想知道的MATLAB功能的作用,最好是約幫助下,慢慢的你會發現它非常強大。
中國
幫助唄,那你相信的事實是錯誤的
幫助腹肌
ABS絕對值。
ABS(X)為X的元素的絕對值時
X是復雜的,ABS(X)為
的復數模量(幅度)十
的元素,這是它的作用,它僅僅是絕對值,例如ABS(-1)= 1,ABS(2)= 2。
『陸』 粒子群(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('適應度');
以上回答你滿意么?
『柒』 求教PSO演算法優化函數的matlab程序,比如sphere、schaffer、rosenbrock、rastrigin、shubert函數,額是新手
psoT即可,TestFunction里全有你要的函數,使用也比較簡單
[email protected]可以給你傳一份
『捌』 pso演算法代碼怎樣用來參數估計
%標准PSO演算法源代碼(matlab)%標准粒群優化演算法程序%2007.1.9Byjxy%測試函數:f(x,y)=100(x^2-y)^2+(1-x)^2,-2.048pop(i,8)%若當前適應值優於個體最優值,則進行個體最優信息的更新pop(i,7)=pop(i,8);%適值更新pop(i,5:6)=pop(i,1:2);%位置坐標更新endend%計算完適應值後尋找當前全局最優位置並記錄其坐標ifbest_fitness>min(pop(:,7))best_fitness=min(pop(:,7));%全局最優值gbest_x=pop(find(pop(:,7)==min(pop(:,7))),1);%全局最優粒子的位置gbest_y=pop(find(pop(:,7)==min(pop(:,7))),2);endbest_in_history(exetime)=best_fitness;%記錄當前全局最優%實時輸出結果%輸出當前種群中粒子位置subplot(1,2,1);fori=1:popsizeplot(pop(i,1),pop(i,2),'b*');holdon;endplot(gbest_x,gbest_y,'r.','markersize',20);axis([-2,2,-2,2]);holdoff;subplot(1,2,2);axis([0,gen,-0.00005,0.00005]);ifexetime-1>0line([exetime-1,exetime],[best_in_history(exetime-1),best_fitness]);holdon;end%粒子群速度與位置更新%更新粒子速度fori=1:popsizepop(i,3)=rand()*pop(i,3)+c1*rand()*(pop(i,5)-pop(i,1))+c2*rand()*(gbest_x-pop(i,1));%更新速度pop(i,4)=rand()*pop(i,4)+c1*rand()*(pop(i,6)-pop(i,2))+c2*rand()*(gbest_x-pop(i,2));ifabs(pop(i,3))>max_velocityifpop(i,3)>0pop(i,3)=max_velocity;elsepop(i,3)=-max_velocity;endendifabs(pop(i,4))>max_velocityifpop(i,4)>0pop(i,4)=max_velocity;elsepop(i,4)=-max_velocity;endendend%更新粒子位置fori=1:popsizepop(i,1)=pop(i,1)+pop(i,3);pop(i,2)=pop(i,2)+pop(i,4);
『玖』 pso演算法的matlab程序
%------基本粒子群優化演算法(Particle Swarm Optimization)-----------
%------名稱:基本粒子群優化演算法(PSO)
%------作用:求解優化問題
%------說明:全局性,並行性,高效的群體智能演算法
%------初始格式化--------------------------------------------------
clear all;
clc;
format long;
%------給定初始化條件----------------------------------------------
c1=1.4962; %學習因子1
c2=1.4962; %學習因子2
w=0.7298; %慣性權重
MaxDT=1000; %最大迭代次數
D=10; %搜索空間維數(未知數個數)
N=40; %初始化群體個體數目
eps=10^(-6); %設置精度(在已知最小值時候用)
%------初始化種群的個體(可以在這里限定位置和速度的范圍)------------
for i=1:N
for j=1:D
x(i,j)=randn; %隨機初始化位置
v(i,j)=randn; %隨機初始化速度
end
end
%------先計算各個粒子的適應度,並初始化Pi和Pg----------------------
for i=1:N
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
pg=x(1,:); %Pg為全局最優
for i=2:N
if fitness(x(i,:),D)<FITNESS(PG,D)< span>
pg=x(i,:);
end
end
%------進入主要循環,按照公式依次迭代,直到滿足精度要求------------
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)< span>
p(i)=fitness(x(i,:),D);
y(i,:)=x(i,:);
end
if p(i)<FITNESS(PG,D)< span>
pg=y(i,:);
end
end
Pbest(t)=fitness(pg,D);
end
%------最後給出計算結果
disp('*************************************************************')
disp('函數的全局最優位置為:')
Solution=pg'
disp('最後得到的優化極值為:')
Result=fitness(pg,D)
disp('*************************************************************')
%------演算法結束---DreamSun GL & HF-----------------------------------
適應度函數源程序(fitness.m)
function result=fitness(x,D)
sum=0;
for i=1:D
sum=sum+x(i)^2;
end
result=sum;
『拾』 跪求 pso演算法在圖像分割中的應用源代碼(MATLAB模擬)
%標准PSO演算法源代碼(matlab)
%標准粒群優化演算法程序
% 2007.1.9 By jxy
%測試函數:f(x,y)=100(x^2-y)^2+(1-x)^2, -2.048<x,y<2.048
%求解函數最小值
global popsize; %種群規模
%global popnum; %種群數量
global pop; %種群
%global c0; %速度慣性系數,為0—1的隨機數
global c1; %個體最優導向系數
global c2; %全局最優導向系數
global gbest_x; %全局最優解x軸坐標
global gbest_y; %全局最優解y軸坐標
global best_fitness; %最優解
global best_in_history; %最優解變化軌跡
global x_min; %x的下限
global x_max; %x的上限
global y_min; %y的下限
global y_max; %y的上限
global gen; %迭代次數
global exetime; %當前迭代次數
global max_velocity; %最大速度
initial; %初始化
for exetime=1:gen
outputdata; %實時輸出結果
adapting; %計算適應值
errorcompute(); %計算當前種群適值標准差
updatepop; %更新粒子位置
pause(0.01);
end
clear i;
clear exetime;
clear x_max;
clear x_min;
clear y_min;
clear y_max;
%程序初始化
gen=100; %設置進化代數
popsize=30; %設置種群規模大小
best_in_history(gen)=inf; %初始化全局歷史最優解
best_in_history(gen)=inf; %初始化全局歷史最優解
max_velocity=0.3; %最大速度限制
best_fitness=inf;
%popnum=1; %設置種群數量
pop(popsize,8)=0; %初始化種群,創建popsize行5列的0矩陣
%種群數組第1列為x軸坐標,第2列為y軸坐標,第3列為x軸速度分量,第4列為y軸速度分量
%第5列為個體最優位置的x軸坐標,第6列為個體最優位置的y軸坐標
%第7列為個體最優適值,第8列為當前個體適應值
for i=1:popsize
pop(i,1)=4*rand()-2; %初始化種群中的粒子位置,值為-2—2,步長為其速度
pop(i,2)=4*rand()-2; %初始化種群中的粒子位置,值為-2—2,步長為其速度
pop(i,5)=pop(i,1); %初始狀態下個體最優值等於初始位置
pop(i,6)=pop(i,2); %初始狀態下個體最優值等於初始位置
pop(i,3)=rand()*0.02-0.01; %初始化種群微粒速度,值為-0.01—0.01,間隔為0.0001
pop(i,4)=rand()*0.02-0.01; %初始化種群微粒速度,值為-0.01—0.01,間隔為0.0001
pop(i,7)=inf;
pop(i,8)=inf;
end
c1=2;
c2=2;
x_min=-2;
y_min=-2;
x_max=2;
y_max=2;
gbest_x=pop(1,1); %全局最優初始值為種群第一個粒子的位置
gbest_y=pop(1,2);
%適值計算
% 測試函數為f(x,y)=100(x^2-y)^2+(1-x)^2, -2.048<x,y<2.048
%計算適應值並賦值
for i=1:popsize
pop(i,8)=100*(pop(i,1)^2-pop(i,2))^2+(1-pop(i,1))^2;
if pop(i,7)>pop(i,8) %若當前適應值優於個體最優值,則進行個體最優信息的更新
pop(i,7)=pop(i,8); %適值更新
pop(i,5:6)=pop(i,1:2); %位置坐標更新
end
end
%計算完適應值後尋找當前全局最優位置並記錄其坐標
if best_fitness>min(pop(:,7))
best_fitness=min(pop(:,7)); %全局最優值
gbest_x=pop(find(pop(:,7)==min(pop(:,7))),1); %全局最優粒子的位置
gbest_y=pop(find(pop(:,7)==min(pop(:,7))),2);
end
best_in_history(exetime)=best_fitness; %記錄當前全局最優
%實時輸出結果
%輸出當前種群中粒子位置
subplot(1,2,1);
for i=1:popsize
plot(pop(i,1),pop(i,2),'b*');
hold on;
end
plot(gbest_x,gbest_y,'r.','markersize',20);axis([-2,2,-2,2]);
hold off;
subplot(1,2,2);
axis([0,gen,-0.00005,0.00005]);
if exetime-1>0
line([exetime-1,exetime],[best_in_history(exetime-1),best_fitness]);hold on;
end
%粒子群速度與位置更新
%更新粒子速度
for i=1:popsize
pop(i,3)=rand()*pop(i,3)+c1*rand()*(pop(i,5)-pop(i,1))+c2*rand()*(gbest_x-pop(i,1)); %更新速度
pop(i,4)=rand()*pop(i,4)+c1*rand()*(pop(i,6)-pop(i,2))+c2*rand()*(gbest_x-pop(i,2));
if abs(pop(i,3))>max_velocity
if pop(i,3)>0
pop(i,3)=max_velocity;
else
pop(i,3)=-max_velocity;
end
end
if abs(pop(i,4))>max_velocity
if pop(i,4)>0
pop(i,4)=max_velocity;
else
pop(i,4)=-max_velocity;
end
end
end
%更新粒子位置
for i=1:popsize
pop(i,1)=pop(i,1)+pop(i,3);
pop(i,2)=pop(i,2)+pop(i,4);