我正在为老鼠和猫设计一个人工智能。所以他们有HP,猫会追着吃老鼠,老鼠会吃奶酪。这种进食动作将帮助他们获得HP。如果他们不能吃东西,如果他们用完所有的HP,他们就会死。
所以我翻阅了书籍,我有一个基本的算法。
def chooseAction(actions, goals):
# Go through each action, and calculate the
# discontentment.
bestAction = actions[0]
bestValue = calculateDiscontentment(actions[0], goals)
for action in actions:
thisValue = calculateDiscontentment(action, goals)
if thisValue < bestValue:
bestValue = thisValue
bestAction = action
# return the best action
return bestAction
def calculateDiscontentment(action, goals):
# Keep a running total
discontentment = 0
# Loop through each goal
for goal in action:
# Calculate the new value after the action
newValue = goal.value + action.getGoalChange(goal)
# Get the discontentment of this value
discontentment += goal.getDiscontentment(value)
struct Goal:
value
def getDiscontentment(newValue):
return newValue * newValue
这个算法很容易理解,也很容易实现。
所以我必须为他们采取的每一个行动确定目标和目标价值。
假设一只老鼠,他可能想移动,吃东西。
所以我必须为这些值提出一个值(wiliness)。
确定这些值的好方法是什么?
我的方法就在这里。
莱伊说我的鼠标有 3 个单元格的视野范围,它只能在左右上下四个方向上行走。
目标吃值可能由它的 MAX_ENERGY 和 NOW_ENERGY 决定,我得出一个公式吃值 = MAX_ENERGY - NOW_ENERGY。这是有道理的,因为它 NOW_ENERGY 等于 MAX_ENERGY,我的鼠标有一个 0 的智慧可以吃。
有什么好的方法可以得出这个简单的配方?我的鼠标移动的好方法是什么?