游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6735|回复: 7

四国军旗的人工智能思考

[复制链接]

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-5-11 10:17:00 | 显示全部楼层 |阅读模式
总的来说,我不是特别理解人工智能的许多原则,我也不知道对于四国军旗的人工智能设计该采用哪一原则。就拿那个著名的机器人三定律来讲,我倒觉得有些像搞哲学政治的。

我们首先要给我们的“机器人”定义一个知识体系。先从简单的二人对战考虑,军旗的知识体系由3个部分组成:规则、棋谱和对手。这三个部分的地位不是等同的,其中规则是基础的,客观的,棋谱是外界输入的,或有缺陷,对手是主观的,动态的。我们先要对这三部分进行符号化的描述。

规则包括:棋盘,布局,移动规则,吃子规则,胜利条件。
棋谱:布局,局部行走路线(比如双飞,挡子等)
对手:暂无

对于对手信息,这里暂时不做描述,因为我还没有完全的一个知识体系来考虑,但这部分应该是最重要的体现人工智能的部分。

建立知识体系之后,最重要的就是针对已有的知识体系对现有的行为进行感知和推理。推理就会有条件,原则和结果,从简单的三段论来细化。

如果仅仅只有上面的东西,我想除了一大堆的if之外,不能体现任何的“智能”。所谓智能,必定要在已有的基础上进行学习,不仅包括学习新的知识内容,同时要求学习新的学习方法,因此,“机器人”最核心的内容就是如何学习新的学习方法并应用。外在的表现就应该是随着“机器人”对战的次数增多,“机器人”的难度应该能够“自我”的增加或者降低。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2007-5-11 10:22:00 | 显示全部楼层

Re:四国军旗的人工智能思考

如果用程序来描述,简单的说应该是:
建立基础知识库----利用知识库对现有的认知进行推理----利用知识库分析行为后的结果----将结果存储在知识库中

然后重复。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2007-5-11 11:06:00 | 显示全部楼层

Re:四国军旗的人工智能思考

从感知到行为,最核心的应该是两个问题:
第一,应该走哪一个棋子。
第二,如果第一步已解决,该棋子应该如何走。

首先对于第一个问题,无论是让一个人判断还是让一个机器人来进行判断,都会对己方所有的棋子的状态进行评估,给出一个评估值,就是我们说的权重。权重分为2部分:危险系数和获利系数。
我个人分析定义的公式应该是:评估权重=危险系数*棋子的危险重要程度+获利系数/棋子的获利重要程度。
其中棋子的危险重要程度和获利重要程度,举例来说,司令的危险重要程度很高,而获利重要程度很低,也就是说如果司令和排长遇到危险的系数相同,司令应该先走,如果司令和排长都可以获取优势,排长应该优先走。如果司令获得危险,排长能够获利,那么就要具体计算评估值。
上面的公式只是一个简单的描述。可以换成其他的非线性公式或者让机器人自动修正。相对来讲,危险重要程度和获利重要程度是固定的,也就是来自已有的知识库。而危险系数和获利系数是跟据棋盘描述动态计算的。这只是一个相对的描述,危险重要程度和获利重要程度也可以不断修正变化,危险系数和获利系数换个角度也是来自知识库,也可以说是固定的。

有些棋子可能评估权重很高但有规则限制无法移动。那么我们就要对棋子作二次修正。不能移动的棋子可能对能够对其造成影响的棋子评估值大大的改变。比如,如果你的司令遇到了炸弹,而司令无法移动,则该规则可能对能够飞动的工兵评估值进行影响,从而调动工兵对付炸弹。

实际上,第一个问题解决了,第二个问题也应该得到解决,应为行为的本身也是对棋子的评估,如果你决定了应该移动哪一个棋子,实际上就决定了它应该移动到哪一个位置。那么我们对上面的公式要做相应的修改,也就是说对于每一个棋子,不止一个评估值,也就是说它移动到不同的位置,评估值应该是不一样的。而且该棋子移动到某一个位置,其他的棋子的评估值应该是动态的。

那么公式应该是怎样的呢?

如果我们把G(i,j){g1,g2,...gn}定义为当棋子i移动到j时棋盘上所有己方棋子1-n的评估值,G(i,1-mi)表示棋子i某状态时有mi个位置可以移动,移动到这mi个位置时的棋盘上所有己方棋子的评估值集合。

那么某一状态k时的公式应该是
Sk{G(1,1-m1),G(2,1-m2),...,G(n,1-mn)}

我们取最大的值即是应该移动的棋子。

以上是我的考虑,不知道大家有什么想法,欢迎指教。


3

主题

29

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2007-5-18 09:57:00 | 显示全部楼层

Re:四国军旗的人工智能思考

你这套下全明的还可以,4暗的不行。

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2007-5-18 11:33:00 | 显示全部楼层

Re:四国军旗的人工智能思考

楼主可以联系我,大家一起交流一下。:)
我的联系方式:
MSN:dark1976@hotmail.com

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2007-5-19 10:09:00 | 显示全部楼层

Re: 四国军旗的人工智能思考

解决了宏观问题和微观问题,我觉得现在可以涉及到具体的案例了。

首先我们还是从简单的1V1的情况谈起。

军旗总的来看,它的食物链还是非常清楚的,为了更好的分析,我想先排除一些例外,对军旗的食物链进行修改和简化,大家都听过一种斗兽棋,棒打老虎,老虎吃鸡,鸡啄虫子,虫子啃棒子,这是一种环形单一食物链。军旗的食物链并不是简单的环形。我先将其改为单一的非封闭链。

炸--司--军--师--旅--团--营--连--排--工--雷

这样一来,就可以对其每个链上的值进行标记

  炸 -- 11
  司 -- 10
  军 -- 9
  师 -- 8
  旅 -- 7
  团 -- 6
  营 -- 5
  连 -- 4
  排 -- 3
  工 -- 2
  雷 -- 1

同时,我需要一个数组集合VS{v1,v2,...vn}来存放对方(机器人电脑的敌方)棋子的值,由于正常情况下,电脑不应该知道对方的棋子的值(暗棋),注意该集合是按棋盘位置排列的,v1表示棋盘上1号点位的敌方棋子的值,如果不是敌方的棋子或者无棋子则标记为其他,这里如果是非敌方标M,无棋子标N。最开始,地方的棋子都应该标记为0,表示不知道该位置的具体棋子。

同时用另外一个集合AS{a1,a2,..,an}来标记敌方各食物链上的棋子情况,比如初始情况下a11=2,a10=3,a9=4,..表示和炸弹级别一样高的有2个,和司令级别一样高的有3个(包括炸弹),和军长一样的有4个(包括2炸1司)。这个集合可以用来辅助电脑判断威胁程度(与人脑一样,我们总是在计算对方是否有炸弹,是否有司令等等)。

首先开局时,机器人对地方的棋子一无所知,敌方的棋子标记都是0,机器人必须借助外部输入(棋库)来行走,我们可以制定一些固定的行棋的方式,加上随机要素,让电脑下第一步棋。

然后发生的事情有2种情况:
1、经过N个回合,双方并无棋子碰撞。VS集合的数值依然都是0。这个问题就比较复杂了,在这N个回合之中,电脑无法通过我们上面讨论的公式来计算,因为,电脑本身感觉不到威胁,也无法通过棋子来感知获利。有点像下围棋,电脑必须通过另外一种方式来计算获利和威胁,那就是棋盘位置,比如敌方有一个棋子占据了己方的中营,虽然没有碰子威胁却非常大,这一点我想以后专门探讨。

第二种情况是我今天重点探讨的。
2、第二种情况就是电脑和地方的棋子发生了碰撞。碰撞以后电脑就可以对棋盘上的敌方棋子进行标记。如果敌方的棋子被吃掉,则该位置标记为M或N,如果己方的棋子被吃掉,则标记为己方棋子的食物链值。比如在3号位置,自己的旅长和对方的棋子碰撞被吃,则v3=7。

有了集合VS值,就可以针对敌方棋子的链值来计算权重了。

假设电脑自己有m个棋子M,每个棋子i有n(i)个移动位置

For i = 0 To m
  For j = 0 To n(i)
    For k = 0 To m
      g(i, j, k) = g(i, j, k) + v(t) - M(k)
    Next k
  Next j
Next i

上面的公式有点稀奇古怪。如果要用文字来描述的话就是

对电脑自己的每个棋子i循环,看看每个棋子i能够移动到什么位置,假设棋子i移动到了位置j,看看剩下的电脑自己的棋子k受到的威胁值。比如t处有一个敌方的棋子v(t),v(t)的链值假设为7(表示吃过自己的旅长比旅长大),如果电脑自己的棋子比旅长大,假设是军长,那么g(i, j, k)就应该是9-7=2,如果电脑自己的棋子是个连长,g(i, j, k)=4-7=-3,表示军长获利为2,连长威胁为3。意味着连长不能碰那个棋子,军长可以碰那个棋子。这只是电脑自己的一个棋子移动一步时的状态,不能单单看这一个权重,要纵观全局,计算出每个棋子的每步。

另外,这只是针对单一食物链的情况,我们要解决复杂事物链的情况,就不能用一个单一的数字来标记食物链上的值了,需要用多个值和多个标记,建立一个食物链结构。

同时,除了食物链以外还有别的获利或者威胁,比如棋盘位置,往往我们不需要通过碰撞,只要占据了棋盘上的某个点,就会消除一些威胁,或者获得最大的利益,这一点,我还在考虑之中,下次再探讨。

1

主题

16

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-5-19 22:07:00 | 显示全部楼层

Re:四国军旗的人工智能思考

开始事怎么摆棋?
像围棋呢?

4

主题

61

帖子

66

积分

注册会员

Rank: 2

积分
66
QQ
发表于 2007-6-13 18:31:00 | 显示全部楼层

Re:四国军旗的人工智能思考

呵呵!AI这东西有点难,人系的思想是随机思维的。这个过程计算机是无法去理解,现在的AI无非就是建立在资源库的基础上的。不存在的事件,程序是无法合理的处理的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-3 05:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表