该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
global n;
n=1008; %仓库总货位数
F=[];
F=xlsread('基础数据','B7:D7'); %导入各类货品从出入口进出的平均频率
S=[];
S=xlsread('基础数据','B3:D3'); %导入各类货品需要的存储空间矩阵
D1=[];
D1=xlsread('基础数据','A1:A1008');
D=D1'; %导入货位到出入口的距离矩阵
%%遗传过程
NIND=100; %个体数目
MAXGEN=100; %最大遗传代数
NVAR=3*n; %变量个数
GGAP=1; %代沟
trace =[]; %性能跟踪
BaseV=crtbase(NVAR,2);
[Chrom,Lind,BaseV]=crtbp(NIND, NVAR, BaseV); %创建实值种群
x=Chrom;
gen=1;
Lamda=2;
while gen< MAXGEN
Objv=Objvfa(x(:,:),Lamda); %引入罚函数的目标函数
Fitnv=ranking(Objv); %排序分配适应度
Selch=select('rws',Chrom(1:NIND,:),Fitnv,GGAP); %选择
Selch=recombin('recdis',Selch,0.65); %离散重组方法交叉
Chrom=mut(Selch,0.05); %离散变异方法变异
x=Chrom;
trace(gen,1)=min(f(x));
trace(gen,2)=sum(f(x))/length(f(x));
gen=gen+1
Lamda=Lamda+2;
end
LF=f(x);
minf=min(LF) %输出近似最优值
a=find(LF==minf)
v=x(a,:) %输出近似最优解
%%迭代目标函数性能跟踪图
figure(1);clf;
plot(trace(:,1));hold on;
plot(trace(:,2)'-.');
plot(trace(:,1)'.');
plot(trace(:,2)'.');grid;
legend('解的变化','种群均值的变化');
xlabel('迭代次数'); ylabel('目标函数值');
%%若干次迭代的目标函数值性能跟踪图
figure⑵;clf;
plot(f(x)'r-.');grid;
%%目标函数M文件
function f1c=f1(x)
global n;
n=1008;
D1=xlsread('基础数据','A1:A1008');
D=D1';
f1c=0;
for j=1:n
f1c=f1c+(19.43*D(1,j)/235).*x(:,j);
end
function f2c=f2(x)
global n;
n=1008;
D1=xlsread('基础数据','A1:A1008');
D=D1';
f2c=0;
for j=n+1:2*n
f2c=f2c+(12.49*D(1,j-n)/300).*x(:,j);
end
function f3c=f3(x)
global n;
n=1008;
D1=xlsread('基础数据','A1:A1008');
D=D1';
f3c=0;
for j=2*n+1:3*n
f3c=f3c+(4.89*D(1,j-2*n)/473).*x(:,j);
end
function fc=f(x)
fc=f1(x)+f2(x)+f3(x);
罚函数Objvfa(x)的M文件Objvfei.m的代码:
function Objvfac=Objvfa(x,Lamda)
global n;
n=1008;
NIND=100;
S=xlsread('基础数据','B3:D3'); %导入各类货品需要的存储空间矩阵
st11=0;
for k=1:n
st11=st11+x(:,k);
end
st12=0;
for k=n+1:2*n
st12=st12+x(:,k);
end
st13=0;
for k=2*n+1:3*n
st13=st13+x(:,k);
end
for i=1:NIND
if st11(i,1)==S(1,1)
p1(i,1)=0;
else p1(i,1)=1;
end
if st12(i,1)==S(1,2)
p2(i,1)=0;
else p2(i,1)=1;
end
if st13(i,1)==S(1,3)
P3(i,1)=0;
else p3(i,1)=1;
end
end
st2=zeros(NIND,n);
qj=zeros(NIND,n);
Objvfac=zeros(NIND,1);
for j=1:n
st2(:,j)=x(:,j)+x(:,j+n)+x(:,j+2*n);
for i=1:NIND
if st2(i,j)==1
qj(i,j)=0;
else qj(i,j)=1;
end
end
end
Obiao1=mapminmax(f(x)',0,1);
Obiao2=mapminmax(abs(st11(:,1)-S(1,1))',0,1);
Obiao3=mapminmax(abs(st12(:,1)-S(1,2))',0,1);
Obiao4=mapminmax(abs(st13(:,1)-S(1,3))',0,1);
Obiao5=mapminmax(abs(st2-1)',0,1);
Objvfac=Obiao1'+Lamda*(p1(:,1).*Obiao2'+p2(:,1).*Obiao3'+p3(:,1).*Obiao4'+sum(qj.*Obiao5',2));
运行时说crtbase未定义,怎么定义呢