Netlogo 在 Python 绘图后暂停,需要关闭绘图才能继续

Netlogo pauses after plotting in Python, need to close plot to continue

我的代码在 python 绘图后暂停,直到我关闭绘图才会继续。

我正在使用 matplotlib 绘图。

to plot-in-python
  (py:run   
      "import matplotlib.pyplot as plt"
      "time = [0, 1, 2, 3]"
      "position = [0, 100, 200, 300]"
    
      "plt.plot(time, position)"
      "plt.xlabel('Time (hr)')"
      "plt.ylabel('Position (km)')"
      "plt.show()" 
  )
end

Q :
" My code pauses after plotting in python, and won't continue until I close the plot. "

一个:
结果是自然产物,因为 matplotlib 进入 .show() 方法,该方法阻塞(直到关闭)并且整个 Python 解释器生态系统停止,直到发生这种情况。如果不使用这种“交互式”-(Python-blocking) 模式中的绘图,而是将最终生成的 graph-scene 存储到 PDF 或其他格式的文件中,稍后可以使用 non-blocking 查看器进行检查,整个 ( py:run ... )-scope 将按预期终止,没有“挂起”-Python 阻塞并且 NetLogo-world 可以继续其 evolution-flow 进一步。

Q :
" I was hoping to have the figure remain up and update with each loop of Netlogo (this is because the figures in Netlogo are not great). I understand that .ion() is supposed to create interactive plots (i.e., updatable plots), but for whatever reason it does not work for me... Am I foolish to try and use Python in this way with Netlogo? – belief-desire-intent 2 hours ago "

一个:
好吧,我不会认为让 live-graphs 有一刻是愚蠢的。关键是,如何实现这一点。

在 70 年代后期,帕洛阿尔托研究中心(及其 spin-offs 之类的 PARCplace 系统)内部形成的“正偏差岛”涌现出许多奇妙的发明。我们非常感谢这些聪明的人,他们当时受雇为施乐研究机构工作。模块化交互式 GUI 的概念、word-processing 软件、Smalltalk 语言、计算机鼠标和许多其他发明都诞生于此。

GUI 概念,具有 many-actors,其中一些是 machine-driven,其中一些反映了 man-machine 交互,-就像您希望让 NetLogo 生成 live-graphs,生活在 Python-matplotlib 外系统中的东西确实很难编程,直到 PARCplace 的人们将主要职责分离的有条不紊的概念引入 MVC-system :
where
M代表MODEL:保持state-full代表Problem-under-Review,
V的部分代表 VISUAL:生成 PuR-state 视觉表示的部分,
C 代表 CONTROLLER:收集 Man-Machine-Interactions 的部分和所有其他“传感器”,PuR-state(模型)持续更新(好吧,以某种离散的 time-ordered 事件收集和 reflective-processing 方式)更新。

这必须先说,以便现在能够声称,您的愿望正在导致 MVC-model 的所谓“分布式”形式,其中 NetLogo 正在做 M-模型部分,驱动PuR-state的multi-agent进化,并命令“远程”-GUI-V- isual 部分并且必须从再次“远程”-GUI-C-ontroller.

接收输入(如果有的话)

这可能听起来很糟糕,但还算不上丑陋,如果我们尝试以一些不那么统一和 time-proven 的方式来实现相同的需求,那么与一团糟相比。

鉴于 NetLogo 的强大功能,我们可以使用 ( py:run ... )-scope(s) 为这种“分布式”-GUI-MVC 系统实际提供所有需要的 glue-logic。

我们可以
(a) 使用(最好只有一个)non-blocking ( py:run ... )-scope 注入 NetLogo M-模型更新,
(b) 在我们的本地主机上或什至在某些远程网络主机上保留一个(或多个,如果需要)Python 解释器作为 V-isual 处理程序,显示图形,并且
(c) 在我们的本地主机或远程网络主机上保留一个(或多个,如果需要)Python 解释器( s) 作为 C-控制器,反馈另一个 NetLogo non-blocking ( py:run ... )-范围,接收“远程”-输入(如果需要)在 NetLogo M-模型更新循环中使用它们。

无论这听起来多么复杂,它都会起作用,使用任何可用的 localhost 位于 Python 口译员 single-session 或 multi-Python 口译员会议,无论是他们所有 localhost 并置,甚至 network-distributed,使用 tools that we can just plug-in, be it , 提供新型智能 transport-services 以允许其他自治节点设置“macro-scale”distributed-MVC 并顺利沟通所有需要的更改,组成消息。

如果更专业一点,还有其他 NetLogo 本机工具可以更好更流畅(不太容易出现断断续续 stick-slick-stick-slick control-loop )如何实现“远程”/“分布式”co-integrated GUI-s。只是提到一个 built-in HubNet 模型,一个轻量级 Java / Scala-extension 可以更好和更顺畅地服务于 M-模型到 V- isual (semi-persistent)-links ( 没有 ( py:run ... )-scope(s)' 依赖和限制的弱点 Python 解释器(本地|远程)-process & IPC management ( control-loop 如果 MVC-loop 从而失去其循环的更多“紧密度”)

,则延迟 + 抖动可能会令人烦恼并产生影响
  • remote-process 更新 GUI tip
  • co-integrated 界面 tip
  • 远程 GUI .mainloop() 控制器 tip
  • 控制回路的“紧密度”tip