首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >领域建模帮助/ optaplanner生存能力(Optaplanner)

领域建模帮助/ optaplanner生存能力(Optaplanner)
EN

Stack Overflow用户
提问于 2022-11-04 00:38:17
回答 1查看 29关注 0票数 0

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

bot具有启动状态、所需的结束状态以及可以执行的不同任务。目标是使用optaplanner找到可行的任务序列,使bot从启动状态到期望的结束状态,优化为成本最低的

机器人:

inventory

  • current location

中的

  • State:
    • 项目

任务:

  • 示例:收集1块木头,制作一个桶
  • ,每个任务对当前状态都有“需求”-- f(currentState) -> boolean
  • -a任务转换到一个新的状态- f(currentState) -> newState
  • 有一个代价启发式: f(currentState) -> int

H 121任务E 122可以重复E 223。例如,机器人可能需要收集5个木头(收集木材任务,重复5次)

  • Tasks可能没有使用。例如,如果所需的结束状态是有一个金属桶,则不需要执行收集木材任务。

这和Optaplanner有可能吗?什么是正确的方法来模拟这个问题?

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

我研究了@PlanningListVariable,但我不确定这是否符合我的用例。医生说:

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

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

EN

回答 1

Stack Overflow用户

发布于 2022-11-04 17:44:44

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

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

因为您不能在当前的(https://issues.redhat.com/browse/PLANNER-2642).中添加计划实体,所以您需要对达到目标所需的最大操作数进行“猜测”。

您可以做的是使用OptaPlanner作为bot的“策略生成器”。这一体系结构将有四个组成部分:

  • 是一种信息收集器,它从屏幕上获取信息,并将其转换为问题事实,供其他组件使用。

步骤决定器,它决定立即采取什么行动,以推进到给定的最终目标。它可以是“收集木材”,“矿山矿石”或“将物品列入库存”。这将是一个“短视”的规划师;它将抽象的最终目标转化为OptaPlanner能够理解和解决的更具体的子目标。

  • 是一个策略生成器,它为由操作实现者执行的步骤决策器决定的操作创建一个计划。这就是OptaPlanner进来的地方。对于每个目标,您将需要定义一个评估计划有效性的约束提供者。例如,对于“收集木头”操作,这将是一个车辆路线问题,您将玩家(充当车辆)从他们当前的位置(仓库)到树收集木材。一个计划就是要参观的树木。为了克服需要访问所有树的事实,您将有第二个虚拟/假实体,该实体将被分配给所有未访问的树,而分配给虚拟/假实体的任何树都不会影响得分。

动作实现者

  • ,它接受由策略生成器生成的计划并加以实现。这将是机器人决定所有输入的一部分。这将是一个“反应性”组件,因为它可能需要处理不可预见的问题(如僵尸)。它不做任何重大的决定,并试图(以它最好的能力)遵循由战略生成器制定的计划。它主要负责导航世界和处理作战情况。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74310967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档