1. 程式人生 > 其它 >matlab解決差分進化演算法解決一元函式的最優值的問題

matlab解決差分進化演算法解決一元函式的最優值的問題

技術標籤:matlab程式設計演算法matlab機器學習差分法序列最小化優化演算法

差分進化演算法是一種全域性最優演算法,在差分演化演算法當中需要注意的幾個點為變異率F、交叉率Cr、基向量的選擇r0,r1,r2的選擇等問題。在研究差分演化演算法的過程之中有許多的改進,對基向量的改進、變異概率、交叉概率的改進。這裡提供的是經典的差分演化演算法,利用經典差分演化演算法解決一元函式的最優值問題。
經典的差分演化演算法步驟:
(1)初始化:x[i][j]=xmin+(xmax-xmin)*rand(D,Np);
xmin–變數的上界;xmax–變數的下界;D–種群數;Np–個體數;
(2)變異:v[i][j]=x[r0][j]+(x[r1][j]-x[r2][j])*F

通常F取0.5–09;但是對於函式的不同去<0.5也可以;
(3)交叉:u[i][j]=v[i][j]----Cr<rand()
u[i][j]=x[i][j]-----else
(4)選擇:x[i][j]=u[i][j]—f(u)<f(x);
xg[i][j]=x[i][j]—else;g指的是子代數
-----這裡是決定選最大值還是最小值
下面給出利用差分演化演算法求解一元函式最小值的案列:

% DE演算法的應用----針對一元函式
% 求解函式的最大值/最小值
% 解決問題:求解函式f(x)=x.*sin(10*x.*pi)+2
% 時間:2020.12.23
% 工具:matlab2018a
%
注意點:對於迴圈最好採用分步迴圈,最好做一個大迴圈,原因在於多次子迴圈將導致部分精度丟失 clc clear % 定義初始值 D=50; Np=1; Ft=0.5; %後期對其進行改進 Cr=0.8; xmax=2; xmin=-1; K=100; %迭代次數 %種群初始化 x=xmin+(xmax-xmin)*rand(D,1); F=Ft+0.001*(rand(D,1)-0.5); %改進後的變異因子 best=x(1,:); %選取其中一個最為最優值,為後面選取最優值做準備 tx=[xmin:0.01:xmax]; f=fun_DE(tx); figure(
1) plot(tx,f,'b') hold on f0=fun_DE(best); plot(best,f0,'ro','linewidth',2); %儲存最優子代 for i=2:D if fun_DE(best)>fun_DE(x(i,:)) best=x(i,:); end end fi=fun_DE(best); %把最優值傳遞給fi % 進行變異、交叉、選擇 for n=1:K time(n)=n; %做這一步的原因在於顯示在哪個位置進行收斂 % %變異 for i=1:D r0=0;r1=0;r2=0; while( r0==i||r1==i||r2==i||r0==r1||r0==r2||r1==r2) r0=ceil(D*rand(1)); r1=ceil(D*rand(1)); r2=ceil(D*rand(1)); end v(i,:)=x(r0,:)+F(i,:)*(x(r1,:)-x(r2,:)); for j=1:Np %檢查是否越界 if(v(i,j)<xmin(j)) v(i,j)=xmin(j); elseif(v(i,j)>xmax(j)) v(i,j)=xmax(j); end end %交叉 for j=1:Np if rand(1)<Cr u(i,j)=v(i,j); else u(i,j)=x(i,j); end end %選擇 if fun_DE(u(i,:))<fun_DE(x(i,:)) x(i,:)=u(i,:); end if fun_DE(x(i,:))<fi % fi=fun_DE1(x(i,:)); end best=x(i,:); best_f(n)=fun_DE(best); end end plot(best,best_f(n),'ro','linewidth',2) xlabel('x');ylabel('J'); title('函式最小值'); fprintf('最優解結果為%f,%f',best); fprintf('最小函式值為%f',best_f(n)); %列印最優 figure(2) plot(time,best_f(time),'r-'); xlabel('迭代次數');ylabel('最優值'); title('迭代後的最優結果')
輸出結果:
最優解結果為1.950519,最小函式值為0.049740>> 

結果圖形展示:

在這裡插入圖片描述
在這裡插入圖片描述