May_12138 2023-03-11 21:20 采纳率: 100%
浏览 33
已结题

matlab数组维度不一致

matlab显示维度不一致,怎么改呀

img

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 %画出收敛曲线



  • 写回答

2条回答 默认 最新

  • Leodong. 2023-03-11 21:46
    关注

    这行代码有问题: pop=[pop popc popm]; %将交叉,变异后的子代加入到原种群中,更改如下:

    pop = cat(1, pop, popc, popm);
    
    

    这样就可以将三个数组按照第一个维度进行拼接,得到一个维度为 [3*nPop, 1] 的数组。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 请提供一个符合要求的网页链接。
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码