作者ledia (contemplation)
看板GO
标题Re: [问题] 电脑棋力的问题
时间Sun Apr 17 22:43:39 2005
※ 引述《livedeader (欢迎找我下棋)》之铭言:
: 我不大会下围棋
: 但至少懂些基本规则
: 几乎大部分的棋类我都会
: 西洋棋象棋五子棋围棋等
: 为什麽围棋的电脑AI最难写?
: 因为对围棋不甚了解所以特来请教
: 如果可以我对象棋最为熟悉
: 可以拿象棋跟围棋比较一下吗?
: 谢谢回答
写程式解决这些问题的时候
通常都是用搜寻的方式, 简单的说是穷举法
方法就是穷举所有的步数
然後在一定的深度时停下来算分数
最後把结果一层层往上传
(每个节点会选对该方有利的走法)
在使用搜寻方法解决棋类游戏时
通常都会有几个共通的难题
1. 可以选择的步太多, 穷举不太可能穷举太深
举例来说, 如果平均一方可以有 10 步选择,
那麽搜寻 10 层就要看过 10^10 个节点, 哇! 天文数字.. orz
2. 最後要算分数时, 怎麽把一个盘面的好坏量化成数字
用您熟悉的象棋来说, 比如空头炮好不好? 三子归边好不好?
哪个好? 要给几分才能说明他有多好?
如果让你选, 你可以取得空头炮, 但是对方会三子归边, 你肯不肯?
有时候问题会更复杂, 好几个组合, 要怎麽评分呢?
其他的比较和电脑本身限制相关的我先不提, 光这两点就很头痛了
对於象棋来说, 1. 其实还不会太严重
透过某些对搜寻演算法的改进, 其实仍然是可以做得很好
一来, 象棋的子数就比较少, (和西洋棋一样, 只是格子多了点)
二来, 选择性会随着盘面上的子变少而渐渐减少
三来, 透过一些技巧或是某些 heuristic (我不知道怎麽翻译好 @@")
可以让需要搜寻的盘面数量减少不少
( 如果你有兴趣, 可以看看类似 alpha-beta search 之类的东西
对 AI 熟的话应该就更有概念了 )
再者, 对於 2. 我们可以很清楚知道大致上
一车抵马炮, 一马抵双相之类的概念
同时, 也有很多棋谚也告诉我们了一些评分的概念
虽然有一些还是很难量化, 但是仍然比较有线索可循
在围棋来说, 1. 的问题就非常严重
他的走法选择远比象棋多很多
而且, 我们也没有办法很明确的告诉电脑
到底什麽时候要用什麽定石
什麽时候被冲了要补
什麽时候要手拔
这种整个局势的概念, 不太容易描述成量化让电脑了解
甚至是盘根错节的死活问题
电脑也很难看清楚先後手哪边大, 哪边小
( 是人类都不一定找得出够有效率的算法, 但是电脑得要人类教他算法才会算 )
简言之, 这种选择多又评分难的棋类, 完全是中了前述的两个难题
目前在做电脑围棋的大多采用 pattern match 的方式
把某些紧急一定要处理的 pattern 评分加高
然後局部算出来的结果再合起来看
哪边最急切或是最大场先下哪边
也许还会在紧急的部分定几个关键点去作局部的搜寻
但是这些 pattern match 会有互相矛盾的地方
同时也很难真的把所有情况都概扩
所以遇到电脑资料库里没有的棋形, 电脑就会乱下
( 常常有人说 GnuGo 有时会下得很无厘头的一手, 也许是这种情形也不一定 XD )
把所有棋形都列举出来就能解决问题吗? 显然不是这麽简单
因为你还要决定哪个比较大, 但是有些还要考虑到棋形的组合
总之就是一团复杂...
总而言之, 电脑会看实利, 但不见得会看势力
但是这种势力的概念, 人类一眼就看得出来, 但是没办法讲出个所以然来
只要你越是讲不出个所以然来 (还要很 detail, 告诉电脑个好坏的顺序)
那麽电脑就越不会解决这种问题
象棋程式目前遇到的问题也就是这个
搜寻的深度够其实没有意义, 重点是要知道什麽是真正的 "好" 棋
--
有时候,遗忘,是令人快乐的。什麽时候?当然是有人伤了你的心的时候。
存心伤你的那个人,固然是故意和你过不去,但是被伤了心而耿耿於怀的你
,却是和自己过不去了。所以,记性不好的人,通常会是比较快乐的人,也
是比较不容易被击倒的人。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.55
1F:推 cabon:这篇真炫..给你个M.. 219.81.158.204 04/17
2F:推 ahou:不得不推... 140.119.195.78 04/17
3F:→ ahou:而且遇到坏型 电脑好像顶多就是摆着... 140.119.195.78 04/17
4F:→ ahou:从来没有看过会用弃子整形的 140.119.195.78 04/17
5F:→ ledia:两种棋我都只是入门,对程式比较了解,有说错什麽 140.112.30.55 04/18
6F:→ ledia:就要请大家补充了 ^^; 140.112.30.55 04/18
7F:推 alexan:heuristic 可以翻 "策略性" 61.228.59.236 04/18
8F:推 Charon:heuristic 我觉得翻成"直觉"比较好 140.116.247.2 04/18
9F:推 alexan:heuristic 在这边的意思是只针对以上的问题,并没 61.228.59.236 04/18
10F:→ alexan:有固定的解法可用,只能针对某些特殊的case写出符꘠ 61.228.59.236 04/18
11F:→ alexan:合的"策略性"演算法 61.228.59.236 04/18
12F:推 Charon:嗯嗯,这样子应该是比较好的说明 ^^ 140.116.247.2 04/18
13F:推 irenechien:超级赞同你说的话218.174.157.153 04/21