日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jiegputo matlab转置,matlab实现用免疫克隆算法求二元函数的最优值(附源码)

發布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jiegputo matlab转置,matlab实现用免疫克隆算法求二元函数的最优值(附源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用免疫克隆算法求二元函數的最優值

求下面函數的最小值(最優解)

? Goldstein-Price函數:

? f1(x)=[1+(x1+x2+1)2(19-14x1+3x12-14x2+6x1x2+3x22)]*[30+(2x1-3x2)2(18-32x1+12x12+48x2-36x1x2+27x22)]

? -2≤x1,x2≤2

? 要求:(1)用免疫克隆算法編程求解問題

? 編程語言用MATLAB或C 或Java

? 輸出問題的最優解、并繪圖顯示

? 代碼:bestvalue.m

clear all;

clc;

figure

[x,y]=meshgrid(-2:0.01:2,-2:0.01:2);

z=((1+(x+y+1).^2).*(19-14.*x+3.*x.^2-14.*y+6.*x.*y+3.*y.^2)).*(30+(2.*x-3.*y).^2.*(18-32.*x+12.*x.^2+48.*y-36.*x.*y+27.*y.^2));

mesh(x,y,z)

xlabel('x')

ylabel('y')

hold on

%初始化

D=2; %免疫個體維數

NP=50; %免疫個體數目

Xs=4; %上限

Xx=-4; %下限

G=50; %最大免疫代數

pm=0.7; %變異概率

alfa=2; %激勵度參數

belta=1; %激勵度參數

detas=0.2; %相似度閾值

gen=0; %免疫代數

Nc1=5; %克隆個數

deta0=0.5*Xs; %鄰域范圍初值

%初始種群

f=rand(D,NP)*(Xs-Xx)+Xx;

for np=1:NP

MSLL(np)=fun(f(:,np));

end

%計算個體濃度和激勵度

for np=1:NP

for j=1:NP

nd(j)=sum(sqrt((f(:,np)-f(:,j)).^2));

if nd(j)

nd(j)=1;

else

nd(j)=0;

end

end

ND(np)=sum(nd)/NP;

end

MSLL=alfa*MSLL-belta*ND;

%激勵度按升序排列

[SortMSLL,Index]=sort(MSLL);

Sortf=f(:,Index);

%免疫循環

while gen

for i=1:NP/2

a=Sortf(:,i);

Na=repmat(a,1,Nc1);

deta=deta0/gen;

for j=1:Nc1

for ii=1:D

if rand

Na(ii,j)=Na(ii,j)+(rand-0.5)*deta;

end

%邊界條件處理

if (Na(ii,j)>Xs)||(Na(ii,j)

Na(ii,j)=rand*(Xs-Xx)+Xx;

end

end

end

Na(:,1)=Sortf(:,i);%保留克隆源個體

%克隆抑制,保留親和度最高的個體

for j=1:Nc1

NaMSLL=fun(Na(:,j));

end

[NaSortMSLL,Index]=sort(NaMSLL);

aMSLL(i)=NaSortMSLL(1);

NaSortf=Na(:,Index);

af(:,i)=NaSortf(:,1);

end

%免疫種群激勵度

for np=1:NP/2

for j=1:NP/2

nda(j)=sum(sqrt((af(:,np)-af(:,j)).^2));

if nda(j)

nda(j)=1;

else

nda(j)=0;

end

end

aND(np)=sum(nda)/NP/2;

end

aMSLL=alfa*aMSLL-belta*aND;

%總群刷新

bf=rand(D,NP/2)*(Xs-Xx)+Xx;

for np=1:NP/2

bMSLL(np)=fun(bf(:,np));

end

%生成新的種群激勵度

for np=1:NP/2

for j=1:NP/2

ndc(j)=sum(sqrt((bf(:,np)-bf(:,j)).^2));

if ndc(j)

ndc(j)=1;

else

ndc(j)=0;

end

end

bND=sum(ndc)/NP/2;

end

bMSLL=alfa*bMSLL-belta*bND;

%免疫種群與新生種群合并

f1=[af,bf];

MSLL=[aMSLL,bMSLL];

[SortfMSLL,Index]=sort(MSLL);

Sortf=f1(:,Index);

gen=gen+1;

trace(gen)=fun(Sortf(:,1));

end

%輸出優化結果

Bestf=Sortf(:,1);

trace(end);

disp('最優值為:')

disp(trace(end))

disp('最優個體為:')

disp(Bestf)

plot3(Bestf(1), Bestf(2), trace(end),'bo','linewidth',1.5)

figure

plot(trace)

xlabel('迭代次數')

ylabel('目標函數值')

title('親和度進化曲線')

%親和度函數

%目標函數

function v=fun(x)

v=((1+(x(1)+x(2)+1).^2).*(19-14.*x(1)+3.*x(1).^2-14.*x(2)+6.*x(1).*x(2)+3.*x(2).^2)).*(30+(2.*x(1)-3.*x(2)).^2.*(18-32.*x(1)+12.*x(1).^2+48.*x(2)-36.*x(1).*x(2)+27.*x(2).^2));

end

結果:

總結

以上是生活随笔為你收集整理的jiegputo matlab转置,matlab实现用免疫克隆算法求二元函数的最优值(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。