From 2bdbfd1ac24d4e9a87daf6fb8b99ec32264d5752 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期六, 21 十二月 2024 11:25:27 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/resources/agv1.py |  203 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 203 insertions(+), 0 deletions(-)

diff --git a/zy-acs-manager/src/main/resources/agv1.py b/zy-acs-manager/src/main/resources/agv1.py
new file mode 100644
index 0000000..245bb6e
--- /dev/null
+++ b/zy-acs-manager/src/main/resources/agv1.py
@@ -0,0 +1,203 @@
+import ast
+import sys
+import numpy as np
+import json
+import time
+import redis
+from collections import deque
+
+radiusLen = None
+
+# 灏嗗瓧绗︿覆杞崲涓烘诞鐐瑰瀷鏁扮粍
+def convert_to_float_array(str_array):
+    if isinstance(str_array, str):
+        return np.array(ast.literal_eval(str_array), dtype=float)
+    return str_array
+
+def getWaveScopeByCode_iterative(x, y):
+    """
+    浣跨敤骞垮害浼樺厛鎼滅储锛圔FS锛夋潵浠f浛閫掑綊锛屼互閬垮厤閫掑綊娣卞害杩囧ぇ鐨勯棶棰樸��
+    """
+    includeList = []
+    existNodes = set()
+    queue = deque()
+
+    originNode = {"x": x, "y": y}
+    currNode = {"x": x, "y": y}
+    queue.append(currNode)
+    existNodes.add((x, y))
+
+    while queue:
+        node = queue.popleft()
+        node_x, node_y = node['x'], node['y']
+        neighbors = [
+            (node_x + 1, node_y),
+            (node_x - 1, node_y),
+            (node_x, node_y + 1),
+            (node_x, node_y - 1)
+        ]
+
+        for neighbor in neighbors:
+            nx, ny = neighbor
+            # 妫�鏌ヨ竟鐣屾潯浠�
+            if (nx < 0 or nx >= codeMatrix.shape[0] or ny < 0 or ny >= codeMatrix.shape[1]):
+                continue
+            if (nx, ny) in existNodes:
+                continue
+
+            existNodes.add((nx, ny))
+            neighbor_code = codeMatrix[nx, ny]
+
+            if neighbor_code == 'NONE':
+                queue.append({"x": nx, "y": ny})
+            else:
+                o1Cda = convert_to_float_array(cdaMatrix[x, y])
+                o2Cda = convert_to_float_array(cdaMatrix[nx, ny])
+
+                num1 = (o1Cda[0] - o2Cda[0]) ** 2
+                num2 = (o1Cda[1] - o2Cda[1]) ** 2
+                if num1 + num2 <= radiusLen ** 2:
+                    includeList.append({
+                        "x": int(nx),
+                        "y": int(ny),
+                        "code": str(codeMatrix[nx, ny])
+                    })
+                    queue.append({"x": nx, "y": ny})
+
+    return includeList
+
+def find_value_in_matrix(value):
+    indices = np.where(codeMatrix == value)
+    return list(zip(indices[0], indices[1]))
+
+def initWaveMatrix():
+    waveMatrix = np.empty_like(codeMatrix, dtype=object)
+
+    for x in range(codeMatrix.shape[0]):
+        for y in range(codeMatrix.shape[1]):
+            if codeMatrix[x][y] == 'NONE':
+                waveMatrix[x][y] = "-"
+            else:
+                waveMatrix[x][y] = '[]'
+
+    return waveMatrix
+
+# 浼樺寲鐗堟湰锛氫娇鐢ㄩ泦鍚堟潵鎻愰珮鎬ц兘
+def mergeWave(originWave, vehicle):
+    # 灏嗗瓧绗︿覆瑙f瀽涓洪泦鍚�
+    try:
+        set_data = set(ast.literal_eval(originWave))
+    except (ValueError, SyntaxError):
+        set_data = set()
+    # 濡傛灉 vehicle 涓嶅湪闆嗗悎涓紝鍒欐坊鍔�
+    set_data.add(vehicle)
+    # 杩斿洖搴忓垪鍖栧悗鐨勫瓧绗︿覆
+    return json.dumps(list(set_data))
+
+# 灏� dynamicMatrix 杞崲涓� numpy 缁撴瀯鍖栨暟缁�
+def convert_to_structured_array(dynamicMatrix):
+    # 瀹氫箟缁撴瀯鍖栨暟缁勭殑 dtype
+    dtype = [('serial', int), ('vehicle', 'U2'), ('time', int)]
+
+    # 纭繚姣忎釜瀛楀吀鍖呭惈鎵�鏈夊瓧娈�
+    structured_list = []
+    for row in dynamicMatrix:
+       for d in row:
+           # 鎻愬彇瀛楁锛岀‘淇� 'time' 瀛樺湪锛屽惁鍒欒缃负榛樿鍊硷紙渚嬪 0.0锛�
+           serial = d.get('serial', 0)
+           vehicle = d.get('vehicle', '0')
+           time_val = d.get('time', 0)
+           structured_list.append((serial, vehicle, time_val))
+
+    # 灏嗗祵濂楃殑鍒楄〃杞崲涓虹粨鏋勫寲鏁扮粍
+    structured_array = np.array(structured_list, dtype=dtype)
+    # 閲嶅涓哄師濮嬬殑浜岀淮褰㈢姸
+    return structured_array.reshape(len(dynamicMatrix), -1)
+
+# 浣跨敤 numpy 鍔犻�熺殑浠g爜
+def process_dynamic_matrix(dynamicMatrix, codeMatrix):
+    global waveMatrix  # 纭繚 waveMatrix 鏄叏灞�鍙橀噺
+
+    # 灏� dynamicMatrix 杞崲涓虹粨鏋勫寲鏁扮粍
+    dynamicMatrix = convert_to_structured_array(dynamicMatrix)
+
+    # 鑾峰彇 dynamicMatrix 鐨勫舰鐘�
+    rows, cols = dynamicMatrix.shape
+
+    # 鍒涘缓涓�涓竷灏旀帺鐮侊紝鐢ㄤ簬绛涢�夊嚭 vehicle 涓嶄负 '0' 鍜� '-1' 鐨勫厓绱�
+    mask = (dynamicMatrix['vehicle'] != '0') & (dynamicMatrix['vehicle'] != '-1')
+
+    # 鑾峰彇婊¤冻鏉′欢鐨� x 鍜� y 鍧愭爣
+    x_indices, y_indices = np.where(mask)
+
+    # 閬嶅巻婊¤冻鏉′欢鐨勫潗鏍�
+    for x, y in zip(x_indices, y_indices):
+        vehicle = dynamicMatrix[x][y]['vehicle']
+        includeList = getWaveScopeByCode_iterative(x, y)
+        for include in includeList:
+            originWave = waveMatrix[include['x']][include['y']]
+            waveMatrix[include['x']][include['y']] = mergeWave(originWave, vehicle)
+
+def main():
+    global radiusLen, codeMatrix, cdaMatrix, waveMatrix  # 澹版槑涓哄叏灞�鍙橀噺
+
+    if len(sys.argv) != 6:
+        print("Usage: python script.py <radiusLen> <redisHost> <redisPwd> <redisPort> <redisIdx>")
+        sys.exit(1)
+
+    radiusLenStr = sys.argv[1]
+    radiusLen = float(radiusLenStr)
+
+    redisHost = sys.argv[2]
+    redisPwd = sys.argv[3]
+    redisPort = sys.argv[4]
+    redisIdx = sys.argv[5]
+
+    startTime = time.perf_counter()
+
+    # 鍒涘缓涓�涓繛鎺ユ睜
+    pool = redis.ConnectionPool(host=redisHost, port=int(redisPort), password=redisPwd, db=int(redisIdx))
+    r = redis.Redis(connection_pool=pool)
+
+    # 鑾峰彇骞跺姞杞� codeMatrix
+    codeMatrixStr = r.get('KV.AGV_MAP_ASTAR_CODE_FLAG.1')
+    if codeMatrixStr is None:
+        print("Error: 'KV.AGV_MAP_ASTAR_CODE_FLAG.1' not found in Redis.")
+        sys.exit(1)
+    codeMatrix = np.array(json.loads(codeMatrixStr))
+
+    # 鑾峰彇骞跺姞杞� cdaMatrix
+    cdaMatrixStr = r.get('KV.AGV_MAP_ASTAR_CDA_FLAG.1')
+    if cdaMatrixStr is None:
+        print("Error: 'KV.AGV_MAP_ASTAR_CDA_FLAG.1' not found in Redis.")
+        sys.exit(1)
+    cdaMatrix = np.array(json.loads(cdaMatrixStr))
+
+    # 鑾峰彇骞跺姞杞� dynamicMatrix
+    dynamicMatrixStr = r.get('KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1')
+    if dynamicMatrixStr is None:
+        print("Error: 'KV.AGV_MAP_ASTAR_DYNAMIC_FLAG.1' not found in Redis.")
+        sys.exit(1)
+    dynamicMatrix = np.array(json.loads(dynamicMatrixStr))
+
+    # 鍒濆鍖� waveMatrix
+    waveMatrix = initWaveMatrix()
+
+    # 澶勭悊 dynamicMatrix
+    process_dynamic_matrix(dynamicMatrix, codeMatrix)
+
+    # 灏� numpy.ndarray 杞崲涓哄祵濂楀垪琛�
+    waveMatrixList = waveMatrix.tolist()
+    # 灏嗗祵濂楀垪琛ㄨ浆鎹负 JSON 瀛楃涓�
+    waveMatrixJsonStr = json.dumps(waveMatrixList)
+
+    # 灏嗙粨鏋滀繚瀛樺洖 Redis
+    r.set("KV.AGV_MAP_ASTAR_WAVE_FLAG.1", waveMatrixJsonStr)
+
+    end = time.perf_counter()
+    # 鎵撳嵃绋嬪簭杩愯鏃堕棿
+#     print(f"绋嬪簭杩愯鏃堕棿涓�: {end - startTime} Seconds")
+    print("1")
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file

--
Gitblit v1.9.1