優化演算法程序
⑴ 粒子群優化演算法(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('適應度');
⑵ 關於群智能優化演算法程序的問題
POS是一個二維數組 POS[i][j], 設其大小為 n * m
POS(i,:) 在matlab里表示 一個大小為m的一維數組 其中元素為 POS[i][0],...,POS[i][m-1]
⑶ 哪位大神能幫我翻譯一下這段程序-------粒子群優化演算法
清除所有
中圖分類號
% % %的0418s標准粒群優化演算法程序2007.1.9郟宣耀%測試函數:F(x,y)= 100(x ^ 2-y)^ 2 +(1-x)^ 2,2.048<x,y<2.048%求解函數最小值
tic
%程序初始化
n=10;
Ni = 1000;%設置進化代數
設置種群規模大小popsize = 50;%
max_velocity = 100 *的(1,n);%最大速度限制
XMAX = 100 *的(1,n);xmin = 100 *的(1,n);
C1 = 2;C2 = 2;iw_min = 0.4;iw_max = 0.9;
%%%%%%%%%
流行= 0(popsize,N + 1)= 0;記憶體(popsize,n + 1);速度=零(popsize,N);最優=零(1,n + 1);
記憶體(:,n + 1)=信息*人(popsize,1);進行(n + 1)= inf;
我= 1:popsize
對於j = 1:n
流行(I,J)= Xmin(J)+ rand() *(Xmax(J)- XMIN(j));
速度(I,J)= Xmin(J)+ rand() *(Xmax(J)- XMIN(j));
結束
結束
對於ni=1:ni
我= 1:popsize
彈出(i,n + 1)= 0;
對於j = 1:n
POP(i,n + 1)= POP(i,n + 1)+ POP(i,j)2;
結束
如果流行(i,n + 1)< pbest(i,n + 1)
記憶體(我,:)=流行(我,:);
如果記憶體(i,n + 1)< gBest(n + 1)
gBest = pbest(我,:);
結束
結束
結束
IW(Ni)= iw_max -(iw_max-iw_min)*鎳/鎳;
我= 1:popsize
對於j = 1:n
速度(I,J)= IW(Ni)*速度(I,J)+ C1 * rand() *(pbest(i,j)(i,j)流行)+ C2 * rand() *(gBest(J)-(i,j)的流行率更新速度);
如果速度(I,J)> max_velocity(J)
速度(I,J)= max_velocity(J);
「(i,j)的速度有max_velocity(J)
速度(I,J)= - max_velocity(J);
結束
彈出(i,j)=彈出(i,j)+速度(i,j);
如果流行(I,J)>Xmax(J)
流行(I,J)= Xmax(J);
「(i,j)流行<< XMIN(J)
流行(I,J)= Xmin(J);
結束
結束
結束
fbest1(Ni)= gBest(n + 1);
結束
FF1 = gBest(n + 1);
x=1:ni;
圖形、符號學(x,fbest1,』B』);
傳說('pso」);
xlabel('generation ');ylabel(「平均值」為標題的功能);('sphere功能);
⑷ 急求一些最優化演算法的程序!比如說遺傳演算法、模擬退火、粒子群優化演算法等等一些常見演算法的程序。
google 網路。。。一堆一堆的。。。。。。
比如: http://www.google.com/search?hl=zh-CN&newwindow=1&biw=1280&bih=830&q=%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95+%E7%A8%8B%E5%BA%8F&aq=f&aqi=g-g4g1g-g4g1&aql=&oq=
自己找找啊……
⑸ 求一個POA(逐步優化演算法)的程序,最好詳細一點,隨便什麼語言寫的都行
這是一個POA演算法(C#)的梯級電站優化計算的程序,來源於網路文庫,代碼太長,這里只給個連接。
http://wenku..com/link?url=__hjQbHSgEDNe_t882vty8EFstMni1VzBe
⑹ 求解非線性方程的的最優化演算法C++程序
j是復數單位嗎?可以試試http://dlib.net/,下面是個示例,我沒有提供導數什麼的,所以不穩定。它的用法和matlab挺像,你應該能搞定。
#include<dlib/optimization.h>
#include<iostream>
usingnamespacestd;
usingnamespacedlib;
typedefmatrix<double,2,1>column_vector;
typedefcomplex<double>complex_t;
intconstM=3;
staticmatrix<double,3,M>a;
voidinit(){
staticbooltag=true;
if(tag){
a=0,1,2,3,4,5,6,7,8;
tag=false;
}
}
doublefoo(constcolumn_vector&x){
init();
complex_tres;
for(inti=0;i!=a.nc();++i){
res+=exp(complex_t(
0,
a(0,i)+a(1,i)*x(0)+a(2,i)*x(1)
));
}
returnnorm(res)/M;
}
intmain(){
try{
column_vectorstarting_point;
starting_point=0,0;
doublemax_value=find_max_box_constrained(bfgs_search_strategy(),
objective_delta_stop_strategy(1e-9),
foo,derivative(foo),starting_point,-50,50);
cout<<"x0= "<<starting_point<<" foo(x0)="<<max_value<<" ";
}
catch(std::exceptionconst&e){
cerr<<e.what()<<" ";
}
return0;
}
運行結果:
⑺ 經濟最優單目標遺傳優化演算法怎麼實現
我給你一個標准遺傳演算法程序供你參考:
該程序是遺傳演算法優化BP神經網路函數極值尋優:
%% 該代碼為基於神經網路遺傳演算法的系統極值尋優
%% 清空環境變數
clc
clear
%% 初始化遺傳演算法參數
%初始化參數
maxgen=100; %進化代數,即迭代次數
sizepop=20; %種群規模
pcross=[0.4]; %交叉概率選擇,0和1之間
pmutation=[0.2]; %變異概率選擇,0和1之間
lenchrom=[1 1]; %每個變數的字串長度,如果是浮點變數,則長度都為1
bound=[-5 5;-5 5]; %數據范圍
indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %將種群信息定義為一個結構體
avgfitness=[]; %每一代種群的平均適應度
bestfitness=[]; %每一代種群的最佳適應度
bestchrom=[]; %適應度最好的染色體
%% 初始化種群計算適應度值
% 初始化種群
for i=1:sizepop
%隨機產生一個種群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%計算適應度
indivials.fitness(i)=fun(x); %染色體的適應度
end
%找最好的染色體
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色體
avgfitness=sum(indivials.fitness)/sizepop; %染色體的平均適應度
% 記錄每一代進化中最好的適應度和平均適應度
trace=[avgfitness bestfitness];
%% 迭代尋優
% 進化開始
for i=1:maxgen
i
% 選擇
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 變異
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);
% 計算適應度
for j=1:sizepop
x=indivials.chrom(j,:); %解碼
indivials.fitness(j)=fun(x);
end
%找到最小和最大適應度的染色體及它們在種群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次進化中最好的染色體
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;
avgfitness=sum(indivials.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %記錄每一代進化中最好的適應度和平均適應度
end
%進化結束
%% 結果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('適應度曲線','fontsize',12);
xlabel('進化代數','fontsize',12);ylabel('適應度','fontsize',12);
axis([0,100,0,1])
disp('適應度 變數');
x=bestchrom;
% 窗口顯示
disp([bestfitness x]);
⑻ 優化演算法是什麼呢
優化演算法是指對演算法的有關性能進行優化,如時間復雜度、空間復雜度、正確性、健壯性。
大數據時代到來,演算法要處理數據的數量級也越來越大以及處理問題的場景千變萬化。為了增強演算法的處理問題的能力,對演算法進行優化是必不可少的。演算法優化一般是對演算法結構和收斂性進行優化。
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
遺傳演算法
遺傳演算法也是受自然科學的啟發。這類演算法的運行過程是先隨機生成一組解,稱之為種群。在優化過程中的每一步,演算法會計算整個種群的成本函數,從而得到一個有關題解的排序,在對題解排序之後,一個新的種群----稱之為下一代就被創建出來了。首先,我們將當前種群中位於最頂端的題解加入其所在的新種群中,稱之為精英選拔法。新種群中的餘下部分是由修改最優解後形成的全新解組成。
常用的有兩種修改題解的方法。其中一種稱為變異,其做法是對一個既有解進行微小的、簡單的、隨機的改變;修改題解的另一種方法稱為交叉或配對,這種方法是選取最優解種的兩個解,然後將它們按某種方式進行組合。爾後,這一過程會一直重復進行,直到達到指定的迭代次數,或者連續經過數代後題解都沒有改善時停止。
⑼ matlab最優化演算法有哪些
matlab最優化程序包括
無約束一維極值問題 進退法 黃金分割法 斐波那契法 牛頓法基本牛頓法 全局牛頓法 割線法 拋物線法 三次插值法 可接受搜索法 Goidstein法 Wolfe.Powell法
單純形搜索法 Powell法 最速下降法 共軛梯度法 牛頓法 修正牛頓法 擬牛頓法 信賴域法 顯式最速下降法, Rosen梯度投影法 罰函數法 外點罰函數法
內點罰函數法 混合罰函數法 乘子法 G-N法 修正G-N法 L-M法 線性規劃 單純形法 修正單純形法 大M法 變數有界單純形法 整數規劃 割平面法 分支定界法 0-1規劃 二次規劃
拉格朗曰法 起作用集演算法 路徑跟蹤法 粒子群優化演算法 基本粒子群演算法 帶壓縮因子的粒子群演算法 權重改進的粒子群演算法 線性遞減權重法 自適應權重法 隨機權重法
變學習因子的粒子群演算法 同步變化的學習因子 非同步變化的學習因子 二階粒子群演算法 二階振盪粒子群演算法
⑽ 人工螢火蟲群優化演算法的流程是什麼
人工螢火蟲群優化演算法流程如下:
1.初始化演算法基本參數。
2.隨機初始化螢火蟲的位置,計算螢火蟲的目標函數值作為各自最大螢光亮度。
3.計算群體中螢火蟲的相對亮度I和吸引度β,根據相對亮度決定螢火蟲的移動方向。
4.更新螢火蟲的空間位置,對處在最佳位置的螢火蟲進行隨機擾動。
5.根據更新後螢火蟲的位置,重新計算螢火蟲的亮度。
6.當滿足搜索精度或達到最大搜索次數時則轉7.否則,搜索次數增加1,轉3,進行下一次搜索。
7.輸出全局最優值和個體最優值。