數的平方和
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...