ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

# 基于聚类、贪心、模拟退火的分拣问题的研究

2022-07-14 21:33:22  阅读:164  来源: 互联网

标签:分拣 层次 means MTSP cluster 模拟退火 聚类 TSP


基于聚类、贪心、模拟退火的分拣问题的研究

问题1

1. 余弦相似性聚类算法

余弦相似性求邻近度的凝聚型层次聚类算法

凝聚层次聚类:凝聚的层次聚类是一种自底向上的策略。(分裂的层次聚类与凝聚的层次聚类相反)

所谓凝聚的,指的是该算法初始时,将每个点作为一个簇,每一步合并两个最接近的簇。另外即使到最后,对于噪音点或是离群点也往往还是各占一簇的,除非过度合并。

2. 聚类、距离衡量方法:

​ 相关方法介绍:https://blog.csdn.net/weixin_38233103/article/details/121902770

欧式距离

\[d_{12}=\sqrt{\sum_{k=1}^{n}(x_{1k}-x_{2k})^2} \]

曼哈顿距离

\[d_{12}=\sum_{k=1}^{n}|x_{1k}-x_{2k}| \]

切比雪夫距离:向量分量差值的绝对值的最大值。

余弦距离:两个向量 \(\alpha\)、\(\beta\) 的夹角余弦度量

\[cos(\theta)=\frac{\alpha\cdot\beta}{|\alpha||\beta|} \]

信息熵:基于信息熵加权的聚类集成算法——https://jns.nju.edu.cn/article/2021/0469-5097/0469-5097-2021-57-2-189.shtml

K-means

  1. 从数据集D中随机选择K个对象作为初始簇中心
  2. 将每个对象分配到与其最近的簇中心的簇中
  3. 重新计算簇的均值,使用新的均值作为当前簇的中心
  4. 重复步骤2、3,直到所有簇中的对象不再变化。

DBSCAN聚类:DBSCAN最终的聚类状态是,所有密度可达的和密度相连的被划分到一个簇。

3. Python聚类工具 scipy cluster

相关链接:https://blog.csdn.net/justdoithai/article/details/52852843

层次聚类 + k_means聚类:

# 导入相应的包
import scipy
import scipy.cluster.hierarchy as sch #层次聚类
from scipy.cluster.vq import vq, kmeans, whiten #矢量化聚类
import numpy as np
import matplotlib.pylab as plt

# 生成待聚类的数据点,这里生成了20个点,每个点4维:
points = np.random.randn(20, 4)
print(points)

# 1. 层次聚类________________________________________________________________________________________
# 生成点与点之间的距离矩阵,这里用的欧氏距离:
disMat = sch.distance.pdist(points, 'euclidean')
# 进行层次聚类:
Z = sch.linkage(disMat, method='average')
# 将层级聚类结果以树状图表示出来并保存为plot_dendrogram.png
P = sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
# 根据linkage matrix Z得到聚类结果:
cluster = sch.fcluster(Z, t=1, criterion='inconsistent')
print("Original cluster by hierarchy clustering:\n", cluster)
# 1. 层次聚类________________________________________________________________________________________

# 2. k-means聚类_____________________________________________________________________________________
# 将原始数据做归一化处理
data = whiten(points)
# 使用kmeans函数进行聚类,输入第一维为数据,第二维为聚类个数k.
# 有些时候我们可能不知道最终究竟聚成多少类,一个办法是用层次聚类的结果进行初始化.当然也可以直接输入某个数值.
# k-means最后输出的结果其实是两维的,第一维是聚类中心,第二维是损失distortion,我们在这里只取第一维,所以最后有个[0]
centroid = kmeans(data, max(cluster))[0]
# 使用vq函数根据聚类中心对所有数据进行分类,vq的输出也是两维的,[0]表示的是所有数据的label
label = vq(data, centroid)[0]
print("Final clustering by k-means:\n", label)
# 2. k-means聚类_____________________________________________________________________________________

问题2

  • 预处理:将出现频率高的货品种类交换到矩阵中心
  • 贪心算法
    1. 局部最优求解
    2. 逐列判断
    3. 交换货品摆放位置
    4. 循环上述操作直至没有最优解

问题3

结合MTSP(多旅行商问题)
目标函数:分拣用时——要求最短
采用模拟退火算法:交换法、倒置法、移位法
惩罚函数算法:均衡分配

MTSP问题:

MTSP:m个旅行商去旅游 n个城市,规定都必须从同一个出发点出发,而且返回原出发点,需要将所有的城市遍历完毕,每个城市只能游历一次,但是为了路径最短可以路过这个城市多次。这个就是多旅行商问题。是在TSP问题的基础上进行了扩展。

MTSP与TSP问题的区别:

  •  TSP指的是单个旅行商遍历一圈,将所有城市旅行一遍,
  •   MTSP指的是将城市群划分成M个组,每组采用TSP得到最短的旅行路线,所以问题的关键在于如何确定城市群的分组

『数学建模』TSP和MTSP问题:https://zhuanlan.zhihu.com/p/94884227
MTSP问题遗传算法解决及其代码与案例:https://blog.csdn.net/weixin_42141390/article/details/103787788
TSP/MTSP问题智能算法原理:https://zhuanlan.zhihu.com/p/383035070

标签:分拣,层次,means,MTSP,cluster,模拟退火,聚类,TSP
来源: https://www.cnblogs.com/litecdows/p/16479379.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有