噫語系列。。。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 系統,都是「專家系統」,只擅長某一個特定的領域,並且它學習到的東西也沒法應用到別的地方。
嗯。。隨便寫寫。。