我想让R和NetLogo使用r
扩展程序互相交谈.我传递图形对象而不是简单的变量.这意味着我需要从NetLogo导出文件并在R中导入文件,这意味着他们需要指向同一目录.代码运行完美.但是,一旦运行,NetLogo将失去与extensions文件夹的连接.
它似乎与在R中设置工作目录有关,因为以下MWE也会产生问题.
extensions [r]
to testSETWD
r:eval "setwd(\"C:\")"
end
Run Code Online (Sandbox Code Playgroud)
成功运行后,然后尝试对NetLogo进行任何编辑,我收到错误Can't find extension ...
.
只要我在运行R代码后不尝试编辑,NetLogo继续工作,我可以毫无问题地使用扩展.只有当我编辑代码并运行语法分析器(绿色勾选)时才会出现问题.
我做了一个错误报告,但显然不可重现.我正在运行Windows 8.1 64位.这对其他人来说是个问题吗?
我想使用多智能体范例来模拟一些场景,看起来NetLogo和Repast是最受欢迎的工具.
我想知道是否有人对任何一方有任何经验,可以告诉我更多关于它们的信息吗?例如,我注意到Repast有一个类似于通量图的建模选项,但我认为它相当有限.我查看了官方网站上的教程和文档,文档似乎缺乏.虽然有一些例子,我会说扩展它来模拟一个它没有专门准备的环境,目前看起来像一个无法达到的目标,尽管Repast显然非常强大并且显然能够处理它,给予足够的熟悉它.
另一方面,NetLogo有更多的例子,总体而言我更喜欢它的简单性,但它似乎更侧重于疾病或类似模型的模拟传播.我找到了一本教授Logo的编程书,所以我觉得开始使用它也比较容易.
目前,我正在考虑将僵尸网络和IDS模拟为多代理.然而,问题是我必须抽象网络和传输层到一定程度,以便能够做到这一点,以及在节点之间产生流量.Repast显然更适合这种情况,但鉴于其复杂性和缺乏文档,我正在考虑使用NetLogo.虽然NetLogo有一些传统应用程序的例子(例如:俄罗斯方块或吃豆人),但我不确定它的适用性.
我在Python 3中复制了一小块Sugarscape代理仿真模型.我发现我的代码的性能比NetLogo慢约3倍.它可能是我的代码的问题,还是它可能是Python的固有限制?
显然,这只是代码的一个片段,但是Python花费了三分之二的运行时间.我希望如果我写了一些非常低效的东西,它可能会出现在这个片段中:
UP = (0, -1)
RIGHT = (1, 0)
DOWN = (0, 1)
LEFT = (-1, 0)
all_directions = [UP, DOWN, RIGHT, LEFT]
# point is just a tuple (x, y)
def look_around(self):
max_sugar_point = self.point
max_sugar = self.world.sugar_map[self.point].level
min_range = 0
random.shuffle(self.all_directions)
for r in range(1, self.vision+1):
for d in self.all_directions:
p = ((self.point[0] + r * d[0]) % self.world.surface.length,
(self.point[1] + r * d[1]) % self.world.surface.height)
if self.world.occupied(p): # checks if p is in a lookup …
Run Code Online (Sandbox Code Playgroud) 我有海龟穿过视线,我希望能够跟随他们走到哪里,让他们在他们身后留下痕迹,好像他们在他们去的时候冒烟.当然,我可以使用乌龟笔(pen-down
),但由于有很多海龟,视野很快就会充满旧路.解决方案可能是在消散之前仅持续几个滴答的路径.但我不知道如何实现这一目标.
更具体一点:1)是否有一种技术可以使pen-down
命令后面的线条在某些刻度周期内逐渐消失?2)如果没有,有没有办法在绘制之后删除使用笔绘制的几行?3)如果没有,是否还有其他一些具有类似视觉效果的技术?
当我使用此代码将栅格图层导入NetLogo并调整世界大小时,最后一列的所有补丁变量在应包含数据时为零.这种情况仅发生在同一景观中的几个栅格上.
set rasterLayer gis:load-dataset "x.asc"
resize-world 0 (gis:width-of rasterLayer) -1 0 (gis:height-of rasterLayer) -1
gis:set-world-envelope gis:envelope-of rasterLayer
gis: apply-raster rasterLayer
Run Code Online (Sandbox Code Playgroud)
在调整世界大小时没有'-1',我得到一列NaN值(将栅格数据导入NetLogo导致NaN值的行/列).
这个光栅的尺寸是正确的; 0值的列不是额外的值,这意味着某些数据会丢失.
我有两个代理集.有找到的功能:
我发现手动实现这一点非常困难,特别是在需要三重内部时 ask
理想的用法类似于with
语法:
let cross set1 and-in set2
let uniq set1 with [color = red] not-in set2
Run Code Online (Sandbox Code Playgroud)
简单的事情,例如"代理集X中的代理A?" 是有问题的
我正在 Netlogo 中处理模型,但在理解如何设置“实验”时遇到问题。在我的模型中,我有一个矩阵,其中包含我感兴趣的所有值(总共 6 个),并且只要满足条件(每次杀死 X 只海龟时)都会更新矩阵,基本上捕获了那个时候的模型。矩阵中先前的值被清除,因此矩阵是 1x6,而不是 10000x6 矩阵,每个快照只更新一行。
我想做的是设置一个实验来运行我的模型数百次,每次收集这个矩阵以获得第一个 X 数量的快照或直到发生 Y 个刻度。但是我在实验设置中看不到这样做的方法?
这是可能的,还是我必须创建 100x6(100 个快照),然后以某种方式将该矩阵导出到 CSV?
我从未在 Netlogo 中设置过实验,因此这可能非常容易或完全不可能。
基本上,我的问题是嵌套循环如何在netlogo中工作.我已经尝试在彼此之间嵌套两个while循环,但是内部循环似乎没有正常运行(正确地是它们在其他语言中的工作方式).如果我使用两个不同的循环,它按预期工作.netlogo中的循环工作类似于汇编语言中的标签,因此它会跳转到第一个标记时注意到它.
我问的原因是因为我一直在尝试使用不同类型的循环,或者为内循环创建一个过程,这会损害我的代码的可读性.这是一个例子,我在一个制表符分隔文件中读取为补丁分配值:
file-open "map2.txt"
let i max-pycor
let j min-pxcor
while [i >= min-pycor] [
repeat 33 [ask patch j i [
ifelse file-read = 1
[set pcolor white]
[set pcolor black]
]
set j j + 1
]
set i i - 1
]
file-close-all
Run Code Online (Sandbox Code Playgroud)
我想删除重复33循环并使用while循环来使用可变大小的世界.
我有一个问题需要理解to-report
和report
在NetLogo中的作用,即使它看起来非常有用,我也无法找到用"人类风格"语言编写的帮助.
在NetLogo dictionnary http://ccl.northwestern.edu/netlogo/docs/dictionary.html#report中 我可以找到以下定义to-report
:
to-report procedure-name
to-report procedure-name [input1 ...]
Used to begin a reporter procedure.
The body of the procedure should use report to report a value for the procedure. See report.
Run Code Online (Sandbox Code Playgroud)
并为report
:
report value
Immediately exits from the current to-report procedure and reports value as the result of that procedure. report and to-report are always used in conjunction with each other. See to-report for a discussion of how to …
Run Code Online (Sandbox Code Playgroud) 如何将一个Netlogo文件中的过程包含在另一个文件中?基本上,我想将遗传算法的代码与我的(相当复杂的)适应度函数分开,但是,显然,我希望健身记者(将驻留在"fitness.nlogo"中)可用于遗传算法代码,可能是"genetic.nlogo".
如果可以完成,如何导入过程,并执行代码?它是否像Python一样,导入模块几乎执行模块中的所有内容,或者像C/C++那样,文件是盲目地"加入"的?
这可能是一个愚蠢的问题,但我在谷歌上找不到任何东西.Netlogo文档说明了一些关于__includes
可以解决这个问题的实验性关键词,但那里没有太多解释.也没有例子.
任何提示?我应该去__includes
吗?它是如何工作的?
netlogo ×10
agent ×1
gis ×1
include ×1
intersection ×1
java ×1
logo-lang ×1
patch ×1
performance ×1
python ×1
r ×1
raster ×1
report ×1
simulation ×1