作者ddavid (谎言接线生)
看板GameDesign
标题Re: [请益] 关於一些游戏的AI
时间Thu Nov 29 08:43:16 2012
※ 引述《LaPass (LaPass)》之铭言:
: 围棋全部都是战略成分
: 就连局部攻杀,也要考虑做出来的厚势的方向
: 光凭这一点就会让AI陷入很大的弱势
: 然而,更严重的问题是,围棋中的不确定性太高
: 一块棋子死在那边,有时候是死活不定的
: 死的棋搞不好会被下成活的,反杀另一边
: 在围棋的小区域战斗来讲,AI很强,因为AI会用暴力去算
: 但中、大区域的死活问题AI就常常出错
不对,围棋的问题是算不完,而不是AI无法懂「厚势」。围棋中很重要的一件事
情是,厚势本身并不能取得胜利,它是要被拿来攻击对手弱棋,直到你真的利用了这
个厚势取得了实利的那一刻它才真的得利──有没有注意到重点?最终的利益仍然是
目数或子数。只要AI算得清後续所有下法赚取的目数或子数,AI就能下得出运用厚势
的棋。
围棋的难度在於其评估函数超级简单,可是就是很单纯地复杂度太高算不完。当
然,这是就最基本的决策树展开解决的方式而言。因为算不完是注定的,所以会有采
用不全依赖穷举而是尝试模拟人类思考方式的研究方法,但是那做的就是把评估函数
复杂化模糊化然後可能带有人类主观并可能错误的解释,去换取运算复杂度的下降。
:
: 另一个不确定的因素是
: 「兵团」的区分方式
: 围棋在这点,跟其他棋类有很大的差别
: 也跟SLG有决定性的差别
这个地方,我觉得你对於战略游戏、围棋在AI上的思考方向有深深的误解,是什
麽让你觉得战略游戏完全不需要考虑军团,而又是什麽让你觉得围棋非得考虑军团的
?
: 在围棋的世界中
: 单一一颗「棋子」的死活不重要
: 「兵团」(一块棋子)的死活才重要
为什麽你会觉得SLG、RSLG或RTS之中单一单位的死活比整团兵或整个战局重要呢
?我不知道你有玩过多少SLG、RSLG或RTS,我们就拿Starcraft来讲好了,星海中多
得是把狂战士冲进对手地雷坦克阵送死吸引炮火,但却能换取整个会战的胜利。又或
是甚至刻意正面佯攻比对手多损失一些兵力,可是换取敌後方空投成功破坏经济,导
致对手短期内空有比你略多的兵力却没法一波攻下你,长期经济却输掉了的思考。
: 但区分兵团就可以让AI很吃力
: 尤其是混乱的局面
: 有时候会看到AI连这点都会误判
: 这对人来说是很简单的能力
: 但是AI对这方面很弱
就是因为在这方面很弱,所以在战略游戏上的AI才也因此一样很弱,正是因为战
略游戏同样需要这样的思考。不要说别的,光是要AI去对地型分析,去看出所谓兵法
中「以一击十,莫善於厄;以十击百,莫善於险;以千击万,莫善於阻」的厄地、险
地及阻地,决定出会战地点,而且分析出最适合兵种的分配,这就不是单一兵种的围
棋能够相较的困难度了。尤其所谓厄地、险地及阻地的定义还会随着游戏设定及双方
拥有兵种的不同而随时有大幅度的变化(比如,当你的空军优於对方,那地面的狭道
对你来说就是最适合迎击的险阻。然而刚刚你为了空投破坏对方经济送掉了一些空军
失去空优,结果这个险阻之地反而可能一变而成对方有利的地点了)。
: 总而言之,在围棋中要面对的是很模糊的计算
: 这跟SLG跟其他棋类是很明显的差异
: 讲白一点,围棋的规则刚好压在AI弱项上
这个结论刚好跟我所知是完全相反就是XD
这样讲好了。围棋棋盘要是小一些算得完,它就是一个要算久一点的井字棋而已
,规则上并没有任何不利於AI计算的点。就算是全知型的战略游戏也一样,只要能计
算完所有可以利用的手段之後的发展,那它也一样是个要算久一点的井字棋而已。
但战略游戏比较机车的是其中还有带战争迷雾的类型,这一类游戏从根本上就无
法穷举解决,这种游戏才会被迫模糊计算,才是比较所谓「规则压在AI弱项上」的类
型。因为有未知的部分,所以无论计算量再小,AI都无法保证100%解决问题,迷雾中
永远有惊喜。
--
「珍贵的回忆?还不是跟梦一样虚幻不实的东西?你想要什麽样的回忆,我帮你
做出来啦!」
--艾蜜思,谎言事务所实现使者
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.24.199.141
※ 编辑: ddavid 来自: 114.24.199.141 (11/29 08:54)
1F:推 LaPass:你是不是不了解围棋中的「兵团」的意思? 11/29 09:25
2F:→ LaPass:连在一起的棋子的死活是一起算的 11/29 09:25
3F:→ LaPass:那是围棋中的专有名词 11/29 09:26
虽然我很想说这可能是过度狭义解释才造成你以为战略游戏没有这种概念。我举
个简单的例子:战略游戏你兵活下来再多,你的主要胜负目标失败了,你整体就失败
了。也就是说,你的整体原本就是可以视为一个总军团,里面单兵的胜负永远不如总
军团的胜负重要。
而一个总军团为了达成总目标,他会发展出许多的子目标需要完成,而为了完成
每一个子目标就会分出许多子军团。每一个子军团也是一个整体,里面的单兵输了没
关系,子目标完成就是该子军团整体的胜利,而子军团所有的成果之总合就会决定总
目标是否完成。但是,无论再怎样用这种「整体」的方式去概念化、模糊化,最终的
胜负判定终究是可以从细微的每一个单位之行动(用围棋来说就是每一手)的累积来
推算。围棋确实是一整块相黏棋的共生共死,但每一块棋都是一手一手下出来的,每
一个turn你要推算的永远都只有一手,虽然为了推算这一手你可能得算到整个棋盘、
算到後面的无数手。
4F:推 LaPass:但问题是AI对围棋中的军团认定是有问题 11/29 09:38
其实我真的不太懂LaPass你的疑问在哪,这样讲好了,如果围棋棋盘就只有4x4
,它规则都一样,你会觉得它是算不完的东西吗。只要穷举了所有可能,势的概念基
本上是自然产生的,到最後胜负评估就是目数或子数,相黏棋的共生共死是基本计算
胜负所需的规则,本来就会算到。
你说的军团认定,应该是指发生在对局中,某些还没有真正连起来的棋,到底是
否要预设它们将来为相连的判断吧。但这问题还是一样,就是因为盘面太大算不完的
关系而已,只要算完你自然就知道之後双方怎麽下,某些棋是否会相连,而造成的胜
负又是如何,评估函数根本没有为此而变复杂。是因为算不完,才被迫用人为复杂化
评估函数的方式来减少运算量,而不是规则上评估函数就很复杂,这一点的因果不要
弄反了。
讲到那个战略游戏的军团观刚好是我有一段时间在研究的东西,虽然我最後也没
研究出很直接可以用的General Framework就是了......要想用单一架构 + 规则
Plug-in整合所有类型的战略游戏实在难度有点高XD
某些东西穷举得完那还罢了,但很多光是最小子军团的子目标就穷举不完了,我
就是实际做过了,要说这东西比围棋简单我根本觉得不可能啊,除非是规则非常特化
而地图非常小才可能。
事实上这跟以前在这版也谈过的,MTG的General AI处理是大同小异的问题,虽
然一个是战略游戏一个是纸牌集换式游戏,可是其中大概念其实非常相似。
5F:推 LaPass:其实我之前也过泛用型的策略AI这种事.... 11/29 10:01
6F:→ LaPass:那个等下讲,先讲战略游戏的AI的问题..... 战略游戏一般都 11/29 10:02
7F:→ LaPass:是用场的观念下去算,而不该用穷举的吧? orz 11/29 10:02
我想这就是你误解的地方了,你把「现有的」那些烂SLG AI当成是SLG AI的一般
性解法,我事实上可以告诉你大多数的战略游戏AI根本连什麽场不场的都没有考虑,
几条if-else经验法则就打发掉了,复杂一点的像Starcraft的也就是给它一些事先写
好的套路,下去看目前状况大概适合哪一种就照经验法则run下去罢了。这些根本不
是去解问题,是人先解好了问题(而且用了很烂,其实根本没有解开的解法)写好给
电脑直接用。
这当然是一种AI,但是解题的责任却其实还是在人身上,而且没有超出事先写好
规则以外的随机应变能力。
8F:推 LaPass:连围棋这麽小的棋盘都会用场的观念下去计算了.... 那种非棋 11/29 10:08
9F:→ LaPass:格的场地不用场的观念下去算是要怎麽知道地域....= = 11/29 10:10
我直接这样讲啦,战棋就是棋类,只要你的资讯是全公开的情况,你拿来解棋类
的演算法就是拿来解它们的演算法,然後因为选项更多盘面更大所以复杂度更高更算
不完啦,而游戏制造商不可能这样干,所以随便写些简单规则就上了。你玩SLG总也
想过「要是我来控对面的部队,我军根本就死无葬身之地嘛」这种事吧XD
只要能穷举完成,根本不需要场的概念。我不知道你对这点有多少理解,要是你
没有这个概念,我们根本没法继续讨论下去,因为你说的AI其实都已经是在谈人为事
先解了部分题、被干涉过的版本了,而不是全然自行运算 + 学习的AI了。
10F:推 LaPass:这点我同意..... 所以我才会觉得那种几万*几万的地图不用 11/29 10:14
11F:→ LaPass:filed下去算很奇怪.... 11/29 10:14
这种人为干涉加入概念的AI,其实比的都是人类事先解题的功力,比如说假设某
个时代电脑超慢连井字棋都算不完,可是有人就硬是找出了规则说先手下中间一定可
以下到至少不输,那结果这个AI并不是本身算得好,是因为那个人提供了一个保证
Dominate此游戏的知识。
现在围棋只是因为硬算算不完,而就算人为也没有人能提供100% Dominating的
知识,所以才有一直做下去的空间。战略游戏亦同,只要穷举不完 + 没有人可提供
Dominating知识,那难度是不会输给围棋的。现在说围棋用场啊、用连通(某个大学
学长就做这个)、或是分析棋谱啊之类的,也都是眼前人脑能够想出来可用的一些被
认为相对可用的概念,但哪一天要是哪个天才提出了更好的概念,场说不定就直接被
丢弃不用了(只是假设)。这些人为概念直到真正有决定性之前,没有一个是绝对必
要元素的。唯一绝对必要的元素只有由基本规则直推得到的标准评估函数而已。
12F:推 LaPass:同意 11/29 10:46
13F:→ LaPass:我当初是直觉认定不会有人把策略游戏的规则搞到这麽复杂, 11/29 10:48
14F:→ LaPass:才会认为围棋会比较难 11/29 10:50
15F:推 cowbaying:回个文好吗? XDD 11/29 10:54
16F:推 cowbaying:以围棋来说 我相信人脑也不会去穷举 每一步是有时间 11/29 10:58
17F:→ cowbaying:限制的 但是用超级电脑来穷举 我是觉得可行的 11/29 10:59
18F:推 LaPass:人脑在判断局部的话的确是穷举,不过会先用直觉去挑几个看 11/29 11:00
19F:→ cowbaying:ddavid有一点我不同意 每个回合要计算的是2手 对面会 11/29 11:01
20F:→ LaPass:起来「有味道」的棋步去算 11/29 11:01
21F:→ cowbaying:怎麽下 会影响到自己怎麽下 11/29 11:01
穷举就是将对方的所有回应也都考虑以後挑最佳呀,考虑一下井字棋你人脑怎麽
穷举的就OK了,不管怎麽下,至少九手之後一定会导向一个结束的盘面,所有可能性
都有了以後再回推是不是有一手不管对方怎麽应都能至少通往一种自己赢/不输的盘
面即可。反过来说,如果我方所有着手,对方的应手都能导向至少一种你输的结果,
表示从目前开始下的话,在双方可以下出最佳着手的前提下,你已经败定。
而所谓一种游戏被穷举解决掉,就是这个穷举已经算完所有可能性,可以直接回
推到第一手就确定双方最佳情况下的胜负了。和局也是可能的,比如在没有特别限制
什麽禁手的西瓜棋(
http://taiwanpedia.culture.tw/web/content?ID=24221)来说
,最佳解应该是双方和局吧(以前有做过,不过没有真的去穷举完,所以我只说「应
该」,虽然就规则上看是无禁手的情况双方永远都有不被吃子的着手存在)。
22F:推 LayerZ:我觉得可以拿LoL的AI来讨论,跟SLG比起来相对简单(只需要操 11/29 11:15
23F:→ LayerZ:做一个单位) 但是光是前方一个敌人走进草丛要不要追击 11/29 11:16
24F:→ LayerZ:可能就要算整场的概念了.. 11/29 11:16
25F:→ LayerZ:AI毕竟还是人脑写出来的,要计算也只能往写的人能预测方向 11/29 11:16
26F:→ LayerZ:我个人觉得AI其实是将人脑推往无穷计算的极限而已.. 11/29 11:17
27F:→ LayerZ:这也是游戏能够做到的程度,要做到自然学习的AI 11/29 11:18
28F:推 LaPass:我到是很想教AI自己去想去学习..... 11/29 11:19
可以找一下Data Mining跟Maching Learning领域就在尝试干这回事XD。当然它
们都可以说是原本AI领域的延伸/变体就是,虽然严格来讲也是有不同之处啦。
29F:→ LayerZ:背後的运算跟资料库就不是一般游戏能够负荷的了..虽然特意 11/29 11:19
30F:→ LayerZ:往这方向做也算一个特殊的游戏XD 11/29 11:19
31F:→ LayerZ:自然学习...其实我对AI没特别研究啦,在我认知中自然学习 11/29 11:21
32F:→ LayerZ:需要储存大量样本 然後依造一个演算法去决定最後的结果 11/29 11:22
33F:→ LayerZ:那个演算法也是人写出来的不是嘛? 11/29 11:22
比较General的Maching Learning演算法基本上都没有针对游戏规则上的偏颇就
是了,主要是不针对游戏规则的一些机率假设啦。
至於需不需要一个资料库其实是看演算法,有的把Model学出来後只要存Model架
构就好,大多数资料可以丢掉。再举井字棋为例,当你已经学出先手下正中必不输时
,我方先手下另外八个位置的资料就一点都不用存了......类似这种概念。
34F:→ ddavid:整个推文推到那麽长其实是因为感觉要是刻意每有一点想回就 11/29 12:18
35F:推 LayerZ:所以是用人脑写的演算法去分析要储存的情报噜.. 11/29 12:18
36F:→ ddavid:回文,感觉好像会很有战文的感觉,其实大家都只是分享意见 11/29 12:18
37F:→ LayerZ:就回阿 还能针对不同细向讨论XD 11/29 12:19
38F:→ ddavid:,只是不知不觉想讲的讲完就你看看我的推文已经这麽大了XD 11/29 12:19
39F:→ chchwy:拜托回文.... 这一长串我连看都不想看 11/29 13:04
40F:→ chchwy:这种推文法根本就虐待眼睛 11/29 13:05
41F:→ chchwy:版主要不要处理一下 11/29 13:07
42F:推 cowbaying:这情况「无法」处理 XDDDDDD 11/29 13:15
43F:→ ddavid:需要我帮忙把推文内容色码修掉吗?也许会好一点XD 11/29 13:16
44F:→ ddavid:剩下就只能希望後续版友(包括我)用回的这样XD 11/29 13:16
45F:→ cowbaying:正常的讨论还是用回文的吧 不然容易失焦 11/29 13:17
46F:→ ddavid:主要是有人用推文回应我就很自然推回去......就......XD 11/29 13:17
47F:推 cowbaying:建议你把推文分段 因为这是你的文章 你回应可以用修文 11/29 13:18
48F:推 cowbaying:的方式巧妙的把文章隔开 11/29 13:18
49F:→ ddavid:我把我自己的推文整理一下好了 11/29 13:19
※ 编辑: ddavid 来自: 114.32.156.172 (11/29 13:46)
※ 编辑: ddavid 来自: 114.32.156.172 (11/29 13:53)