python - 运行 Mesa 示例模型时,我收到“NotImplementedError”
问题描述
我尝试从 [mesa][1] 实施教程。这是我从那里复制的代码,分别分成两个文件,money_model.py 和 server.py:
from mesa import Agent, Model
from mesa.time import RandomActivation
from mesa.space import MultiGrid
from mesa.visualization.modules import CanvasGrid
from mesa.visualization.ModularVisualization import ModularServer
class MoneyAgent(Agent):
""" An agent with fixed initial wealth."""
def __init__(self, unique_id, model):
super().__init__(unique_id, model)
self.wealth = 1
def move(self):
possible_steps = self.model.grid.get_neighborhood(
self.pos,
moore=True,
include_center=False)
new_position = self.random.choice(possible_steps)
self.model.grid.move_agent(self, new_position)
def give_money(self):
cellmates = self.model.grid.get_cell_list_contents([self.pos])
if len(cellmates) > 1:
other_agent = self.random.choice(cellmates)
other_agent.wealth += 1
self.wealth -= 1
def step(self):
self.move()
if self.wealth > 0:
self.give_money()
class MoneyModel(Model):
"""A model with some number of agents."""
def __init__(self, N, width, height):
self.num_agents = N
self.grid = MultiGrid(width, height, True)
self.schedule = RandomActivation(self)
# Create agents
for i in range(self.num_agents):
a = MoneyAgent(i, self)
self.schedule.add(a)
# Add the agent to a random grid cell
x = self.random.randrange(self.grid.width)
y = self.random.randrange(self.grid.height)
self.grid.place_agent(a, (x, y))
def step(self):
self.schedule.step()
和
from money_model import *
from mesa.visualization.modules import CanvasGrid
from mesa.visualization.ModularVisualization import ModularServer
def agent_portrayal(agent):
portrayal = {"Shape": "circle",
"Filled": "true",
"Layer": 0,
"Color": "red",
"r": 0.5}
return portrayal
grid = CanvasGrid(agent_portrayal, 10, 10, 500, 500)
server = ModularServer(MoneyModel,
[grid],
"Money Model",
{"N":100, "width":10, "height":10})
server.port = 8521 # The default
server.launch()
当我运行该示例时,它给了我以下错误:
Interface starting at http://127.0.0.1:8521
Traceback (most recent call last):
File "c:/Users/fisch/Desktop/mesa example/server.py", line 20, in <module>
server.launch()
File "C:\Program Files\villos\lib\site-packages\mesa\visualization\ModularVisualization.py", line 333, in launch
self.listen(self.port)
File "C:\Program Files\villos\lib\site-packages\tornado\web.py", line 2116, in listen
server.listen(port, address)
File "C:\Program Files\villos\lib\site-packages\tornado\tcpserver.py", line 152, in listen
self.add_sockets(sockets)
File "C:\Program Files\villos\lib\site-packages\tornado\tcpserver.py", line 165, in add_sockets
self._handlers[sock.fileno()] = add_accept_handler(
File "C:\Program Files\villos\lib\site-packages\tornado\netutil.py", line 279, in add_accept_handler
io_loop.add_handler(sock, accept_handler, IOLoop.READ)
File "C:\Program Files\villos\lib\site-packages\tornado\platform\asyncio.py", line 100, in add_handler
self.asyncio_loop.add_reader(fd, self._handle_events, fd, IOLoop.READ)
File "C:\Program Files\villos\lib\asyncio\events.py", line 501, in add_reader
raise NotImplementedError
NotImplementedError
当我在包含 run.py 文件的项目目录中运行当前正在使用“mesa runserver”处理的项目时,也会发生这种情况。我检查了环境变量,并且存在包含 mesa 的路径。有谁知道问题可能出在哪里?谢谢![1]:https ://mesa.readthedocs.io/en/master/tutorials/adv_tutorial.html
解决方案
我得到了“NotImplementedError”,因为我有一个过时的 mesa 版本。
pip install mesa --upgrade
解决了这个问题。
推荐阅读
- php - PHP nodeValue被归类为非对象
- r - R: 如何使用 get() 或 mget() 获取列表中的对象?
- python - 有没有更好的方法来操作熊猫数据框中的列名?
- python - setup.py install_requires 内置包:包含还是省略?
- php - 如何为 User.php 扩展多个东西
- amazon-web-services - ElasticSearch CloudFormation - 属性 VpcId 不能为空
- php - 显式路由怎么找不到Controller
- stm32 - 在 DMA 模式下无法从 UART 接收数据
- angular - mat-autocomplete:防止显示旧列表
- python - 如何更改数组的类型?