我正在使用NetLogo创建供应链模拟。我正在列出从NetLogo到R的列表,其中包括经销商ID(代理商)和销售历史(所有先前刻度的销售额)。在R中,我训练我的神经网络并做出预测。当我将答案放回相同格式的列表列表中时。我需要指定哪个结果发送到哪个代理。但是,我不知道如何在NetLogo中做到这一点。我假设应该有一个函数来做到这一点,但据我所知,函数是用Java编程的,我需要在原始代码中而不是在NetLogo环境中分配值。而且,我认为这种训练和预测会多次发生(对于每个代理人而言),而不仅仅是一次。
变量示例: [[0] [100 200 300 100 200]] [[1] [200 300 100 100 200]]
第一个索引是索引的代理,第二个是代理的销售历史。
也许有人可以解释NetLogo和R如何结合用于计算目的而不仅仅是统计分析和绘图?我假设NetLogo类似于并行编程,而我的R编程风格更加线性。
答案 0 :(得分:1)
你问题的最后一部分超出了我的范围(对于典型的Stack Overflow问题可能过于宽泛 - 我不确定你会在这里得到一个有用的答案)。但是,也许这个例子可以帮助您确定正在尝试做的事情。
我认为您使用的[r]
扩展程序与上一个问题相同,因此请使用此设置:
extensions [r]
turtles-own [ rand-num ]
to setup
ca
crt 10 [
set rand-num random 5
]
reset-ticks
end
在此示例中,海龟有rand-num
而不是您的销售历史,但概念是相同的。首先,构建列表列表,其中第一个索引是turtle [who]
,第二个索引是[rand-num]
,然后将其输出到r(请注意我也sort
列表,但这只是为了清晰而实际上并不需要):
to go
let l_list map [ i ->
list i [rand-num] of turtle i
] ( sort [ who ] of turtles )
r:put "list1" l_list
show r:get "list1"
接下来,在此示例中,使用r:eval
对r中的值执行您需要做的任何事情我只需使用lapply
来平方rand-num
值({ {1}}) - 但请务必返回x[[2]]
:
x
现在,要为海龟分配修改后的值,请使用Netlogo&#39; s let modified_list ( r:get "lapply(list1, function(x) { x[[2]] <- x[[2]]^2; return(x)})" )
迭代修改后的列表,并请求索引0(foreach
)的乌龟设置其{{1索引1(turtle item 0 x
):
rand-num
如果你在跑步之前和之后检查set rand-num item 1 x
,你应该看到每只乌龟的 foreach modified_list [ x ->
ask turtle item 0 x [
set rand-num item 1 x
]
]
end
在被叫之后被平方。