在NetLogo中使用扩展R训练神经网络

时间:2017-08-15 09:49:58

标签: r netlogo

我正在使用NetLogo创建供应链模拟。我正在列出从NetLogo到R的列表,其中包括经销商ID(代理商)和销售历史(所有先前刻度的销售额)。在R中,我训练我的神经网络并做出预测。当我将答案放回相同格式的列表列表中时。我需要指定哪个结果发送到哪个代理。但是,我不知道如何在NetLogo中做到这一点。我假设应该有一个函数来做到这一点,但据我所知,函数是用Java编程的,我需要在原始代码中而不是在NetLogo环境中分配值。而且,我认为这种训练和预测会多次发生(对于每个代理人而言),而不仅仅是一次。

变量示例: [[0] [100 200 300 100 200]] [[1] [200 300 100 100 200]]

第一个索引是索引的代理,第二个是代理的销售历史。

也许有人可以解释NetLogo和R如何结合用于计算目的而不仅仅是统计分析和绘图?我假设NetLogo类似于并行编程,而我的R编程风格更加线性。

1 个答案:

答案 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 在被叫之后被平方。