# 基于聚类、贪心、模拟退火的分拣问题的研究
2022/7/14 23:20:34
本文主要是介绍# 基于聚类、贪心、模拟退火的分拣问题的研究,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基于聚类、贪心、模拟退火的分拣问题的研究
问题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:
- 从数据集D中随机选择K个对象作为初始簇中心
- 将每个对象分配到与其最近的簇中心的簇中
- 重新计算簇的均值,使用新的均值作为当前簇的中心
- 重复步骤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
- 预处理:将出现频率高的货品种类交换到矩阵中心
- 贪心算法
- 局部最优求解
- 逐列判断
- 交换货品摆放位置
- 循环上述操作直至没有最优解
问题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
这篇关于# 基于聚类、贪心、模拟退火的分拣问题的研究的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南