如何调试NetLogo BehaviorSpace / R-extension错误?

时间:2016-03-02 13:10:47

标签: java netlogo

我有一个交互式工作的模型。但是,每当我尝试使用BehaviorSpace运行它时,我都会遇到各种错误。

该模型使用R扩展名。事件的一般顺序是:

  1. 设置:创建网络,为R导入文件以导入并使用R或NetLogo选择一些起始节点
  2. go:从那些起始节点运行传染过程
  3. 当我只使用一个处理器时似乎工作,所以我认为R端的并行进程之间存在某种污染(因为每个线程创建和操作具有相同名称的网络)。但是,R-extension文档明确指出它可以与BehaviorSpace一起使用,并为每个NetLogo运行创建一个单独的R环境。

    错误包括:

    • 'ReadBin中的错误...:只能从二进制连接中读取
    • 'isOpen(文件名)出错:连接无效'

    这些错误仅在几次运行中发生,并且具有各种参数组合。具有相同参数组合的其他运行没有错误。

    我是否可以访问可以打印到的BehaviorSpace的某种输出日志,以尝试找出问题?理想情况下,我想暂停实验并查看变量的内容等。

    更新:以下是典型错误的错误日志:

      

    扩展异常:R-Extension中的错误:Eval中的错误:   org.nlogo.api.ExtensionException:readBin中的错误(filename,what =   raw(0),n = tmpbufsize):只能读取二进制连接

         运行R:EVAL的观察者在程序EXPORT-NW2R调用时出现

    错误   由程序__EVALUATOR

    调用的过程SETUP调用      

    org.nlogo.nvm.EngineException:扩展异常:错误   R-Extension:Eval中的错误:org.nlogo.api.ExtensionException:错误   在readBin中(filename,what = raw(0),n = tmpbufsize):只能读取   来自二进制连接

         

    at org.nlogo.extension.r.Entry $ Eval.perform(Entry.java:560)at at   org.nlogo.prim._extern.perform(_extern.java:54)at   org.nlogo.nvm.Context.stepConcurrent(Context.java:91)at   org.nlogo.nvm.ConcurrentJob.step(ConcurrentJob.java:82)at   org.nlogo.job.JobThread.org $ nlogo $工作$ JobThread $$ runPrimaryJobs(JobThread.scala:143)   在   org.nlogo.job.JobThread $$ anonfun $运行$ 1.适用$ MCV $ SP(JobThread.scala:78)   在org.nlogo.job.JobThread $$ anonfun $ run $ 1.apply(JobThread.scala:76)   在org.nlogo.job.JobThread $$ anonfun $ run $ 1.apply(JobThread.scala:76)   在scala.util.control.Exception $ Catch.apply(Exception.scala:88)at   org.nlogo.util.Exceptions $ .handling(Exceptions.scala:41)at   org.nlogo.job.JobThread.run(JobThread.scala:75)

         

    NetLogo 5.3 main:org.nlogo.app.AppFrame线程:JobThread Java   HotSpot(TM)64位服务器VM 1.8.0_65(Oracle Corporation;   1.8.0_65-b17)操作系统:Windows 8.1 6.3(amd64处理器)Scala版本2.9.2 JOGL :( 3D视图未初始化)OpenGL图形:   (3D视图未初始化)模型:干预

         

    03:41:43.172 JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread 03:41:43.172   JobRemovedEvent(org.nlogo.app.App $$ anon $ 1   (org.nlogo.window.GUIWorkspace))JobThread

    export-nw2r过程如下所示:

    to export-nw2r
      ; create file with useful graph format
      nw:set-context people links
      let filename (word "Networks/netlogo" behaviorspace-run-number ".gml")
      export-simple-gml filename
    
      ;; reset the R-workspace
      r:clearLocal
      let dir pathdir:get-model
      r:eval "library(igraph)"
    
      ; read network in R
      set filename (word dir "/" filename)
      r:put "fn" filename
      r:eval "gg <- read_graph(file = fn, format = 'gml')"
      r:eval "V(gg)$name <- V(gg)$id"          ; gml uses 'id', but igraph uses 'name'
      r:eval "if (file.exists(fn)) file.remove(fn)"
    end
    

    基本上,它调用一个程序来创建一个非常简化的gml格式文本文件(因为igraph有一个残缺的导入程序),切换到R并清除R工作区,导入图形并计算属性。

    我已经将我的代码的当前版本作为单个处理器行为进行了大约10次没有失败的行为,并且每次都有4次失败。因此,BehaviorSpace和R-extension的交互方式似乎存在错误。在此留下这些信息,但除非有人能解释java错误,否则我真的不希望有解决方案。似乎与NetLogo BehaviorSpace crashing when using R extension

    相同的错误

0 个答案:

没有答案