Games104现代游戏引擎笔记高级ai

news2024/11/26 1:45:19

Hierarchical Task Network 层次任务网络

在这里插入图片描述
在这里插入图片描述
World State是一个主观的对世界的认知,并不是一个真实世界的描述
Sensors负责从游戏环境中抓取各种状态
在这里插入图片描述
HTN Domain 存放层次化的树状结构Task和之间的关联关系1
Planner 根据World State从 Domain 里规划 task
Plan Runner 根据 Planner 设定的计划执行 Task,当 Task 执行过程中发生了很多其他问题,Plan Runner 会监控所有的状态并且告知Planner规划另一系列Task (Re-plan)
在这里插入图片描述
primitive:单个动作
compound:复合任务
在这里插入图片描述
在这里插入图片描述
preconditions:检测world state中哪些state条件符合,才会执行,否则返回false,
检查task执行中间是否失败 (对世界的读操作)
effects:task执行完后修改world state (对世界的写操作)
在这里插入图片描述
在这里插入图片描述
task由一堆Method构成,每个method都有一组属于自己的Precondition, Method自上而下就是优先级 Priority,类似于BT selector功能,
每个method都要执行一系列task、,全部完成,类似于BT selector的Sequence。
在这里插入图片描述
在这里插入图片描述
HTN Domain需要定义一个Root Stask作为根节点,也就是核心节点
在这里插入图片描述
在这里插入图片描述
根据 World State, 从Root Task开始选择当前目标的task,依次展开
在这里插入图片描述
Plan展开的过程是非常的快的,但是因为每一个Primitive Task 都是有个对于world state修改的Effect,但是并不会真的修改到World State 上,然而这可能会影响到后面的task。 所以这里的方法是将World State复制一下,然后对于这个拷贝进行修改和推演,自Planning一步步展开
相当于对于World State进行一个预演并且假设所有的Task都会成功。
Replaning就是处理如果Task不成功的情况在这里插入图片描述
计划中如果发生Precondition不符合,只能返回False,并且一路返回直到Root Task
在这里插入图片描述
在这里插入图片描述
最后相当于搜索完domain并输出一串Primitive Task
在这里插入图片描述
在这里插入图片描述
据Planner的结果依次执行计划,可能执行失败,需要Replan
在这里插入图片描述
Replan原因:1.没有计划 2.计划执行完毕或失败 3.感知的world state发生变化
在这里插入图片描述
优点:
1.是对于BT的一个非常好的抽象和总结
2.有助于设计师规划长期行为
3.执行效率高于BT (Planning减少了遍历树的过程,ai在被唤醒tick时要从root重新跑一遍,htn除非世界发生改变,或者plan计划完成或失效,否则不会重新遍历)
缺点:
1.配置Precondition和Effector的时候,因为数量很大且交叉,可能导致Task无法执行,但是设计师难以被发现:需要一些静态检查工具检查逻辑漏洞
2.plan的链路很长,在一个高度不确定的环境中,容易在中间失败,导致replan

Goal-Oriented Action Planning

在这里插入图片描述
Goal set目标集:所有可以达成的目标,Htn里并没有显示的定义出目标,是从task树里看出来目标(写在注释里的)。GOAL里的目标都是用数学方式可以表达的
Planning:规划问题
在这里插入图片描述
每个goal是由一系列的动作完成后期望世界达成的状态来定量表达的。每个goal在动作完成后需要满足一些World State(一般是bool值),并非单一状态,而是一个目标状态的组合(Collection of States)
在这里插入图片描述
在这里插入图片描述
相比于Primitive Task,增加了Cost。有设计者定义cost,用来进行动态规划
在这里插入图片描述
倒着计划每个action
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
比较当前目标的world state和外部world state,找出未满足的state,加入到Unsatisfied State的堆栈里,
比较第一个未满足的state,以此在action set里寻找,哪个action输出的effect可改写未满足的state,移除堆栈里可改写的state
如果aciton的precondition是不满足的,把不满足的state提出,反向加入到Unsatisfied state的堆栈,action加入plan stack
最终目标清空Unsatisfied state堆栈,并且期望plan stack里的action cost最少
在这里插入图片描述

node:state的一个组合
egde:所有可能的action
distance:action所需的消耗
在这里插入图片描述
a*启发函数:选择更接近当前state组合的路径
在这里插入图片描述
优点:
1.相比于HTN,GOAP更加的动态
2.将目标和行为真正意义上分开(FSM,BT,HTN,行为和目标是一一锁死的,GOAP同一个目标,可能有多种行为路线,可以超出设计师的想象)
3.可以规避HTN的配置上的死锁等问题
缺点:
1.非常的复杂,计算量大于HTN和BT和FSM
2.GOAP需要对于Game World进行一个定量的表达,复杂的游戏很难通过bool变量去表达World State
通常用于传统的单机的,1V1或者少量AI博弈比较合适

Monte CarloTree Search

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

蒙特卡洛是一种基于随机采样的算法
State 和 Action 是用于将围棋问题抽象成数学问题的方法
State:世界的现在状态,比如这个时刻所有子的位置
Action:可执行的动作,也就是落子
在这里插入图片描述
判断所有的可能性,选择最有利的做法
在这里插入图片描述
在这里插入图片描述
Q 模拟赢的次数
N 模拟次数
Q / N 判断State的好坏
在这里插入图片描述
模拟结果要反向传导更新父节点
在这里插入图片描述1.选择一个最有可能的且所有可能性未被完全展开的子节点
2.展开加一次新的探索
3.做一次simulation,对结果进行胜负模拟,确定探索方向的好坏
4.得出结果后,把数值反向传导回父节点
在这里插入图片描述
在这里插入图片描述

Expandable Node这个node的所有可能性并没有被穷尽
在这里插入图片描述
Exploitation 开发:优先寻找胜率高的点,也就是选择N, Q/N值都很大的Node
Exploration 探索 :优先寻找探索 N值较小的
在这里插入图片描述
UCB算法:用于平衡开发和探索的算法
优先选择Q/N较高的,然后于父节点N比较,
C用于调整策略平衡,C值越大则越激进(趋向于探索),C值越小越保守(趋向于开发)
在这里插入图片描述
从root开始,比较第一圈所有子节点UCB的值,最大值节点作为下一个探索方向,一直往下走到第一个Expandable Node节点(未被完全展开过),作为当前 select node展开
类似BFS,但每次都从root开始往下走
在这里插入图片描述
根据性能可模拟一种或多种可能性
在这里插入图片描述
每个节点模拟胜负结果并反向更新父节点(每个Node的Q,N依次叠加)
在这里插入图片描述
设定一个搜索次数或者内存大小或者计算时间等作为停止条件
在这里插入图片描述
停止后得到一个Tree
在第一个子节点里,根据不同的策略方式来选择:
Max Child :选择Q值最大的,也就是胜的最多的
Robust Child :选择最多被访问子节点的,N值最大的,不是 Q/N
Max-Robust Child :最大的 Q 和 N 的,如果没有则继续跑直到出现
Secure Child :LCB Lower Confidence Bound,(考虑下执行区间)主要是对采样次数不多的选择进行一个惩罚,还是C的设置问题
在这里插入图片描述
优点:
1.会让AI更灵活(有随机数)
2.AI的决策是自我行为不是被动行为,超出设计师想象
缺点:
1.复杂游戏难以定义胜负,以及决策对胜负的影响
2.计算的复杂度很高

MCTS不适用于所有游戏,适用于Turn-base(你一下我一下)以及每个动作有明确输出结果(回合制战斗游戏,输出一个技能,可以精准计算对方会被打掉的血,会改变什么状态)的游戏,也可以结合其他方法作为子系统存在

Machine Learning Basic

在这里插入图片描述
在这里插入图片描述
本质是分类器,如图像识别
在这里插入图片描述
本质是聚类 Clustering,如用户画像构建
在这里插入图片描述
减少了案例 unlabeled data 的输入,主要是小样本学习的方向
在这里插入图片描述
没有监督也没有判断机制告诉对错。通过奖励让ai自我优化迭代形成自己的策略
在这里插入图片描述
本质是一个尝试+搜索 Trial-and-error search,比较难的一件事是奖励是Delay的 Delayed Reward。老鼠走到终点获得奖励不是延迟的,不是每走一步就触发奖惩机制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

马尔科夫决策过程

当我在当前策略的State s的情况下,我去take一个Action a,到达一个新的状态的 possibility的多少,是一个随机变量

Pollcy:策略黑箱, 也是AI系统的核心,输入一个状态时,输出所有可能动作的概率,也是各种模型优化的核心

Total reward:γ用来平衡短期收益和长期收益,往后的每一步操作之后的状态获得的奖励通过与γ相乘来调整概率

在这里插入图片描述

Build Advanced Game AI

在这里插入图片描述
过去的算法都是有人类设计的,不会超过人类的预期,机器学习让游戏的行为有无限的可能
在这里插入图片描述
重点是对于游戏 Observation 的构建,也就是定量化的描述游戏状态,然后反复优化Policy
在这里插入图片描述
state:对世界状态的描述
action:电脑ai要指挥游戏做什么
reward:设置动作的奖励,最简单就是胜负的判断
NN design:构建神经网络的拓扑结构
Training Strategy:训练策略
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从下往上看
1.通过各种游戏内的数据输入,Scalar Features, Entities, Minimap等
2.通过不同的神经网络类型,MLP, Transformer和ResNet
3.把所有结果再整合到LSTM里
4.结果是Unreadable的,完成Encode
5.Decode就是把encode的结果翻译成人类可以理解的
在这里插入图片描述
多层神经网络:处理定长数据
在这里插入图片描述
卷积神经网络:处理各种图像
在这里插入图片描述
处理大量时间上不定长的数据
在这里插入图片描述
模拟反馈和记忆,多次使用的策略会被记忆,同时有记忆在遗失在这里插入图片描述
在这里插入图片描述
对于复杂游戏来说不能直接从零开始训练,因为收敛的速度会非常慢,首先使用人类的数据训练一个基础,相对较好的模型,通过Supervised learning开始
KL Divergence 数值差熵(两个分布之间的差会形成一个熵),用于衡量两个概率分布的距离,差距熵越小代表着两个概率分布越相似,用于衡量AI学习人类操作到了什么地步
在这里插入图片描述
在这里插入图片描述
MA Main Agents :每天自己和自己打35%,然后和LE和ME打50%,最后和过去的MA打15%
LE League Exploiters :专门寻找所有Agent的弱点 Weakness
ME Main Exploiters :专门寻找主分支MA的缺点
一直独自Training的AI虽然会越来越强,但是会使得能力专一化(过度拟合)
在这里插入图片描述
有大量玩家数据的情况下建议首先SL(监督学习),因为可以快速收敛,如果数据量足够大并且足够好,ai可以达到一个不错的水平
在这里插入图片描述
增强学习上限非常高,但是训练非常复杂,成本非常高在这里插入图片描述

在这里插入图片描述
如果奖励足够密集,每一步或没几下就能判断奖励结果,用增强学习,容易训练出一个好的ai,如果是探索解谜类,一个动作和结果非常的不关联,增强学习的效果比较难在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文研读|Protecting Intellectual Property of Deep Neural Networks with Watermarking

目录 论文信息文章简介研究动机研究方法水印生成水印嵌入版权验证 实验结果有效性(Effectiveness)高效性(Converge Speed)保真度(Functionality)鲁棒性(Robustness)Anti-剪枝攻击&am…

三十二、【进阶】hash索引结构

1、hash索引结构 (1)简述: hash索引,就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。 (2)图示: 2、hash索引结构…

爬虫编程语言

文章目录 基本数据类型bytes类型python数据类型转换 python运算符python数字数学函数随机数函数三角函数数字常量 python字符串python访问字符串中的值python字符串更新python转义字符python字符串运算符python字符串格式化f-stringUnicode字符串python的字符串内建函数 python…

Unity可视化Shader工具ASE介绍——3、ASE的Shader类型介绍

大家好,我是阿赵。这里继续介绍Unity可视化Shader编辑插件ASE的用法。   上一篇介绍了节点的输入输出节点。这一篇来介绍一下不同的Shader类型的区别。 一、修改Shader类型 之前介绍创建Shader的时候,曾经说过可以选择Shader的类型。 其实这个类型是…

从入门到精通,30天带你学会C++【第七天:for循环和while循环以及数组的学习】(学不会你找我)

目录 Everyday English 前言 数组 数组的概念 数组的定义 数组的下标 for循环 循环是什么 基本格式 多重循环 while循环 do-while循环 总结 Everyday English To shine , not be illuminated. 去发光,而不是被照亮。 前言 好久不见&#xff0c…

Js基础——事件流

引入 当浏览器发展到第四代时( IE4 及 Netscape Communicator 4 ),浏览器开发团队遇到了一个很有意思 的问题:页面的哪一部分会拥有某个特定的事件?要明白这个问题问的是什么,可以想象画在一张纸上的一组…

stable diffusion API接口 + 扩展接口

文章目录 概要流程页面接口调用展示txt2img接口AutoDL设置扩展接口 概要 调研Stable Diffusion二次开发,查看接口文档。 基于AutoDL算力服务器,直接安装部署,非常容易上手,部署教程放下面了。 部署教程 流程 页面接口调用 页面…

1.3.2有理数减法(第一课时)作业设计

【学习目标】 1.理解有理数减法法则,能熟练地进行有理数的减法运算. 2.感受有理数减法与加法对立统一的辨证思想,体会转化的思想方法.

基于Springboot实现社区维修平台管理系统演示【项目源码+论文说明】

基于Springboot的社区维修平台管理系统演示SSM 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识…

c++解压压缩包文件

功能实现需要依赖相关头文件和库文件&#xff0c;我这里的是64位的。需要的可以在这下载&#xff1a;https://download.csdn.net/download/bangtanhui/88403596 参考代码如下&#xff1a; #include <zip.h> #pragma comment(lib,"libzip.lib")//解压压缩包 /…

大数据概述(林子雨慕课课程)

文章目录 1. 大数据概述1.1 大数据概念和影响1.2 大数据的应用1.3 大数据的关键技术1.4 大数据与云计算和物联网的关系云计算物联网 1. 大数据概述 大数据的四大特点&#xff1a;大量化、快速化、多样化、价值密度低 1.1 大数据概念和影响 大数据摩尔定律 大数据由结构化和非…

【unity】制作一个角色的初始状态(左右跳二段跳)【2D横板动作游戏】

前言 hi~ 大家好&#xff01;欢迎大家来到我的全新unity学习记录系列。现在我想在2d横板游戏中&#xff0c;实现一个角色的初始状态-闲置状态、移动状态、空中状态。并且是利用状态机进行实现的。 本系列是跟着视频教程走的&#xff0c;所写也是作者个人的学习记录笔记。如有错…

Decorator

Decorator 动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c; 由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b; 并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的组合&#xff…

Ubuntu右上角不显示网络的图标解决办法

一.line5改为true sudo vim /etc/NetworkManager/NetworkManager.conf 二.重启网卡 sudo service network-manager stop sudo mv /var/lib/NetworkManager/NetworkManager.state /tmp sudo service network-manager start

全网最详细的本地搭建GitLab代码仓库教学

大体的步骤 本地安装VMware虚拟机。然后再虚拟机上安装CentOs7镜像系统。在Linux中安装GitLab-Ce。在Linux中安装GitLab-Runner在自己搭建的GitLab上面创建一个项目&#xff0c;然后拉取到本地然后提交之后实现自动化部署。 步骤一 这一步骤我在之前我的安装Redis文章中有讲解…

关于Jupyter notebook 创建python3 时进去不能重命名问题及不能编程问题

首先写这篇博客时&#xff0c;已经被这个问题折磨了三天&#xff0c;看了很多博客&#xff0c;其实解决这个问题的关键就是要么没有下pyzmq或者等级太高&#xff0c;要么等级太低&#xff0c;首先我会按照我思路来。 问题如图&#xff1a; 1.自动换行 2.不能重命名 我的解决办…

学习记忆——数学篇——案例——算术——绝对值三角不等式

第一步&#xff1a;记住公式&#xff0c;绝对值差&#xff0c;和差绝对值&#xff0c;绝对值和 第二步&#xff1a;记住口诀&#xff1a;取等条件&#xff1a;中间相加取等号&#xff0c;左异右同零取到&#xff1b;中间相减取等号&#xff0c;上面符号方向调 题型记忆法 歌诀记…

【Cents OS7 安装 Docker以及DockerCompose】

文章目录 0.安装Docker1.CentOS安装Docker1.1.卸载&#xff08;可选&#xff09;1.2.安装docker1.3.启动docker1.4.配置镜像加速 2.CentOS7安装DockerCompose2.1.下载2.2.修改文件权限2.3.Base自动补全命令&#xff1a; 3.Docker镜像仓库3.1.简化版镜像仓库3.2.带有图形化界面版…

SLAM从入门到精通(ROS和底盘Stm32的关系)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学过Ros的同学&#xff0c;一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话&#xff0c;还会知道slam、move_base、…

好物周刊#10:算法学习必备

https://cunyu1943.github.io https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. ChatGPT-Midjourney 该项目基于 ChatGPT-Next-Web 开发&#xff0c;只要拥有自己…