GOAP 目标导向型行为计划 AI 算法

全称: Goal-Oriented Action Planning

定义:目标导向型行为计划,参考 STRIPS-like,专门设计用于游戏中自主角色行为实时控制的规划体系结构。

参考:http://alumni.media.mit.edu/~jorkin/goap.html

GOAP 是让 AI 自己去找到解决问题的方法。
1.给 AI 制定可以执行的行为,我们将 AI 能做什么的能力定义为行为, 如(吃饭行为做饭行为买菜行为等等)
2.对 世界 或 AI自身 状态的描述,简称环境变量,如 ( 饥饿程度值有吃的体力值拥有的金币数量世界地图上有矿山 等等)
3.每个行为可以执行的先决条件,如(吃饭行为 需要 上述 2 中 环境变量 是 有吃的)
4.每个行为执行后能产生什么结果,执行结束后将结果修改 2 中 环境变量。
5.AI 需要有目标(一个或多个均可),通过环境变量 和 自身所有行为,找到一组或多组可以完成某个目标的行为列表,根据优先级或者综合排序,决策出一个最佳行为队列,并按照顺序执行一系列行为。

例子:
AI 饿了,要找吃的填饱肚子,
那么现在的 环境状态就包含: 饿了
AI 的目标就是 吃东西

AI 可执行的行为:去饭店买菜做饭翻冰箱找面包吃东西
1.买菜 -> 做饭 -> 吃东西
2.去饭店 -> 吃东西
3.翻冰箱找面包 -> 吃东西
4.有吃的就可以去吃东西

以上五中行为可以组合成 4 组 达到吃东的目的。

每个行为都是有先决条件和执行效果。行为是否能够执行必须要考虑到先决条件是否满足。

行为 先决条件 执行效果 Cost
去饭店 有饭店 买到饭(有吃的) 30
买 菜 有超市 买到菜 15
做 饭 有 菜 做好饭(有吃的) 10
翻冰箱 冰箱有面包 找到面包(有吃的) 30
吃 饭 有吃的 吃东西(完成吃东西目标) 5
  1. AI 根据 遍历位置 (如果是第一次遍历则默认从第 0 个开始),顺序遍历所有行为,拷贝当前 环境变量 下面简称 copy环境变量
  2. 遍历到的 行为A,记录遍历位置 判断 copy环境变量,判断是否满足 行为A 的先决条件,即行为A为是否可以 执行。
    如果 行为A 可以执行则到下一步 2,否则回到 步骤 1
  3. 将满足执行条件的 行为A 添加到可执行列表中,作为行为链的开始,并且将 行为A 的执行结果修改到 copy环境变量
  4. 继续遍历除 行为A 的所有行为,回到 步骤2
  5. 如果所有行为都已遍历,
    如果最终 copy环境变量 完成 AI 目标,可以将 行为列表作为一个 AI 的 顺序执行链
    如果最终 copy环境变量 不能完成 AI 目标,会到 步骤 1
    直到可以完成目标为止。如此下去最终找到 N 组可以完成目标的行为链。

下面模拟AI 遍历逻辑
第一次遍历
环境变量:有超市没吃的没菜没冰箱有饭店
AI 行为:去饭店做饭翻冰箱买菜吃饭

去饭店行为要求有饭店 :条件满足,加入可执行队列
做饭行为要求有菜: 不满足跳过
翻冰箱行为要求有冰箱:不满足跳过
买菜行为要求有超市 : 条件满足,加入可执行队列
吃饭行为要求有吃的 : 不满足跳过

第一次遍历完成,可执行行为队列中有行为:去饭店、买菜

遍历可执行行为队列 (去饭店、买菜),以队列中每一个行为为开端,重新遍历,这样就会生成两个分支,
分支 1:去饭店
分支 2:去超市买菜

去超市买菜分支为例,买菜行为做为开端开始遍历**
拷贝 copy环境变量 记录为 copy1环境变量,拷贝行为序列 ActionList,排除掉买菜行为。
注意:以任何行为为开端开始执行遍历,都要将该行为从行为序列中删除,否则会出现无限循环

copy1环境变量ActionList 为行为序列,开始新一轮遍历,将买菜行为执行效果(买到菜/有菜)更新到 copy1环境变量,判断 copy1环境变量 是否包含目标 吃饭,如果包含则视为可以完成目标,退出遍历。

copy1环境变量 没有包含吃饭,视为没有完成目标 则继续
此时 copy1环境变量有超市没吃的有菜没冰箱有饭店
ActionList 为行为序列为: 去饭店做饭翻冰箱吃饭
去饭店行为要求有饭店 :条件满足,加入到新的行为队列,以买菜行为为父节点
做饭行为要求有菜 : 条件满足,加入到新的行为队列,以买菜行为为父节点
翻冰箱行为要求有冰箱 :不满足跳过
吃饭行为要求有吃的 :不满足跳过

遍历结束,以去超市买菜行为为开端,加入一个 去饭店行为,一个 做饭行为
到此去买菜行为又产生两个分支,这两个分支都是从 分支 2 上产生的。

分支 2.1 : 去超市买菜 -> 去饭店
分支 2.2 : 去超市买菜 -> 做饭

然后遍历 分支 2.1 和 2.2,继续查找可执行序列

以 分支 2.2 为例,做饭行为作为开端开始遍历
拷贝copy1环境变量 记录为 copy2环境变量 。拷贝ActionList行为序列 ActionList_2_2,排除掉做饭行为
copy2环境变量ActionList_2_2 为行为序列,开始新一轮遍历,将做饭行为执行效果(有饭/有吃的)更新到 copy2环境变量,判断 ActionList_2_2 是否包含目标 吃饭,如果包含则视为可以完成目标,退出遍历。

copy2环境变量 没有包含吃饭,没有完成目标继续
此时 copy2环境变量有超市有吃的有菜没冰箱有饭店
ActionList_2_2 为行为序列为: 去饭店翻冰箱吃饭
去饭店行为要求有饭店条件满足,加入到新的行为队列,以买菜行为为父节点
翻冰箱行为要求有冰箱不满足跳过
吃饭行为要求有吃的条件满足,加入到新的行为队列,以买菜行为为父节点

遍历结束,以分支 2.2 做饭行为为开端,加入一个 去饭店行为,一个吃饭行为
到此去做饭行为又产生两个分支,这三个分支都是从 分支 2.2 上产生的。

分支 2.2.1 : 去超市买菜 -> 做饭 -> 去饭店
分支 2.2.2 : 去超市买菜 -> 做饭 -> 吃饭

到此 分支 2.2.2 分支已可以完成 吃饭目标了,为一个完整的达到目标的可执行序列。保存起来。

上面所有分支都要遍历完成,这里只是讲述原理,不能做到将所有分

所有支都走一遍。
最终结果大概有如下几种

A :去饭店 -> 吃饭
B :去饭店 -> 买 菜 -> 做饭 -> 吃饭
C :买 菜-> 做饭 -> 去饭店 -> 吃饭
D: 买 菜 -> 做饭 -> 吃饭
E: 买 菜-> 去饭店-> 做饭 -> 吃饭

如何找到最优解,设置每种行为的 消耗 cost,每种方案 总消耗为 所有行为的 cost 相加,找到 总 cost 最小的一个。
那么如上 A - E 几种方案的消耗如下

方案 行为序列 Cost
A 去饭店 -> 吃饭 30+5 = 35
B 去饭店 -> 买 菜 -> 做饭 -> 吃饭 30 + 15 + 10 + 5 = 60
C 买 菜-> 做饭 -> 去饭店 -> 吃饭 15 + 10 + 30 + 5 = 60
D 买 菜 -> 做饭 -> 吃饭 15 + 10 + 5 = 30
E 买 菜-> 去饭店-> 做饭 -> 吃饭 15 + 30 + 10 + 5 = 60

最终确定执行 D 方案为最优解

Demo下载地址

GOAP 目标导向型行为计划 AI 算法相关推荐

  1. 字节跳动瞄准千亿互联网医疗蓝海,张一鸣想靠AI算法当“药神”?

    文章转载自 有牛财经 字节跳动越长越大,临近年关,这家互联网巨头又瞄上了时下火热的"千亿赛道"互联网医疗. 据多家媒体报道称,字节跳动AI Lab(人工智能实验室)位于北京.上海, ...

  2. AI算法创新赛-人车目标检测竞赛总结03

    团队简介 AI0000032 团队成员均为从事计算机视觉领域的企业员工,热爱技术,勇于挑战,致力于更通用目标检测算法的研究与落地.团队由三人组成,队长何正海 主要负责整体方案设计与模型的量化工作,余洋 ...

  3. Girls In AI:面向编程零基础女孩子的AI算法工程师养成计划

    Github:YZHANG1270/Girls-In-AI Coding is the new sexy. GirlsInAI(GIA) 是一个面向编程 零基础 的AI算法工程师养成计划.鼓励更多的女 ...

  4. 直播预告:SIGDIAL2020最佳论文一作高信龙一评测任务导向型对话系统|AI TIME PHD对话系统专题-1...

    AI TIME PhD 对话系统专题-1 <任务导向型对话系统评测> 2020年7月10日 19:30-20:30 小爱同学/天猫精灵,放首歌. 送你一首好听的歌<XXX> 我 ...

  5. 实录丨戴琼海:深度学习遭遇瓶颈,全脑观测启发下一代AI算法

    2020-09-03 20:03:00 目前我们还无法精细到神经元级别的观测,只能从功能层面理解大脑,但这些成果也启发了很多经典的人工智能算法,例如卷积神经网络启发自猫脑视觉感受野研究,胶囊网络启发自 ...

  6. 大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

    热文推荐: 尘埃落定!清华才子王垠加入华为职级22,前阿里P10赵海平加入字节跳动,职级或为4+ 百度网盘"破解版",Pandownload开发者被抓 综合整理:机器之心 + 新华 ...

  7. 人工智能的本质是什么,AI算法工程师的高薪是否会一直这么持续下去?

    2020因为疫情与经济局势的影响,不论对于在职人员还是应届生都是最近几年就业压力最大的一年,但AI算法工程师相关职位,确实比其他的技术类职位高出不少,算法工程师的薪资在科技公司中,基本是除去高管之外, ...

  8. 推荐:适合小白的AI算法工程师高效学习路径!!

    人工智能(Artifical Intelligence,AI)在近十年得到了飞速的发展,算法工程师的供小于求所带来的高薪也不断吸引着优秀人才进入人工智能领域.即便近期算法工程师招聘遇冷,但数字化的国家 ...

  9. 聊聊找AI算法岗工作

    聊聊找AI算法岗工作 https://mp.weixin.qq.com/s/OUSwYzjcJD2ARhHDkqWhJw 首先,本文不是为了增加大家的焦虑感,而是站在一名学生的角度聊聊找AI算法岗位的 ...

最新文章

  1. 华为的全闪存存储发展历程
  2. React 中 $$typeof 的作用
  3. Excel 常用函数 IF 用法
  4. 一些著名的软件都用什么语言编写?
  5. 【PAT - 甲级1005】Spell It Right (20分) (递归输出,水题)
  6. PHP页面显示中文字符出现乱码
  7. 搭建Java开发环境及相关工具
  8. STM32的启动文见分析
  9. JAVA学习第八天--Scanner /String/StringBuilder
  10. 【图像分割】基于matlab FCM侧扫声呐图像分割【含Matlab源码 1478期】
  11. 为什么要使用Spring框架
  12. Matrix Calculus Reference Links
  13. 用分组编码解决算术编码的精度要求问题
  14. 蜻蜓飞过,从此智能硬件厂商有了儿童梦工厂
  15. 魔改一波合成大西瓜!代码已开源~
  16. 腾讯微信公众平台账号类型说明
  17. 基于多视角照片的3D人脸重建
  18. 计算机组成原理实验所用的指令,计算机组成原理实验报告-控制器及微指令系统的操作与运用...
  19. 算法---逆向旋转矩阵法求解矩阵绕圈走
  20. 数组的定义,一维数组,二维数组与变长数组

热门文章

  1. 【新手教程】阿里云视频点播,轻轻松松给网站加上视频的翅膀
  2. 计算机控制原理实验报告,计算机组成原理实验报告范文
  3. 电子科技大学计算机读博好毕业,成电学子读博一年达毕业要求:写论文不无聊 别把挂科当潮流...
  4. 石头剪刀布游戏(Rock-Paper-Scissors)
  5. Google 开源的这个图片压缩器,值得一用
  6. 误删掉桌面的计算机怎么恢复,电脑桌面误删的文件怎么找回
  7. 百度拆除互联网围墙,与美团、小红书等十余家企业互联互通
  8. 下级对上级回复已阅知_常见公文批示用语
  9. 强化学习在人岗匹配系统中的应用
  10. TemplateMethod模板方法模式之应用