JesseM1024(留言 | 贡献) 无编辑摘要 |
JesseM1024(留言 | 贡献) 无编辑摘要 |
||
第9行: | 第9行: | ||
=== 函数定义 === | === 函数定义 === | ||
<pre>def bfs_depth(grid, ini_pos): | bfs_depth()是AI帮我写的BFS轮子,有问题别找我<pre>def bfs_depth(grid, ini_pos): | ||
''' | ''' | ||
grid: 2d np array, only 0, 1 | grid: 2d np array, only 0, 1 |
2024年7月31日 (三) 10:30的版本
代码备份如下
机械动力动力合成器矩阵周期最小化.ipynb
调包
import numpy as np import matplotlib.pyplot as plt from collections import deque
函数定义
bfs_depth()是AI帮我写的BFS轮子,有问题别找我
def bfs_depth(grid, ini_pos): ''' grid: 2d np array, only 0, 1 ini_pos: 2-len python int list, position vec [a,b] returns the depth 2d array ''' if not grid.size: return np.array([], dtype=int).reshape(0, 0) # 初始化访问数组并全部填充为-1 visited = np.full_like(grid, -1, dtype=int) temp = ini_pos.copy() temp.append(0) # 起始点 queue = deque([tuple(temp)]) # (row, col, depth) # 定义四个方向的移动 directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] while queue: row, col, depth = queue.popleft() # 如果当前点不是障碍物(假设0表示障碍物),则更新访问数组 if grid[row, col] != 0: visited[row, col] = depth # 检查相邻的点 for dx, dy in directions: new_row, new_col = row + dx, col + dy # 如果相邻点在网格内且未被访问 if 0 <= new_row < grid.shape[0] and 0 <= new_col < grid.shape[1] and visited[new_row, new_col] == -1: queue.append((new_row, new_col, depth + 1)) return visited def edge_detector(grid): row, col = grid.shape[0], grid.shape[1] ava_out_pos_list = [] directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] for i in range(row): for j in range(col): if grid[i,j]==1: if i==0 or i==row-1 or j==0 or j==col-1: ava_out_pos_list.append([i,j]) else: exist_0 = False for dx, dy in directions: new_row, new_col = i + dx, j + dy if grid[new_row, new_col] == 0: exist_0 = True break if exist_0 : ava_out_pos_list.append([i,j]) return ava_out_pos_list
参数定义
crafter_array = np.array([[0,0,0,0,1,0,0,0,0], [0,0,0,1,1,1,0,0,0], [1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1], [0,1,1,1,1,1,1,1,0], [0,0,1,1,1,1,1,0,0], [0,1,1,1,1,1,1,1,0], [1,1,1,1,0,1,1,1,1], [1,1,1,0,0,0,1,1,1] ])
运行1:最优结果绘制
ava_start = edge_detector(crafter_array) cur_minimum_steps = np.inf result = None start = None edge_result = np.ones((crafter_array.shape[0],crafter_array.shape[1])) edge_result = edge_result*-1 for start_pos in ava_start: arr = bfs_depth(crafter_array,start_pos) temp_step = np.max(arr) edge_result[start_pos[0],start_pos[1]] = temp_step if temp_step < cur_minimum_steps: cur_minimum_steps = temp_step result = arr start = start_pos print('minimum steps =',cur_minimum_steps,'and start at ',start) print(result) plt.figure() plt.imshow(result, cmap='viridis', aspect='auto') plt.colorbar() plt.title('crafter depth matrix') plt.xlabel('X') plt.ylabel('Y') plt.show()
运行2:边缘结果绘制
print(edge_result) plt.figure() plt.imshow(edge_result, cmap='viridis', aspect='auto') plt.colorbar() plt.title('all output step matrix') plt.xlabel('X') plt.ylabel('Y') plt.show()
CCT获取电脑后方贴着的方块的可用方法.lua
--index-- local target_block = "back" local testing_method = 1 local text_scale = 0.5 local has_args = false local arg = 4 --index end-- curx = 1 cury = 1 --monitor ini local monitor = peripheral.find("monitor") monitor.setCursorPos(curx, cury) monitor.clear() monitor.setTextScale(text_scale) local method_table = peripheral.getMethods(target_block) if method_table ~= nil then while(true) do curx = 1 cury = 1 monitor.setCursorPos(curx, cury) --method test, add arg if needed for i = 1, #method_table do --iterate through method table and write it on screen if i == testing_method then --setting highlight color monitor.setTextColor(colors.lightBlue) else monitor.setTextColor(colors.white) end monitor.write(i..": "..method_table[i]) cury = cury+1 monitor.setCursorPos(curx, cury) end --start testing method if has_args then local test_result = peripheral.call(target_block,method_table[testing_method],arg) monitor.write("method "..testing_method.." w/ arg= "..arg.." has value:") else local test_result = peripheral.call(target_block,method_table[testing_method]) monitor.write("method "..testing_method.." has value:") end --start a new line and write the result cury = cury+1 monitor.setCursorPos(curx, cury) monitor.write(tostring(test_result)) sleep(1) --refresh every second end end