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

Mesa程序导入Grid失败求助:重装及大小写调整后仍报错

解决Mesa中Grid导入失败的问题

问题背景

运行Mesa程序时遭遇Grid导入失败,已尝试卸载重装Mesa包、修改导入语句中Grid的大小写,问题仍未解决。

代码片段

import mesa
import matplotlib.pyplot as plt
from mesa.space import grid

class MoneyAgent(mesa.Agent):
    # 省略类内部代码
    ...
    
        # Create a grid of agents based on wealth
        grid_width = int(round(self.num_agents**0.5))
        grid_height = int(round(self.num_agents**0.5))
        grid = [[[] for j in range(grid_width)] for i in range(grid_height)]
        for i, a in enumerate(self.schedule.agents):
            x = i % grid_width
            y = i // grid_width
            grid[y][x] = a

        # Display the grid
        fig, ax = plt.subplots(figsize=(10, 10))
        ax.set_xticks([])
        ax.set_yticks([])
        for i in range(grid_height):
            for j in range(grid_width):
                if grid[i][j]:
                    size = grid[i][j].wealth * 5
                    color = 'green' if grid[i][j].wealth >= 1 else 'red'
                    ax.add_artist(plt.Circle((j + 0.5, grid_height - i - 0.5), size, color=color))
                    ax.text(j + 0.5, grid_height - i - 0.5, str(grid[i][j].wealth), ha='center', va='center')
        plt.show()

错误信息

(base) D:\>python
Python 3.9.13 (main, Aug 25 2022, 23:51:50) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from money_model_cht import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\money_model_cht.py", line 3, in <module>
    from mesa.space import grid
ImportError: cannot import name 'grid' from 'mesa.space' (C:****\anaconda3\lib\site-packages\mesa\space.py)

解决方案

方案1:移除多余的导入语句

观察代码可知,你并未使用Mesa提供的Grid类,而是手动创建了一个名为grid的二维列表用于显示。直接删除第3行的导入语句即可解决错误:

# 删掉这一行
# from mesa.space import grid

方案2:正确导入Mesa的Grid类(若需使用)

如果你的模型实际需要用到Mesa内置的Grid空间类,需修正导入语句的大小写,同时避免与自定义的grid变量重名:

  1. 修正导入语句为大写的Grid,可使用别名避免冲突:
from mesa.space import Grid as MesaGrid
  1. 在模型中使用MesaGrid来创建网格空间,而非手动构建二维列表(这是Mesa的标准用法,能利用框架内置的空间管理功能)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:04:59