對不起,如果我討厭你,但我的老師說這個代碼[1]不夠好,我應該使用代理集而不是個體值。兩個代碼括號之間的比較應該這樣做
代碼[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]中的結果。在代碼[1]中,我的海龜創造了不錯的擠身,但在代碼[2]中他們不這麼做。我有點絕望... 如果有人提問。海龜應該以更高的概率移動到具有較高「輸出熱量」值的貼片。
除了JenB的回答,我想推薦學習如何正確地縮進代碼。否則,別人很難閱讀你的代碼,而且犯錯誤很容易。有幾種方法可以做到這一點,這對NetLogo來說很好。我編輯你的代碼來說明一個選項。 – Mars
難道問題是'neighbors'與使用'patch-left-and-ahead'和'patch-right-and-ahead'選出的補丁不是相同的補丁嗎?因爲他們通常不會是相同的補丁,這取決於補丁內的龜的確切位置及其確切的標題。 (例如,除非海龜總是在補丁中心,否則'patch-ahead 1'有時是相同的補丁,龜已經站在...!) –
是的,我也這麼認爲。我現在用鄰居的座標試了一下。然後用facexy將烏龜的座標轉換爲座標。除了鄰居之外,還有其他的方式嗎? – skipperdipper