You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NumPy数组双智能体邻域查找与网格扩展填充问题求解

解决方案:智能体邻域扩展的精准实现

针对你的需求,核心是只聚焦当前已标记为1/2的单元格,筛选出它们未被占用的水平/垂直邻域,再实现每轮随机扩展的逻辑,以下是具体实现:

一、精准获取单个智能体的可用邻域

不用返回所有单元格的邻域,先定位智能体已占领的所有单元格,再逐个检查上下左右四个方向,过滤掉越界和已被标记的单元格,只保留可填充的空白邻域:

import numpy as np

def get_available_neighbors(cell_map, agent_id):
    # 拿到当前智能体所有已标记的单元格坐标
    agent_positions = np.argwhere(cell_map == agent_id)
    neighbors = []
    # 水平/垂直四个方向
    directions = [(-1,0), (1,0), (0,-1), (0,1)]
    
    for (x, y) in agent_positions:
        for dx, dy in directions:
            nx, ny = x + dx, y + dy
            # 检查是否在数组边界内,且单元格未被标记(值为0)
            if 0 <= nx < cell_map.shape[0] and 0 <= ny < cell_map.shape[1]:
                if cell_map[nx, ny] == 0 and (nx, ny) not in neighbors:
                    neighbors.append((nx, ny))
    return neighbors

二、实现每轮的随机扩展逻辑

每轮中,智能体先获取自己的可用邻域,随机选一个填充,更新数组后,新标记的单元格会自动成为下一轮的扩展起点:

import random

def expand_agent(cell_map, agent_id):
    available = get_available_neighbors(cell_map, agent_id)
    if not available:
        print(f"FIGHTER_{agent_id} 没有可扩展的空间了")
        return cell_map
    # 随机挑一个邻域填充
    nx, ny = random.choice(available)
    cell_map[nx, ny] = agent_id
    return cell_map

# 初始化11×7的数组
cellMAP_0 = np.zeros((11, 7), dtype=int)
# 生成两个不重复的随机起始点
start1 = (random.randint(0, 10), random.randint(0, 6))
start2 = start1
while start2 == start1:
    start2 = (random.randint(0, 10), random.randint(0, 6))
cellMAP_0[start1] = 1
cellMAP_0[start2] = 2

# 模拟多轮扩展(这里示例5轮)
for round_idx in range(5):
    print(f"--- 第 {round_idx+1} 轮 ---")
    cellMAP_0 = expand_agent(cellMAP_0, 1)
    cellMAP_0 = expand_agent(cellMAP_0, 2)
    print(cellMAP_0)

核心细节说明

  • 邻域去重:同一个空白单元格可能被多个已标记单元格的邻域覆盖,加入去重逻辑避免重复处理
  • 边界校验:确保邻域坐标不会超出11行(0-10)、7列(0-6)的范围
  • 动态扩展:每轮填充后,数组标记更新,下一轮的邻域查找会自动包含新标记的单元格,实现持续扩展

内容的提问来源于stack exchange,提问作者m k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:06:27