根据多个变量中的最大值选择动作

Choosing action based on maximum value among multiple variables

我的海龟每个 tick 计算了几个变量:gain-staygain-movegain-growgain-shrink。我希望它们根据这些变量中具有最高值的那个来停留、移动、增长或收缩。我有,名为 to stayto move 等的程序

为了简单起见,如果几个变量都与最大值并列,我不关心他们采取哪一个策略。如果将变量命名为 shrinkstay 等会更容易,那很好。

看来我有两个步骤可以解决:

  1. 提取具有最大值的变量的名称
  2. 运行 该名称指示的策略。我认为这将使用 runresult 并且比第一步更容易被它难倒。

如有任何帮助,我们将不胜感激。非常感谢。

此代码通过将找到的最大值与每个变量的内容进行比较并构建所有匹配项的名称列表来选择最佳策略。然后它随机选择其中一个名称。这是一个完整的程序,你可以打开一个新的模型,把它复制进去看看会发生什么。

turtles-own [s1 s2 s3 s4]

to setup
  clear-all
  create-turtles 20
  [ setxy random-xcor random-ycor
    set s1 random 10
    set s2 random 10
    set s3 random 10
    set s4 random 10
  ]
  reset-ticks
end

to go
  ask turtles
  [ type "my values are " type s1 type s2 type s3 print s4
    let maxval max (list s1 s2 s3 s4)
    let strategy-list []
    if maxval = s1 [set strategy-list fput "s1" strategy-list]
    if maxval = s2 [set strategy-list fput "s2" strategy-list]
    if maxval = s3 [set strategy-list fput "s3" strategy-list]
    if maxval = s4 [set strategy-list fput "s4" strategy-list]
    let chosen one-of strategy-list
    run (word "do-" chosen)            
  ]
  tick
end

to do-s1
  print "I chose s1"
end

to do-s2
  print "I chose s2"
end

to do-s3
  print "I chose s3"
end

to do-s4
  print "I chose s4"
end