2

ご迷惑をおかけして申し訳ありませんが、私の先生は、このコード[1]は十分ではなく、個々の値ではなくエージェントセットを使用する必要があると言っています。

Code[1] (最初のコードは非常にうまく機能しました)

let temp_ahead [(output-heat + 1)^ Freedom] of patch-ahead 1
let temp_right_ahead [(output-heat + 1)^ Freedom] of patch-right-and-ahead 45 1
let temp_right [(output-heat + 1)^ Freedom] of patch-right-and-ahead 90 1
let temp_right_back [(output-heat + 1)^ Freedom] of patch-right-and-ahead 135 1
let temp_back [(output-heat + 1)^ Freedom] of patch-right-and-ahead 180 1
let temp_left_back [(output-heat + 1)^ Freedom] of patch-left-and-ahead 135 1
let temp_left [(output-heat + 1)^ Freedom] of patch-left-and-ahead 90 1
let temp_left_ahead [(output-heat + 1)^ Freedom] of patch-left-and-ahead 45 1


set temp_ahead_kumulativ  temp_ahead
set temp_right_ahead_kumulativ  (temp_ahead_kumulativ + temp_right_ahead)
set temp_right_kumulativ  (temp_right_ahead_kumulativ + temp_right)
set temp_right_back_kumulativ (temp_right_kumulativ + temp_right_back)
set temp_back_kumulativ  (temp_right_back_kumulativ + temp_back)
set temp_left_back_kumulativ  (temp_back_kumulativ + temp_left_back)
set temp_left_kumulativ  (temp_left_back_kumulativ + temp_left)
set temp_left_ahead_kumulativ  (temp_left_kumulativ + temp_left_ahead)

set propability_number (random-float (temp_left_ahead_kumulativ))

if propability_number < temp_ahead_kumulativ [right 0]
if propability_number < temp_right_ahead [right 45]
if propability_number < temp_right_kumulativ [right 90]
if propability_number < temp_right_back_kumulativ [right 135]
if propability_number < temp_back_kumulativ [right 180]
if propability_number < temp_left_back_kumulativ [left 135]
if propability_number < temp_left_kumulativ [left 90]
if propability_number < temp_left_ahead_kumulativ [left 45]

私のコード [2] (コード [1] として機能していません。何が問題なのですか?):

;;all temperatrue-values around the turtle saved in list
set temperature_values [(output-heat + 1) ^ Freedom] of neighbors


;;build cumulative value of temperatures and put each value in list
let tempsum 0
set tempsum_list []
foreach temperature_values
  [set tempsum (tempsum + ? )
   set tempsum_list lput tempsum tempsum_list
  ]


;;create a random number between 0 and the last tempsum-value
let probability_number random-float tempsum + 1


if probability_number < item 0 tempsum_list
  [left 45]
if (probability_number < item 1 tempsum_list)
  [left 90]
if (probability_number < item 2 tempsum_list)
  [left 135]
if (probability_number < item 3 tempsum_list)
  [right 180]
if (probability_number < item 4 tempsum_list)
  [right 135]
if (probability_number < item 5 tempsum_list)
  [right 90]
if (probability_number < item 6 tempsum_list)
  [right 45]
if (probability_number < item 7 tempsum_list)
  [right 0]

コード [2] でエージェントセットを操作しようとしましたが、結果はコード [1] の結果とは異なります。Code[1] では私のタートルは素敵なハドルを作成していますが、Code[2] ではそうしません。私は少し絶望的です... 誰か質問があれば. タートルは、"output-heat" の値が高いパッチに高い確率で移動する必要があります。

4

1 に答える 1

2

この行set propability_number (random-float (temp_left_ahead_kumulativ))は と同じことをしませんlet probability_number random-float tempsum + 1

いくつかのテストを行います - 作成した後、probability_number の print ステートメントを用意し、それを約 10 回実行して、数値が期待どおりかどうかを確認します。

if前の質問で説明したように、各アクションの確率をどのように設定できますか? . 繰り返しますが、学習するための最良の方法は、テストを行って動作を確認することです。との区別はififelseコードを期待どおりに動作させるために非常に重要です。

于 2015-11-07T11:40:34.753 に答える