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由於此演算法精度高,採取措施對誤差進行抑制,所以其實現原理也較複雜。該演算法
粒子群優化模糊PID控制的量化因子和比例因子出現問題?請問能幫忙看看麼
題主還有這個程式麼,求發,很急 謝謝了 1270459033 qq.com 可有償提供 模糊pid控制中的論域以及量化因子 比例因子怎麼設定啊?你的圖沒看懂,說下圖之外的東西吧 粒子群演算法作為搜尋演算法,你想搜尋的引數有三個ke,kec,ku,那就設定每個粒子的維數是3,分別代表ke,kec,ku...