Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
共享turtles自身变量的NetLogo测试_Netlogo_Unique Values - Fatal编程技术网

共享turtles自身变量的NetLogo测试

共享turtles自身变量的NetLogo测试,netlogo,unique-values,Netlogo,Unique Values,我试图制作一个NetLogo模型来模拟木材燃料的竞争。该模型由两个海龟品种组成:“家庭”和“树”随机分布在世界各地。家庭拥有[燃料库目标半径]。当燃料存储=0时,住户使用以下程序在最小半径1内“找到”一棵新树,如果没有树,则将半径增加1,直到达到最大半径: to FindFuelGo ask households [ if fuel-store = 0 [ set target min-one-of trees in-radius radius [ distance my

我试图制作一个NetLogo模型来模拟木材燃料的竞争。该模型由两个海龟品种组成:“家庭”和“树”随机分布在世界各地。家庭拥有[燃料库目标半径]。当燃料存储=0时,住户使用以下程序在最小半径1内“找到”一棵新树,如果没有树,则将半径增加1,直到达到最大半径:

to FindFuelGo
  ask households [
    if fuel-store = 0 [
      set target min-one-of trees in-radius radius [ distance myself ]
      if not any? trees in-radius radius [
        if radius != max-radius [
          set radius radius + 1
       ]
     ]
然而,由于该模型模拟竞争,我如何测试一个家庭是否与另一个家庭共享相同的目标(在模型运行时不可避免地会共享),以及是否将目标分配给距离目标最短的家庭?我试过:

ask households [
 let me self
 let others other households
 if target != nobody [
  if [ target ] of me = [ target ] of others  [

首先,至少要确定任何具有相同变量的家庭,但这不起作用。任何想法都将不胜感激。

[target]我的
只返回一个值(您可以在这里使用
target
),而其他人的则返回一个值列表。以下是一些我认为有效的方法:

ask households [
  let target1 target
  ask other households [
    if target = target1 [
      ...
    ]
  ]
]
if
中的比较将另一个家庭的
target
target1
进行比较,后者是提出请求的家庭的目标。您也可以这样做:

ask households [
  ask other households [
    if target = [target] of myself [
      ...
    ]
  ]
]
同样,在
if
之后的第一个
target
指被询问家庭的
target
我自己
指的是询问的家庭,因此我自己的
[target]与前面示例中提到的
target1
指的是相同的事情。(如果您将
本人
替换为
本人
,则它将指向被询问的家庭。)

另一种方法是让树木存储目标家庭的身份。例如,如果树有一个
targeted
变量,该变量始终指向以树为目标的家庭,则可以执行以下操作:

ask households [
  if target != nobody [
    if ([targetted] of target != self) [
      ...
    ]
  ]
]
self
也可以被
me
替换,如果您添加了
let me self
,就像您原来的示例一样。)我不确定这是否符合您的要求,但如果不是,您将能够找到如何修改它的方法

还有一个提示与问题中的原始公式有关。您还可以将上一个示例中的两个
if
s替换为:

if target != nobody and [targetted] of target != self [
  ...
]

除非
前面的测试正确,否则
后面的测试不会被评估。

回答得很好谢谢!我使用了你的第二个建议,即创建一个目标变量,该变量应允许我比较家庭和目标之间的距离,以及树和目标对象之间的距离。