matlab 遗传算法实现物体均匀分组

背景

给定64个物体的质量,选中16个进行分组,组间质量差异最小。

重点和难点

组间质量差异最小,使用组重量的方差计算就行了。

遗传算法进行求解的问题,需要注意的是,经过交配和变异以后,染色体不符合原来的规律了。我们需要进行越界检查,然后

进行回调。

代码

%%%%%%%%%%%%%%遗传算法求取16/64 物体分组问题%%%%%%%%%%%%%%
clear ;                             %清除所有变量
close all;                             %清图
clc;                                  %清屏
%%%%%%% 加载数据%%%%%%%%%%%%%%%
objweights=table2array(readtable("质量.xlsx")); %加载表格,并转换为矩阵方便计算
idx=randperm(64,16)'; %产生1-64之间的随机数,数量为16,作为待分组物体的编号
global obj16
obj16=objweights(idx,2);

%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%

D = 16;                              %基因数目
NP = 100;                            %染色体数目
G = 100;                             %最大遗传代数
f=zeros(D,NP);                  %初始种群赋空间
nf = zeros(D,NP);                     %子种群赋空间
Pc = 0.8;                              %交叉概率
Pm = 0.1;                             %变异概率      
for i=1:NP
f(:,i)=randperm(D,D)';         %随机获得初始种群
end
%%%%%%%%%%%%%%%%按适应度升序排列%%%%%%%%%%%%%%%%
for np = 1:NP
    MSLL(np) = func2(f(:,np));
end
[SortMSLL,Index] = sort(MSLL);
Sortf = f(:,Index);
%%%%%%%%%%%%%%%%%遗传算法循环%%%%%%%%%%%%%%%%%
for gen = 1:G
    %%%%%%%%%%采用君主方案进行选择交叉操作%%%%%%%%%%%%



%%%  绘图表示
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%
function result = func2(x)

结果

源码

https://mbd.pub/o/bread/Y56XlZxs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值