📄 one_domain.m
字号:
%构造函数
function y_fun=fun(x)
y=5*x^6-36*x^5+82.5*x^4-60*x^3+36
%将蚁群在解空间按一定方式作初始分布
dx=0.01;
Ev=50;
p=0.01;
Ilast=0;
C=150
start=0;
ending=3.5;
count=1;
n=9;
Drl=(ending-start)/n;
Dmrl=Drl;
i=1:n;
Nr(i)=1;
x(i)=start+(i-1/2)*Drl;
xl(i)=start+(i-1)*Drl;
xr(i)=start+i*Drl;
Dmrl=Drl;
while count<500
%根据蚁群所处解空间位置的优优伶决定当前蚁群的信息量分布
for i=1:9
sum=0;
for j=1:9
M(i)=C-fun(x(i)); %最小值函数
Ti=inline('M(j)*exp(-k(j)*(x-x(j))/(1+exp(-k(j)*(x-x(j)))^2');
IN(j)=quad('Ti',xl(i),xr(i));
sum=sum+IN(j);
end
IN(i)=sum;
end
I(i)=IN(i)+p*Ilast(i)-Ev;
Isum=sum(I);
Nm(i)=I(i)/Isum*N;
Ilast(i)=I(i);
%根据各子区间内应有的蚁群分布与当前蚁群分布之间的差别,决定蚁群的移动方向,并加以移动
for i=1:n
NML(i)=0
for j=1:i-1
NML(i)=Nm(j)+NML(i);
end
end
NR(i)=NML(I)
for i=1:n
NMR(i)=0
for j=i+1:n
NMR(i)=Nm(j)+NMR(i)
end
end
for i=1:n
NRL(i)=0
for j=1:i-1
NRL(i)=Nr(j)+NRL(i)
end
end
for i=1:n
NRR(i)=0
for j=1:i-1
NRR(i)=Nr(j)+NRR(i)
end
end
%规则
i=1:n
if NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)-dx
Nr(i)=Nr(i)-dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)+dx
Nr(i)=Nr(i)+dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)+dx
Nr(i)=Nr(i)+dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)+dx
Nr(i)=Nr(i)+dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)-dx
Nr(i)=Nr(i)-dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)-dx
Nr(i)=Nr(i)-dn
elseif NRL(i)>NML(i)&NR(i)=NM(i)&NRR(i)>NMR(i)
x(i)=x(i)+dx
Nr(i)=Nr(i)+dn
end
count=count+1
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -