噫语系列。。。html
最近在重写个人一个 QQ 群机器人项目,并尝试将它改为更通用的结构,以方便在将来加入对 Wechat 和 Telegram 的支持。数据库
在查资料的过程当中,发现不少人认为一个群内多人游戏,很差写。
仔细想一想,这个东西难不难写,不在群 robot 自己,而在多人游戏这个词上。编程
而后就专门了解了一下这个。游戏编程,和一般的 Web 后端差异很大。
Web 后端不少操做都是无状态的,操做基本都直接和数据库关联。
而通用的 session、验证码等东西,基本都有现成的库可用,并且这些东西只有两个状态,根本不须要去作复杂的设计。后端
可是对于游戏,就不同了。就算只是一个简单的多人文字游戏,也须要维持多个状态:网络
显然游戏编程,须要维护各类状态。状态和行为是核心。根据用户发出的命令,程序须要按状况更改整个游戏中的各类状态。session
按个人想法的话,我须要一个游戏池来存放正在进行的游戏,用群id 来区分各群的游戏。而后每一个游戏就会有一个对象来存放各类状态,全局的和各用户的都放在里边。
一个游戏,就是一个群会话(GameSession),也应该有过时时间。学习
总之,我发现游戏编程,和 Web 后端编程,须要的思想很不同。人工智能
就想到之前的街机游戏,AI 是不可缺乏的一部分:魂斗罗、拳皇、坦克大战、超级马里奥、忍者神龟……这些游戏的 AI 都算是游戏的核心了。设计
对的,我又了解了一下游戏 AI:htm
以上方法都是基于人工编写规则的 AI,并非真正的智能。
要说到真正的 AI,以前最火的莫过于 DeepMind 的 AlphaGo 了。它使用 AI 技术,在围棋领域超越了人类的极限。
由于围棋的复杂度过高,AlphaGo 没法采用与当初征服国际象棋领域的【深蓝】同样的方法:生成全部可能的走法,而后执行尽量深的搜索,并不断对局面进行评估,尝试找出最佳走法。
AlphaGo 使用蒙特卡洛树搜索(Monte Carlo tree search),借助估值网络(value network)与走棋网络(policy network)这两种深度神经网络,经过估值网络来评估大量选点,并经过走棋网络选择落点。AlphaGo 最初经过模仿人类玩家,尝试匹配职业棋手的过往棋局,其数据库中约含3000万步棋着。後來它达到了必定的熟练程度,它开始和本身对弈大量棋局,使用强化学习进一步改善它。
围棋没法仅经过寻找最佳棋步来解决:游戏一盘平均约有150步,每一步平均约有200种可选的下法,[66]这意味着有太多须要解决的可能性。
继 AlphaGo 以后,DeepMind 又进一步打算攻克另外一道难关:星际争霸。这里的最大的难点是不彻底信息, 其次是须要远期计划,另外就是实时性与多主体博弈。
不彻底信息,就是说你没法看到视野以外的状况,那里可能有对方的军队在采矿, 或者大批小兵集结, 这可能与我此刻的决策关系很大, 可是却不为我所知。
这与围棋这样的游戏有着本质的区别, 由于围棋这样的游戏, 即便策略在复杂, 你方和我方的状况都是一目了然的。围棋游戏的复杂体如今策略空间的巨大致使的维度灾难, 然而始终都是你知我知的。
能够说 AI 正在经过游戏领域,一步步走向最终目标:通用的 AI.
1997 年深蓝打败国际象棋冠军卡斯帕罗夫时,就曾引发 AI 恐慌。但是如今 20 多年过去了,咱们发现 AI 的路还很长。
目前已有的全部 AI 系统,都是“专家系统”,只擅长某一个特定的领域,并且它学习到的东西也没法应用到别的地方。
嗯。。随便写写。。