2

木質燃料の競争をシミュレートする NetLogo モデルを作成しようとしています。このモデルは、世界中にランダムに分布する「世帯」と「木」の 2 つのカメの品種で構成されています。家庭所有の[燃料店ターゲット半径]。Fuel-store = 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  [

最初に、少なくとも同じ変数を持つ世帯を特定しますが、これは機能しません。どんな考えでも大歓迎です。

4

1 に答える 1

1

[target] of meは値のリストを返しますが、単一の値を返します (targetここで使用できます) 。[target] of othersうまくいくと思ういくつかの方法を次に示します。

ask households [
  let target1 target
  ask other households [
    if target = target1 [
      ...
    ]
  ]
]

での比較は、質問をしている世帯の対象である、他の世帯とのif比較です。このようにすることもできます:targettarget1

ask households [
  ask other households [
    if target = [target] of myself [
      ...
    ]
  ]
]

繰り返しますが、the のtarget後の最初のものは、質問された世帯の theifを指します。は質問者世帯を指すため、前の例で言及したものと同じものを指します。( に置き換えると、質問された世帯を参照します。)targetmyself[target] of myselftarget1myselfself

もう 1 つの方法は、ツリーをターゲットにしている世帯の ID をツリーに格納することです。たとえばtargetted、ツリーに、そのツリーをターゲットにしている世帯を常に参照する変数がある場合、次のようにすることができます。

ask households [
  if target != nobody [
    if ([targetted] of target != self) [
      ...
    ]
  ]
]

(元の例のように追加した場合は、selfに置き換えることもできます。)それがあなたの望むことをするかどうかはわかりませんが、そうでない場合は、それを変更する方法を理解することができます. melet me self

質問の元の定式化に関連するもう1つのヒント。if最後の例の 2 つの s を次のように置き換えることもできます。

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

andの前のテストが評価されない限り、後のテストは評価されませんand

于 2014-10-09T15:19:34.077 に答える