免疫演算法(matlab) 求數的平方和

2021-10-01 12:26:49 字數 1974 閱讀 8838

數的平方和

function result =func(x)

sumn=sum(x.^2);

result=sumn;

end

clear all;

close all;

clc;

d=10;%免疫個體維數

np=100;%免疫個體數目

xs=20;%取值上限

xx=-20;%取值下限

g=500;

pm=0.7;%免疫概率

alfa=1;%激勵度係數

beta=1;%激勵度係數

detas=0.2;%相似值閾值

gen=0;

ncl=10;%轉殖個數

deta0=1*xs;%鄰域範圍取值

%%初試種群

f=rand(d,np)*(xs-xx)+xx;%產生上限值與下限值之間的隨機數

for np=1:np

msll(np)=func(f(:,np));%計算每個初始值的函式值

endfor np=1:np

for j=1:np

nd(j)=sum(sqrt((f(:,np)-f(:,j)).^2));%基於歐式距離的親和度計算

if nd(j)xs)|(na(ii,j)>xx)%邊界處理

na(ii,j)=rand*(xs-xx)+xx;

endend

endna(:,1)=sortf(:,i);%保留轉殖源個體

%轉殖抑制,保留親和度最高的個體

for j=1:ncl%轉殖個數

namsll(j)=func(na(:,j));

end[nasortmsll,index]=sort(namsll);

amsll(i)=nasortmsll(1);

nasortf=na(:,index);

af(:,i)=nasortf(:,1)

endfor 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;

endend

and(np)=sum(nda)/np/2;

endamsll=alfa*amsll-beta*and;

%種群重新整理

bf=rand(d,np/2)*(xs-xx)+xx;

for np=1:np/2

bmsll(np)=func(bf(:,np));

endfor np=1:np

msll(np)=func(f(:,np));%計算每個初始值的函式值

endfor 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;

endend

bnd(np)=sum(ndc)/np;%抗體間的濃度計算

endmsll=alfa*bmsll-beta*bnd;%抗體的激勵度計算,由抗體的親和度和濃度做運算得到

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

f1=[af,bf];

msll1=[amsll,bmsll];

[sortmsll,index]=sort(msll1);

sortf=f1(:,index);

gen=gen+1;

trace(gen)=func(sortf(:,1));

endbest=sortf(:,1);

trace(end);

figure,plot(trace)

xlabel("迭代次數")

ylabel("目標函式值")

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

求數的平方根

求i的平方根 param i 需要計算的數值 return public static double sqrt int i double low 0 double high i double middle 0 while high low 1e 5 else return middle 求i的平方根...

求陣列主元素的O n 演算法

在乙個規模為n的陣列a n 中,所謂主元素就是出現次數大於n 2的元素,例如 3.3.4.2.4.4.2.4.4 有乙個主元素為4。充分利用主元素的出現次數大於n 2這個已知條件,因為主元素的出現次數大於n 2,所以容易證明下面的解法是正確的 首先假設主元素是x,則遍歷陣列時出現與x相等的元素時,x...

dea的matlab演算法

clc,clear format long x xlsread data.xlsx 把原始資料儲存在純文字檔案data.txt中 x x 1 3 x為輸入變數,3為輸入變數的個數這裡可以自己設定 x x y x 4 5 y為輸出變數,5 3 2 2為輸出變數的個數這裡可以自己設定 y y n siz...