📄 maea_total.m
字号:
% 目标函数:f(x1,x2)=100*(x1^2-x2^2)^2+(1-x1)^2
% 其中:-2.048<=x1<=2.048,-2.048<=x2<=2.048
%%%%% 初始化智能体网格L %%%%%
% 网格规模Lsize*Lsize,维数dim
clc
clear all
Lsize=input('请输入智能体网格行列数目(整数)以确定其规模: ');
num=input('请输入参与负荷分配的机组数目(整数): ');
code=input('请输入编码位数: ');
dim=code*num;
Tmax=30;%设置进化代数
L=rand(Lsize,Lsize,dim);
for i=1:Lsize
for j=1:Lsize
for k=1:dim
if L(i,j,k)<=0.5
L(i,j,k)=0;
else
L(i,j,k)=1;
end
end
end
end
clear i;
clear j;
clear k;
for T=1:Tmax
%%%%% 竞争行为 %%%%%
% 设定参数:竞争感知范围Rs,本次参考点坐标I、J
Rs=1;
for I=1:Lsize
for J=1:Lsize
R1a=0;
R2a=0;
% 计算参考点的目标函数值
for i=1:dim
A(i)=L(I,J,i);
end
for j=1:code
R1a=R1a+A(j)*2^(code-j);
end
for j=(code+1):(2*code)
R2a=R2a+A(j)*2^(2*code-j);
end
R1=R1a*4.096/(2^code-1)-2.048;
R2=R2a*4.096/(2^code-1)-2.048;
RefTag=100*(R1^2-R2^2)^2+(1-R1)^2;
clear i;
clear j;
% 循环求取竞争邻域坐标
for i=(I-Rs):(I+Rs)
for j=(J-Rs):(J+Rs)
if i<1
i=i+Lsize;
end
if i>Lsize
i=i-Lsize;
end
if j<1
j=j+Lsize;
end
if j>Lsize
j=j-Lsize;
end
% 计算某一竞争邻域元素值
N1a=0;
N2a=0;
for k=1:dim
B(k)=L(i,j,k);
end
% 计算某一竞争邻域元素的目标函数值
% 解码:前10位为x1,后10位为x2
for l=1:code
N1a=N1a+B(l)*2^(code-l);
end
for l=(code+1):(2*code)
N2a=N2a+B(l)*2^(2*code-l);
end
N1=N1a*4.096/(2^code-1)-2.048;
N2=N2a*4.096/(2^code-1)-2.048;
% 目标值
NeibTag=100*(N1^2-N2^2)^2+(1-N1)^2;
% 比较参考点与该竞争邻域元素的目标值大小,确定大能量智能体的坐标
if RefTag<NeibTag
RefTag=NeibTag;
imax=i;% 能量较大智能体的i坐标
jmax=j;% 能量较大智能体的j坐标
else
imax=I;
jmax=J;
end
end
end
clear h;
clear i;
clear j;
clear k;
clear l;
% 竞争行为的子代的产生
if imax~=I|jmax~=J
for i=1:dim
C(i)=L(I,J,i);% 参考点第三维向量
end
for j=1:dim
D(j)=L(imax,jmax,j);% 最大竞争邻域智能体第三维向量
end
% 引入参数Dh,确定采用何种竞争方式
Dh=0.5;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PROBLEM
HD=0;% 向量C和D的海明距离
for h=1:dim
if C(h)~=D(h)
HD=HD+1;
end
end
if HD/dim>Dh
% 第一种竞争方式
for k=1:dim
Rdm1=randint;
if C(k)==D(k)
L(I,J,k)=L(imax,jmax,k);
elseif Rdm1==0
L(I,J,k)=L(imax,jmax,k);
else
L(I,J,k)=1-L(imax,jmax,k);
end
end
else
% 第二种竞争方式
for l=1:dim
Rdm2=rand;
if Rdm2>1/dim
L(I,J,l)=L(imax,jmax,l);
else
L(I,J,l)=1-L(imax,jmax,l);
end
end
end
else
for m=1:dim
L(I,J,m)=L(I,J,m);
end
end
end
end
clear h;
clear i;
clear j;
clear k;
clear l;
clear m;
clear imax;
clear jmax;
%%%%% 自学习行为 %%%%%
% 构造总学习表
LL=zeros(dim*(dim+1)/2,2);
h=0;
for i=1:dim
for j=i:dim
h=h+1;
LL(h,1)=i;
LL(h,2)=j;
end
end
clear h;
clear i;
clear j;
% 设定参数:自学习感知范围LRs,本次参考点坐标LI、LJ
LRs=2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PROBLEM
for LI=1:Lsize
for LJ=1:Lsize
LR1a=0;
LR2a=0;
% 计算参考点的目标函数值
for i=1:dim
E(i)=L(LI,LJ,i);
end
for j=1:code
LR1a=LR1a+E(j)*2^(code-j);
end
for j=(code+1):(2*code)
LR2a=LR2a+E(j)*2^(2*code-j);
end
LR1=LR1a*4.096/(2^code-1)-2.048;
LR2=LR2a*4.096/(2^code-1)-2.048;
% 目标值
LRefTag=100*(LR1^2-LR2^2)^2+(1-LR1)^2;
clear i;
clear j;
% 循环求取自学习邻域目标函数值
LNeibTag=zeros(1,(1+2*LRs)^2);% 自学习邻域目标函数值向量
h=0;
for i=(LI-LRs):(LI+LRs)
for j=(LJ-LRs):(LJ+LRs)
h=h+1;
if i<1
i=i+Lsize;
end
if i>Lsize
i=i-Lsize;
end
if j<1
j=j+Lsize;
end
if j>Lsize
j=j-Lsize;
end
% 计算某一自学习邻域元素值
LN1a=0;
LN2a=0;
for k=1:dim
F(k)=L(i,j,k);
end
for l=1:code
LN1a=LN1a+F(l)*2^(code-l);
end
for l=(code+1):(2*code)
LN2a=LN2a+F(l)*2^(2*code-l);
end
% 计算某一自学习邻域元素的目标函数值
% 解码:前10位为x1,后10位为x2
LN1=LN1a*4.096/(2^code-1)-2.048;
LN2=LN2a*4.096/(2^code-1)-2.048;
% 目标值
LNeibTag(h)=100*(LN1^2-LN2^2)^2+(1-LN1)^2;
end
end
clear h;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -