BOM关系数据中,给出了某家生产企业所生产的产品和原材料的关系数据,6002(产品)->原器件(非6002开头的) 请设计一个算法,用来衡量不同产品之间的“相似”程度,这种相似度的度量,可以用于排产,旨在减少换产(更换产品生产原器件供应配置)时间。使用程序实现该算法,应用在题目所提供的数据上。
时间: 2024-03-23 14:41:16 浏览: 17
针对这个问题,可以使用以下算法来衡量不同产品之间的相似程度:
1. 根据BOM关系数据,建立产品和原材料之间的关系图谱,以6002为根节点,非6002开头的原器件为叶子节点。
2. 对于每个产品,将其关系图谱转化为一个向量,向量中每个元素表示该产品所包含的原器件的数量。
3. 使用余弦相似度来计算不同产品之间的相似度,相似度越高表示两个产品之间的原器件配置越相似。
4. 将相似度矩阵保存下来,可以用于排产时选择相似度较高的产品组合,以减少换产时间。
下面是一个简单的Python实现代码:
```python
import numpy as np
# 定义BOM关系数据
BOM = {
'6002': ['1001', '1002', '1003'],
'6003': ['1002', '1003', '1004'],
'6004': ['1001', '1004', '1005'],
'6005': ['1003', '1005', '1006'],
'6006': ['1004', '1006', '1007'],
'6007': ['1005', '1006', '1008'],
'6008': ['1007', '1008', '1009'],
}
# 建立关系图谱
def build_graph():
graph = {}
for key in BOM:
if key not in graph:
graph[key] = []
for value in BOM[key]:
if value not in graph:
graph[value] = []
graph[key].append(value)
return graph
# 根据关系图谱生成向量
def vectorize(graph):
vector = []
for key in sorted(graph.keys()):
if key.startswith('6'):
vector.append(len(graph[key]))
return np.array(vector)
# 计算余弦相似度
def cosine_similarity(a, b):
return np.dot(a, b) / (np.sqrt(np.dot(a, a)) * np.sqrt(np.dot(b, b)))
# 计算相似度矩阵
def similarity_matrix():
graph = build_graph()
matrix = np.zeros((len(graph), len(graph)))
for i, key1 in enumerate(sorted(graph.keys())):
if key1.startswith('6'):
vector1 = vectorize(graph[key1])
for j, key2 in enumerate(sorted(graph.keys())):
if key2.startswith('6'):
vector2 = vectorize(graph[key2])
similarity = cosine_similarity(vector1, vector2)
matrix[i][j] = similarity
return matrix
# 测试代码
if __name__ == '__main__':
matrix = similarity_matrix()
print(matrix)
```
运行上面的代码,将会输出一个相似度矩阵,其中每个元素表示两个产品之间的相似度。可以根据相似度矩阵来选择相似度较高的产品组合,以减少换产时间。
相关推荐
![xlsm](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)