matlab显示维度不一致,怎么改呀
clc; clear;
close all;
feature jit off
[ model ] = CreatModel() ; %模型建立
CostFunction=@(x)Mycost( x, model ) ; %目标函数
nVar= model.nVar ; % 变量个数
VarSize=[1 nVar]; %决策变量的维度
VarMin= 0;
VarMax= 1 ; %基因取值为 0 到 1 之间的数
%遗传算法参数设置
MaxIt = 600; %最大迭代次数
nPop = 100; %种群数目
pc = 0.7; %交叉概率
nc = 2*round(pc*nPop/2); %交叉所得新个体的数目
gamma = 0.4; %交叉操作参数
pm=0.3; %变异概率
nm=round(pm*nPop); %变异所得新个体的数目
mu=0.1; %变异操作参数
beta=8; %轮盘赌选择参数
%初始化
rand('seed' , sum( clock) ) ;
empty_individual.Position= [ ];
empty_individual.Cost= [ ];
empty_individual.sol = [ ];
pop=repmat(empty_individual,nPop,1); % 构建初始化种群
for i=1:nPop
pop(i).Position=unifrnd(VarMin,VarMax,VarSize); % 初始化编码
[ pop(i).Cost , pop(i).sol ] = CostFunction(pop(i).Position); %计算目标函数值
end
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder); %按目标函数值排序
BestSol=pop(1); %记录最优解
BestCost=zeros(MaxIt,1); %记录每代的最优解
WorstCost=pop(end).Cost; %最差解的目标函数值
%GA 算法主循环
tic
for it=1:MaxIt
P=exp(-beta*Costs/WorstCost); %轮盘赌选择概率
P=P/sum(P);
popc=repmat(empty_individual,nc/2,2); %交叉操作
for k=1:nc/2
i1=RouletteWheelSelection(P);
i2=RouletteWheelSelection(P);
p1=pop(i1); %选择父代
p2=pop(i2);
[popc(k,1).Position,popc(k,2).Position]=Crossover(p1.Position,p2.Position,gamma,VarMin,VarMax);
[ popc(k,1).Cost , popc(k,1).sol ] =CostFunction(popc(k,1).Position);
[ popc(k,2).Cost , popc(k,2).sol ] =CostFunction(popc(k,2).Position);
end
popc=popc(:); %交叉操作,并保存子代
popm=repmat(empty_individual,nm,1); %变异操作
for k=1:nm %选择父代
i=randi([1 nPop]);
p=pop(i);
popm(k).Position=Mutate(p.Position,mu,VarMin,VarMax);
[ popm(k).Cost , popm(k).sol ] =CostFunction(popm(k).Position);
end %变异操作,并保存子代
pop=[pop popc popm]; %将交叉,变异后的子代加入到原种群中
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder); %再次排序
WorstCost=max(WorstCost,pop(end).Cost); %更新最差解
pop=pop(1:nPop); %取最优秀的的前一百代
Costs=Costs(1:nPop);
BestSol=pop(1); %更新最优解
BestCost(it)=BestSol.Cost;
if BestSol.sol.IsFeasible
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it)) '*** ' ]);
else
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
% 显示迭代信息,且若为可行解(没有超载和满意度过低情况)则显示“***”。
end
timeval =toc;
disp( ['算法运行时间' num2str(timeval ) ]); %显示算法运行时间
PlotSolution(BestSol , model) %画出最优解的配送路线
figure('NumberTitle', 'off', 'Name', '算法收敛曲线', 'Color',[1 1 1]);
plot(BestCost,'LineWidth',2);
xlabel('Iterations', 'fontsize',13,'fontname','Times new roman');
ylabel('Objective', 'fontsize',13,'fontname','Times new roman');
grid off; box off %画出收敛曲线