1

単純なコードのはずですが、なぜ正しく動作しないのかわかりません。条件が満たされた場合、白以外のカメの色を白に戻したいです。不等式を条件にしています。

たとえば、アカガメの量 > = 5 の場合、[何かをする]。コードのエラー メッセージはありませんが、条件が満たされる前に [何かを行う] コードが実行されることがわかりました。例えば、タートルの量が1か4のときに実行されます。また、> = 5に達する瞬間があり、[何かをする]コードが実行されないこともわかりました。

以下はコードです

to seize-value
  ask consumers [set type-of-value ( list blue red green) ] 
  foreach type-of-value [
    if count consumers with [color = ?] > = 5 [ 
        let z consumers with [color = ?]
          ask z [ set color white ]
          ask consumers with [color = white] [set value? false]
          ask one-of cocreation-patches [ sprout 1 [gen-prevalue]]
    ]]
end

色のリスト(foreachなし)の代わりに単一の色を使用してみましたが、どちらも機能しません。

誰でもこれを手伝ってもらえますか?

ありがとうございました

4

1 に答える 1

3

値の型をエージェント変数として設定するために、コードの先頭に次のようなものがあります。

breed [ consumers consumer ]
consumers-own [ type-of-value ]

ただし、コード内でグローバル変数として扱っています。まずask consumers [set type-of-value ( list blue red green) ]、type-of-value と呼ばれる AGENT 変数を色のリストに設定します。ただし、をask []開始する前にそのステートメントを終了しますforeach

消費者が異なる色のリストを持っていない限り、本当に欲しいのはこのようなものです (未テスト)。同じエージェントセットの複数の作成も削除したことに注意してください(効率化のため):

globals [ type-of-value ]

to setup
  clear-all
  ...
  set type-of-value ( list blue red green)
  ...
  reset-ticks
end

to seize-value
*type "seize-value on tick " print ticks
  foreach type-of-value
  [ let changers consumers with [color = ?]
*print ?
*print count changers
    if count changers >= 5
    [ ask changers
      [ set color white
        set value? false
      ]
      ask one-of cocreation-patches [ sprout 1 [gen-prevalue] ]
    ]
  ]
end

デバッグ用の更新 デバッグ用の重要な情報を出力する 3 行を追加しました。それらはアスタリスク (*) でマークされています。これらの行を (* なしで) 追加し、出力を確認します。

于 2015-12-15T09:56:00.420 に答える