作者etrexetrex (ETREX)
看板GameDesign
标题[程式] 圈圈金字塔的AI逻辑
时间Mon Oct 16 03:20:43 2006
http://www.wretch.cc/blog/et284vu065k3&article_id=4747153
==以下直接贴上网志内容==
AI如果要能够学习,就必须先能储存游戏过程
这个游戏过程要怎麽存呢?
我采用以下的资料结构
图解
1
23
456
789A
BCDEF
我用二进位来表示
*FED CBA9 8765 4321 这是每个二进位所代表的意义
0000 0000 0000 0000 就是全部都没画
0111 1111 1111 1111 就是全部都画掉
这个二进位转成整数介於0 - 32767 之间
而且可以使用 AND (&) 判断某条线是否可以画
例如原先的图是(1246被画) 玩家画掉DEF
0000 0000 0010 1011 0111 0000 0000 0000
那麽这两个值 AND 的结果会是0
既然整数会在0 ~ 32767 之间
就表示这游戏总共有 32768 种情况 (不考虑旋转和翻转)
设计时我比较想做成存 32768 种情况的胜率【胜场数 / 胜场数 + 败场数】
但是要存胜场和败场两个值,或是存一个浮点,比较麻烦
於是我的AI存的是这 32768 种情况的【胜场数-败场数】
原先想用【胜场数-败场数】 不设上下限,但是怕溢位所以还是设一下
後来发现上下限的值越小,AI的反应就会越快
因为数字从最大到最小所需要的场次变少
所以我让AI存的值介於 1 到 -1 之间
选择逻辑是数字大的先随机选
所以如果你跟AI玩,只要AI输了
同一种输法就不太可能出现第二次
大致上是这个样子...
目前想改的部分是AI玩一场之後,会影响到所有翻转、旋转图形的胜负值
有想过将AI存到资料库,并且让玩家连线到网路上的AI
如此一来智障AI就不需要跟智障AI练习了
让所有玩家一起训练AI
还不赖 0.0 (可是我不会写网路程式,我也不会资料库 >.< )
--
无名网志:
http://www.wretch.cc/blog/et284vu065k3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.228.78.254
1F:推 yzugsr:这个game的state数满少的,试试用minimax演算法吧 10/16 19:17
2F:推 etrexetrex:那是什麽 0.0 10/17 01:50
4F:→ PRAM:其实就是一种树的穷举搜寻法, 配合alpha-beta切割法, 可以降 10/17 04:57
5F:→ PRAM:低搜寻的节点数, 减少搜寻时间。 10/17 04:58
6F:推 etrexetrex:我没有用树结构0.0 10/17 23:14
7F:推 chowleft:我想P大并没有要你用树结构的意思在....? 10/18 11:13