在BehaviorSpace中,我希望通过更改两个变量来运行一个模型100次,如下所示:
["x-area" 1 ] and ["y-area" [1 1 100]]. 建立了如下模型:
通过使用这两个变量,我希望我的100个模型运行如下:
;;; Model 1 ;;
"x-area" = 1
"y-area" = 1
clear-all
create landscape
add-turtles
go-simulation
;;; Model 2 ;;
"x-area" = 1
"y-area" = 2
add-turtles
go-simulation
;;; Model 3 ;;
"x-area" = 1
"y-area" = 3
add-turtles
go-simulation
....
;;; Model 100 ;;
"x-area" = 1
"y-area" = 100
add-turtles
go-simulation为了做到这一点,我做了100个实验,这个方法奏效了。有没有一种更快的方法来自动运行100种型号而不做100种实验?我试着做了一个这样的实验

但我有一条错误信息:
预期输入为海龟代理集或补丁代理集,或海龟或补丁,但没有得到任何人。
org.nlogo.nvm.ArgumentTypeException: OF expected input to be a turtle agentset or patch agentset or turtle or patch but got NOBODY instead.
at org.nlogo.prim._asm_proceduremovewithinpolygon_ifelse_86.perform(:4)
at org.nlogo.nvm.Context.runExclusive(Context.java:119)
at org.nlogo.nvm.ExclusiveJob.run(ExclusiveJob.java:57)
at org.nlogo.nvm.Context.runExclusiveJob(Context.java:162)
at org.nlogo.prim._asm_procedurestartsimulation_ask_69.perform(:1)
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$job$JobThread$$runPrimaryJobs(JobThread.scala:143)
at org.nlogo.job.JobThread$$anonfun$run$1.apply$mcV$sp(JobThread.scala:78)
at org.nlogo.job.JobThread$$anonfun$run$1.apply(JobThread.scala:76)
at org.nlogo.job.JobThread$$anonfun$run$1.apply(JobThread.scala:76)
at 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)问题是,我的模型继续运行这个错误。因此,很难看出问题在哪里。鉴于以下信息:
"at org.nlogo.prim._asm_proceduremovewithinpolygon_ifelse_86.perform(:4)" in the error message, 也许问题就在“多边形内移动”的过程中。
下面是我对给定颜色的多边形的“移动内多边形”的步骤:
if [pcolor] of patch-here = green [
set list-angles-in-green item 0 table-angles
loop [
let angle-in-green one-of list-angles-in-green
ifelse [pxcor] of (patch-right-and-ahead angle-in-green 1) = max-pxcor or [pycor] of (patch-right-and-ahead angle-in-green 1) = max-pycor [
print "die"
die
stop ]
[ ifelse (patch-right-and-ahead angle-in-green 1) != nobody and [pcolor] of (patch-right-and-ahead angle-in-green 1) = green [
print "move"
move-to patch-right-and-ahead angle-in-green 1
[ if not any? neighbors with [pcolor = green] [
print "no neighbors"
move-to patch-here
stop ] ] ] ] ]谢谢你的帮助。
发布于 2014-10-18 17:13:38
如果海龟最终到达了世界的边缘,那么patch-right-and-ahead angle-in-green 1可能会指向世界以外的地方(取决于angle-in-green是什么),因此[pxcor] of (patch-right-and-ahead angle-in-green 1) = max-pxcor中的[pxcor] of会请求nobody的坐标。同样的事情也可能发生在pycor后面的同一行中。
问:海龟能在你的模型中到达世界的边缘吗?在我看来,你显示的代码可能会导致这个结果。
如果是这样的话,那么防止错误的一个方法就是替换
[pxcor] of (patch-right-and-ahead angle-in-green 1) = max-pxcor 使用
xcor = max-pxcor当一只海龟到达最后一列补丁时,情况就是如此。如果您也希望海龟在接近边缘时死亡,您可以在if-else中使用这两个表达式
(xcor = max-pxcor) or ([pxcor] of (patch-right-and-ahead angle-in-green 1) = max-pxcor)(为了清楚起见,我添加了括号。)
不过,我不知道这会否达到同样的目的:
xcor = max-pxcor or xcor = max-pxcor - 1如果这些方法中的任何一个适合您的应用程序,那么您显然可以对y坐标执行相同的操作。
发布于 2014-10-13 11:48:04
在我看来,您的实验设置是正确的,只是您应该删除TRUE的“停止条件”,因为如果停止条件始终为真,则即使运行一次也不会运行go命令。
您所得到的错误来自您尚未向我们展示的代码,因此我无法帮助您。您需要向我们展示错误发生的代码。
而且,当错误发生时,x-area和y-area的值是多少?如果将x-area和y-area设置为BehaviorSpace之外的相同值,是否会发生相同的错误?如果是这样的话,那么这个错误实际上与BehaviorSpace没有任何关系。
最后,关于术语的说明:这里只有一个模型,没有100个,这里只有一个实验,没有100个。你试图在你的模型上运行一个实验,这个实验包括100次模型运行。使用标准术语将有助于您清楚地沟通您的问题。
https://stackoverflow.com/questions/26331857
复制相似问题