比较两个代码括号应该做同样的事情

时间:2015-11-07 11:28:25

标签: simulation netlogo agent-based-modeling

很抱歉,如果我惹恼你,但我的老师说这段代码[1]不够好,我应该使用agentsets而不是invidual值。

代码[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]中他们不会这样做。我有点绝望...... 如有疑问的话。海龟应该以更高的概率移动到具有更高值&#34;输出 - 加热&#34;的补丁。

1 个答案:

答案 0 :(得分:2)

此行set propability_number (random-float (temp_left_ahead_kumulativ))let probability_number random-float tempsum + 1不同。

进行一些测试 - 在创建后为probability_number创建一个print语句,运行大约10次,看看这些数字是否符合预期。

您的if语句也存在问题,正如您之前的问题how can i set a probability for each action?所述。同样,最好的学习方法是做一些测试,看看事情是如何运作的。 ififelse之间的区别非常重要,可以让您的代码按预期执行。