Junjie
2024-12-10 3de198e2ed8114f9ff17d3d0d89a108d9f0cc815
#path similarity
1个文件已修改
1个文件已添加
59 ■■■■■ 已修改文件
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/similarity.py 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
@@ -302,7 +302,17 @@
    public Double similarityPath(List<NavigateNode> firstPath, List<NavigateNode> secondPath) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(firstPath), JSON.toJSONString(secondPath));
            List<int[]> first = new ArrayList<>();
            for (NavigateNode node : firstPath) {
                first.add(new int[]{node.getX(), node.getY()});
            }
            List<int[]> second = new ArrayList<>();
            for (NavigateNode node : secondPath) {
                second.add(new int[]{node.getX(), node.getY()});
            }
            ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second));
            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();
zy-asrs-wcs/src/main/resources/similarity.py
New file
@@ -0,0 +1,47 @@
import json
import sys
def calculate_similarity(path1, path2):
    # 将路径转换为集合
    set1 = set(path1)
    set2 = set(path2)
    # 计算重叠节点
    overlap = len(set1.intersection(set2))
    # 计算总节点
    total_nodes = len(set1.union(set2))
    # 计算相似度
    similarity = overlap / total_nodes if total_nodes > 0 else 0
    return similarity
path_a_str = sys.argv[1]
path_b_str = sys.argv[2]
path_a = json.loads(path_a_str)
path_a = [(int(x[0]), int(x[1])) for x in path_a]
path_b = json.loads(path_b_str)
path_b = [(int(x[0]), int(x[1])) for x in path_b]
# # 示例路径
# path_a = [(1, 1), (1, 2), (1, 3), (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4), (9, 4), (10, 4), (10, 5), (10, 6), (11, 6)]
# path_b = [(1, 1), (1, 2), (1, 3), (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4), (9, 4), (10, 4), (10, 5), (10, 6), (11, 6)]
# 计算相似度
similarity_score = calculate_similarity(path_a, path_b)
calcResult = 200
result = {
    "firstPath": json.dumps(path_a),
    "secondPath": json.dumps(path_b),
    "similarity": similarity_score,
    "calcResult": calcResult
}
print(result)