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变量重名:
- 修正导入语句为大写的
Grid,可使用别名避免冲突:
from mesa.space import Grid as MesaGrid
- 在模型中使用
MesaGrid来创建网格空间,而非手动构建二维列表(这是Mesa的标准用法,能利用框架内置的空间管理功能)。
内容的提问来源于stack exchange,提问作者Parakeet
相关产品推荐
相关产品推荐

