Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何在NetLogo中设置变量,例如海龟的概率,一次一个_Variables_Netlogo - Fatal编程技术网

Variables 如何在NetLogo中设置变量,例如海龟的概率,一次一个

Variables 如何在NetLogo中设置变量,例如海龟的概率,一次一个,variables,netlogo,Variables,Netlogo,在NetLogo中,我想一次一只地对每只海龟进行迭代,每次迭代两个品种;大的和小的。在看一只乌龟时,我想给它的邻居分配概率,然后把这些概率编成一个列表,乘以这个列表,然后用这个值来决定是否应该移动乌龟。然后,一旦循环在一只海龟身上完成工作,这些值就应该丢失,这样它们就不会影响下一个中心海龟社区。我一直在使用这段代码,但我意识到现在它似乎覆盖了值,因为“ask smalls”在Probability_产品中排在最后,但我不确定如何修复它。这里大多数未定义的变量都位于GUI中的滑块上。 谢谢 繁殖[

在NetLogo中,我想一次一只地对每只海龟进行迭代,每次迭代两个品种;大的和小的。在看一只乌龟时,我想给它的邻居分配概率,然后把这些概率编成一个列表,乘以这个列表,然后用这个值来决定是否应该移动乌龟。然后,一旦循环在一只海龟身上完成工作,这些值就应该丢失,这样它们就不会影响下一个中心海龟社区。我一直在使用这段代码,但我意识到现在它似乎覆盖了值,因为“ask smalls”在Probability_产品中排在最后,但我不确定如何修复它。这里大多数未定义的变量都位于GUI中的滑块上。 谢谢

繁殖[大家伙]
繁殖[小的]
大公司自有[概率]
斯莫尔自己的[概率]
设置
清除所有
设置默认形状大“正方形”
将默认形状设置为“方形”
询问[abs(最小pxcor-pxcor)>2]的n个大数补丁
[sprout bigs 1[设置红色]]
使用[此处没有任何?大]询问n个小数量补丁
[sprout smalls 1[设置蓝色]]
重置滴答声
结束
外带
问海龟[在邻居家数海龟4<4][
所以只有乌龟才能在邻居家的空地上活动
让我们的邻居和[这里没有海龟]
;打印产品
如果在邻居家里数海龟4<4[

如果random 1001这不是一个真正的答案(编辑:可能是现在?),但这是一个必要的回答,不适合评论。我在评论中还有其他问题

我仍然不确定我是否在评论中回答了你的问题。我认为首先需要做一些事情来澄清你的代码应该做什么。首先,我编辑了你问题中的代码,以使其格式更清晰(同时尽量保留你的风格)第二,我在
ask bigs
ask smalls
之后的行中添加了结束括号。最重要的是,我认为如果你能提供一个(MWE)——程序的最小、最简单的版本,它仍然包含(a)运行的代码,和(b)运行的代码,这会有所帮助说明了您试图解决的问题。构建MWE需要一些工作,因为您必须弄清楚您可以取出什么(因为保留它只会让读者感到困惑),以及您必须保留什么,因为这是创建问题的关键。(但是,有时在尝试创建MWE时,您会自己找到问题的答案。)

例如,这里有一个MWE,在它运行的意义上,但您必须更改它来说明您的问题

breed [bigs big]
breed [smalls small]
bigs-own [probability]
smalls-own [probability]
globals [Prob_bigs_bigs_breaking Prob_smalls_smalls_breaking]

to setup
  reset-ticks
  ask n-of 20 patches [sprout-bigs 1 []]
  ask n-of 20 patches [sprout-smalls 1 []]
end

to go  
  ask turtles with [count turtles-on neighbors4 < 4 ][  
     ;; so only turtles will a space in the neighbours 4 can move
     move-turtle
  ]
  tick
end

to-report Probability_Product

  ask bigs with [count turtles-on neighbors4 < 4 ] [ 
    ;; self is each big in turn
    ask bigs-on neighbors4 [set probability Prob_bigs_bigs_breaking] 
  ]

  ask smalls with [count turtles-on neighbors4 < 4 ][
    ;; self is each small, in turn  
    ask smalls-on neighbors4 [set probability Prob_smalls_smalls_breaking]
  ]

  ;; Here self is the turtle that called move-turtle, which called Probability_Product.
  if any? turtles with [count turtles-on neighbors4 < 4 ][
    let prob-list ( sentence ([probability] of turtles-on neighbors4))
    if prob-list != [] 
      [ report reduce  * prob-list ] ;; multiplies all the probabilities together
  ]

  report 0
end

to move-turtle
  if random 1001 <= Probability_Product * 1000 [
    ;.....
  ]
end
这个函数背后的思想是,
probability
变量在
probability\u Product
中所做的唯一事情就是保持滑块中设置的值。然后这些值被相乘。但是我们可以直接相乘这些值


(我的许多其他评论似乎仍然适用。)

在第一个块代码的末尾附近似乎缺少一个结束方括号。另外,如果
prob list=[]
?会发生这种情况吗?报告了什么?我不确定我是否理解您试图做的事情,但听起来有两个概率变量可能会有所帮助,例如,
new probability
old probability
。根据另一个更新其中一个,以便您可以保持两个不同版本的不同直到你处理完所有海龟。然后将
新概率
的值移到
旧概率
中。我只是猜测——我不确定这是否有用。谢谢@Mars,我修复了这个括号。我试图简化我的非常长而复杂的代码,所以我只关注这个问题,是的,空列表可以在我较长的代码中,它将其设置为值1(它有一个ifelse)。另外,为了回答你的第二个评论,我想研究一个中心海龟邻域概率(来自它的邻域4),将附近的所有概率相乘,然后根据这一概率移动一只乌龟。然后移动到下一只乌龟,并执行相同的操作,直到所有乌龟都完成,然后重新开始。此外,我已经修复了一些代码,我认为现在更好了(重新编辑原文)邻域概率的乘积除了用来确定海龟如何移动外,还有其他用途吗?听起来好像它与邻域中的概率真的是一个不同的量。如果你不存储乘法的概率,那么使用已经确定的概率就没有问题了en在循环过程中进行了修改,因为不会修改存储的概率。如果您确实需要存储产品,并在以后使用它,它似乎仍然应该位于与乘法中的概率不同的变量中。感谢到目前为止的帮助,但我没有取得多大进展。我按照您的建议和编辑制作了一个MWE原始代码。仍然困惑,无论我现在做什么,都会让事情变得更糟:(我试图把我在单独代码中分配概率的部分给报告者,但我让事情变得更糟:(如果有更多的帮助,我们将不胜感激!我想这没关系!我只需将ifelse行更改为if行,并添加另一条if行,以防它包含有4个邻居的海龟,因为它们不允许移动:if Neighbor count=0[报告1].非常感谢您在@Mars!的帮助!您是一名冠军!我很高兴这对您有所帮助,a.D。
breed [bigs big]
breed [smalls small]
bigs-own [probability]
smalls-own [probability]
globals [Prob_bigs_bigs_breaking Prob_smalls_smalls_breaking]

to setup
  reset-ticks
  ask n-of 20 patches [sprout-bigs 1 []]
  ask n-of 20 patches [sprout-smalls 1 []]
end

to go  
  ask turtles with [count turtles-on neighbors4 < 4 ][  
     ;; so only turtles will a space in the neighbours 4 can move
     move-turtle
  ]
  tick
end

to-report Probability_Product

  ask bigs with [count turtles-on neighbors4 < 4 ] [ 
    ;; self is each big in turn
    ask bigs-on neighbors4 [set probability Prob_bigs_bigs_breaking] 
  ]

  ask smalls with [count turtles-on neighbors4 < 4 ][
    ;; self is each small, in turn  
    ask smalls-on neighbors4 [set probability Prob_smalls_smalls_breaking]
  ]

  ;; Here self is the turtle that called move-turtle, which called Probability_Product.
  if any? turtles with [count turtles-on neighbors4 < 4 ][
    let prob-list ( sentence ([probability] of turtles-on neighbors4))
    if prob-list != [] 
      [ report reduce  * prob-list ] ;; multiplies all the probabilities together
  ]

  report 0
end

to move-turtle
  if random 1001 <= Probability_Product * 1000 [
    ;.....
  ]
end
to-report new-Probability_Product
  let neighbor-count count turtles-on neighbors4
  let big-neighbor-count count bigs-on neighbors4
  let small-neighbor-count count smalls-on neighbors4

  if-else neighbor-count < 4 and neighbor-count > 0
    [ if-else is-big? self  ; self is turtle from ask in go procedure
        [ report (Prob_big_big_breaking ^ big-neighbor-count) *    ; if self is a big
                 (Prob_small_big_breaking ^ small-neighbor-count) ]
        [ report (Prob_small_big_breaking ^ big-neighbor-count) *  ; if self is a small
                 (Prob_small_small_breaking ^ small-neighbor-count) ] ]
    [ report 1]
end