根据多个变量中的最大值选择动作
Choosing action based on maximum value among multiple variables
我的海龟每个 tick 计算了几个变量:gain-stay
、gain-move
、gain-grow
、gain-shrink
。我希望它们根据这些变量中具有最高值的那个来停留、移动、增长或收缩。我有,名为 to stay
、to move
等的程序
为了简单起见,如果几个变量都与最大值并列,我不关心他们采取哪一个策略。如果将变量命名为 shrink
、stay
等会更容易,那很好。
看来我有两个步骤可以解决:
- 提取具有最大值的变量的名称。
- 运行 该名称指示的策略。我认为这将使用
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
我的海龟每个 tick 计算了几个变量:gain-stay
、gain-move
、gain-grow
、gain-shrink
。我希望它们根据这些变量中具有最高值的那个来停留、移动、增长或收缩。我有,名为 to stay
、to move
等的程序
为了简单起见,如果几个变量都与最大值并列,我不关心他们采取哪一个策略。如果将变量命名为 shrink
、stay
等会更容易,那很好。
看来我有两个步骤可以解决:
- 提取具有最大值的变量的名称。
- 运行 该名称指示的策略。我认为这将使用
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