zoukankan      html  css  js  c++  java
  • 机器学习能在游戏开发中做什么

    机器学习适合做什么

    机器学习当前在很多领域,都取得了相当巨大的进步。从应用领域来看,机器学习在“信息识别”、“数据预测”、“复杂控制”几个方面,展现出很大的能力。

    • 比如“信息识别”领域,依赖于大数据的训练,现在的图形识别已经非常完善了,手写数字的识别仅仅是类似Hello World一类的简单应用;

    • “数据预测”领域百度对于世界杯的预测达到令人吃惊的100%准确率,将来这种技术在各种据别历史数据的预测应用上,将有长足的发展,比如广告的推荐系统、财经数据的决策系统等等;

    • “复杂控制”方面,自动驾驶的技术经历了十几年的研究,剩下的似乎只有识别硬件的成本问题了。

    然而,以上这些技术,相当一部分来源于“大数据”,或者叫“监督学习”的训练,也就是说,实际上这些机器的智能是来源于人类积累在数据中的“智慧”。机器仅仅是在“模拟”人类的某种思考判断,而这种模拟采用的更多是类似“查询搜索”的方法。——不过说回来,人类的经验几千年来,都是记录在书本上,需要用另外一个大脑来学习,然后才加以运用;而机器学习跳过了人脑这个阶段,从经验直接到应用,确实是一个伟大的进度。可以增加一点想象的是,以后所有“需要经验”的事情,已经是可以用电脑来代替了,比如医生看病。不过那些需要“创造”或者“发现”的事情,比如艺术创作,理解和发现客观规律,还是需要人脑。所幸是机器学习在“无监督学习”领域,能协助人类更好的去理解和发现世界的特征,这个方面也是非常有用的,但现在似乎应用领域并不非常活跃(也许是我的了解还不够广泛)。

    [机器学习预测房价的例子]

    AlphaGo在围棋领域战胜人类,给了我们很大的想想空间,我们会想:机器是否也能像人类一样理解游戏规则,从而玩游戏呢?我个人的理解,实际上现在还是不行的。如“监督学习”的模型下,机器只能通过大量的人类的“经验数据”,来模拟人类的游戏行为,但无法独立做出判断和思考;如果使用“深度学习”,确实会有一种“超越人类”的错觉,但是无法忽视的是,“深度学习”需要一种高度抽象,模拟游戏胜负规则的公式,来指导机器的自我对弈。在围棋、象棋这类已经发展了数千年的游戏领域,“子力计算”等游戏模式经验,已经能相当准确的描述这个游戏了。而对于其他的一些比较复杂的游戏,要高度抽象的用数学模型来概括一个游戏,还是需要人类大量的思考。这也是为什么深度学习在一些规则简单的游戏中,还能表现的比较好,而另外一些比较复杂的游戏上,就需要大量的人工干预才能稍微像样的原因。

    [AlphaGo是用了人类的游戏经验的]

    所以我认为,机器学习在现阶段,最成熟的应用,是利用“监督学习”的方法,对于大量人类的“经验”大数据进行模拟思考的方面。这个方向处理用于“理解”客观世界,也可以“模拟”人类对于复杂环境的行为,这两者是几乎一样的。

    游戏角色AI在开发上的困境

    机器学习很容易让人联想到在游戏中的角色AI。一直以来游戏中NPC或怪物的AI问题都是一个游戏比较难解决的问题。比如游戏的角色行为过于单一,让玩家乏味;或者游戏角色容易因为BUG陷入一些卡死的境地。为什么游戏角色AI会有这些问题?大体不外乎几个原因:其一是描述一个完整的AI非常的繁琐,环境越复杂,AI逻辑流程越容易出现漏洞;其二是为了游戏角色AI的目标非常多样化,很多游戏角色并不是越“聪明厉害”越好,而应该是作为一个“演出系统”,来让玩家体验游戏世界的工具。

    [一套简单的游戏行为,就需要一个复杂的行为树]

    现在比较流行的游戏角色AI开发方法,无外乎“状态机”和“行为树”两种,而这两种在数据结构上,是可以无损转换的,也就是说本质上是一样。这两个技术,都是为了帮游戏开发者,更准确、更完整的表述AI逻辑判断的数据结构。但是游戏本身的逻辑复杂度,还是要由程序员一段段的去理解,然后才能编写成程序。在另外一些游戏中,会用到一种叫“面向目标的路径规划”的技术,实际上是“状态机”的一种升级技术:利用A*等寻路算法,来自动生成“状态”之间的逻辑路径,而无需一开始就以人工输入的方式全部输入进去。这种技术因为是在运行时产生状态机图,所以表现出来的行为会更加丰富和准确,较少会陷入一些“没有事先预测到的状况”从而陷入逻辑卡住的情况。

    但是不管状态机和行为树如何努力,从开发者角度来说,都必须通过人脑来抽象和理解游戏世界的规则,和各种可能的情况。加上游戏AI很多时候是需要一种“表演”效果,要用代码和逻辑去“模拟”出一场表演,是相当繁琐的工作量。(如果以深度学习技术来说,实际上也无法做出这种表演效果,因为这种表演的逻辑行为,往往不是“最优”的选择,甚至是相当“差劲”的)

    所以,归根结底,游戏中的AI的困境,是由于工作量的原因造成的。由于我们没有很好的生成“游戏行为”的工具,导致我们的游戏行为往往不够好。

    机器学习如何应用在游戏角色AI的开发上

    在机器学习领域,学习人类的行为,并且应用于合适的场景,是“监督学习”下最常见、最成熟的技术之一,经典的应用就是“自动驾驶”。相对于自动驾驶需要昂贵的雷达设备,才能“感受”现实世界,在游戏中所有的数据都唾手可得,这种监督学习的应用更是没有任何障碍。

    假设我们的游戏,已经把基本的游戏规则开发好,游戏场景也已经布置好,剩下的就是如何置入游戏角色。就好像一部电影,场景、道具都已经到位,摄像机和剧本都已经准备好,那么剩下的就是演员的表演了。按照以前的做法,我们需要用复杂的状态机系统,去操控那些游戏角色演出,而现在,我们可以让策划(或者其他开发人员)直接去操控游戏中的角色,去真实的以游戏的操作行为,去让游戏角色做出演出行为,而机器学习的程序,就好像录像机一样,可以通过记录我们操控的角色的行为,去学习如何模仿我们的操控。当我们表演的足够丰富后,机器学习就可以完全取代人工的操控,做出一些和预设相同的行为特征。

    如果我们的游戏能像上面的方法去开发角色AI,我们将会在游戏AI行为工具上,得到一次巨大的进步。我们不再需要通过人脑去抽象和转化游戏的“表演”,而是可以直接去“扮演”,这样除了可以节省大量的“程序员”的开发工作外,对于调试AI行为,表达更丰富的角色行为特征(性格),也是有相当大的好处。

    [游戏开发在很多方面已经越来越接近电影制作]

    显然,如果完全用“游戏”的形式来取代AI开发,即便在机器学习的支持下,可能还会有很多不足之处,比如“人工表演”可能无法覆盖所有的游戏场景环境。但是只要能节省下工作量,我们还是可以利用旧的状态机技术,来定义比较“完整”的逻辑环境,弥补那些可能存在的漏洞。不过我相信,随着对游戏测试的深入,机器学习会能更快更好的应对这些逻辑漏洞,毕竟“玩”几把游戏,比用写代码然后调试,要快的多。

    游戏角色AI的业务价值

    现在的成名游戏中,确实有那么一大批是似乎对游戏角色AI“没有必要性需求”的,比如我们常见的MOBA类游戏。在棋牌类游戏中,我们也不太希望用一个厉害的AI让我持续的输钱。但如果设想一下,如果我们的策划能比较低成本的生产“AI”,那么我们的游戏就会脱离“玩具”的层面,变成一种可以“表演”的产品。我们常常说IP对游戏的重要性,而真正能体现出IP的,往往是故事体验,这就需要一套很好的“表演”系统。

    从另外一个角度说,如果我们的游戏除了精彩的PVP内容,还有很多优秀的PVE内容(所谓的单机体验内容),那么玩家也许会慢慢倾向对我们所生产的PVE内容来付费。从电影市场这么多年的发展来看,优秀的“表演”还是会有很大的市场的。从知识产权保护的角度来看,游戏玩法很容易被抄袭(PVP主要是玩法),但PVE内容却很容易得到保护。除了利用海量用户去激活PVP的收入,在PVE方面的开发,也许是一个新的市场空间。(从《阴阳师》这类产品能明显感受到这股市场的潜力)

    [巫师3不仅仅是一部互动电影,也是一个玩法优秀的游戏,更是一个超级IP]

    总结

    如果我们能利用机器学习技术,开发出更通用的游戏角色AI工具,那么可能让游戏拓展出新的PVE游戏市场,对于游戏IP的输出也有非常明显的作用。

    本文来自 韩大 微信公众号

     

    相关阅读

     
    此文已由作者授权腾讯云技术社区发布,转载请注明文章出处
    原文链接:https://cloud.tencent.com/community/article/608239
    海量技术实践经验,尽在腾讯云社区! https://cloud.tencent.com/community
     
  • 相关阅读:
    LeetCode 109 Convert Sorted List to Binary Search Tree
    LeetCode 108 Convert Sorted Array to Binary Search Tree
    LeetCode 107. Binary Tree Level Order Traversal II
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 103 Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 104. Maximum Depth of Binary Tree
    接口和多态性
    C# 编码规范
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/7831329.html
Copyright © 2011-2022 走看看