域建模帮助/optaplanner 可行性(Optaplanner)

问题描述 投票:0回答:1

我希望尝试创建一个自动玩视频游戏的机器人,并且想知道 Optaplanner 是否可以用于机器人的任务规划。

机器人具有起始状态、期望的结束状态以及它可以执行的不同任务。目标是使用 optaplanner 找到可行的任务序列,使机器人从起始状态进入所需的最终状态,优化成本最低

机器人:

  • 状态:
    • 库存物品
    • 当前位置

任务:

  • 示例:收集 1 个木头,制作一个桶
  • 每个任务对当前状态都有“要求”——f(currentState) -> boolean
  • 任务将机器人转换到新状态 - f(currentState) -> newState
  • 有一个成本启发式:f(currentState) -> int
  • 任务可以重复。例如,机器人可能需要收集 5 个木材(收集木材任务,重复 5 次)
  • 任务可能会被闲置。例如,如果所需的最终状态是有一个金属桶,则无需执行收集木材任务。

Optaplanner 可以做到这一点吗?模拟这个问题的正确方法是什么?

任何帮助/指导将不胜感激,我已经梳理了大部分 Optaplanner 文档和示例。


我已经研究过@PlanningListVariable,但我不确定这是否适合我的用例。文档说:

每个计划值都分配给一个计划实体。

在我的例子中,任务将是规划值,而机器人将是规划实体(?)。但是,许多任务可能未使用,根本不应该分配......所以它看起来不正确。

minecraft optaplanner planning
1个回答
0
投票

这是一个很难在 OptaPlanner 中建模的域/约束的示例。您的规划实体形成了一系列无限的行动,每个行动都可能影响未来的行动(例如,为了制作一个水桶,您需要 3 个铁,这是由过去的行动收集的)。这意味着:

  • 改变过去的行为很可能会违反涉及未来行为的约束。这使得 OptaPlanner 很难更改过去的操作,除非它之后的所有/大多数操作也被删除。

  • 您需要“猜测”达到目标所需的最大操作数量,因为您当前无法在移动中添加计划实体 (https://issues.redhat.com/browse/PLANNER-第2642章

  • 您可以使用 OptaPlanner 作为机器人的“策略生成器”。该架构有四个组成部分:

    信息收集器,从屏幕或 Minecraft API 获取信息并将其转换为问题事实以供其他组件使用。
  • 步骤决策者,决定立即采取哪些行动以实现给定的最终目标。它可能是“收集木材”、“开采矿石”或“将物品放入库存”之类的内容。这将是一个“短视”的规划者;它将抽象的最终目标转换为 OptaPlanner 可以理解和解决的更具体的子目标。
  • 策略生成器,它为行动实施者将执行的步骤决策者决定的行动创建计划。这就是 OptaPlanner 的用武之地。对于每个目标,您需要定义一个约束提供者来评估计划的有效性。例如,对于“收集木材”动作,这将是一个车辆路线问题,您将玩家(充当车辆)从当前位置(仓库)引导到树木以收集木材。计划是参观树木。为了克服需要访问所有树木的事实,您将拥有第二个虚拟/虚假实体,该实体将分配所有未访问的树木,并且分配给虚拟/虚假实体的任何树木都不会影响分数。
  • 行动实施者,接受策略生成器生成的计划并实施它。这将是机器人决定所有输入的部分。它将是一个“反应性”组件,因为它可能需要处理不可预见的问题(如僵尸)。它不会做出任何重大决策,并尝试(尽其所能)遵循策略生成器创建的计划。它主要负责航行世界和处理战斗情况。
© www.soinside.com 2019 - 2024. All rights reserved.