我想试着编写一下牌类游戏斗地主的人工智能。

PDD123 2009-08-03 05:58:36
请问哪些书对我有帮助?

最最理想的实现程度是:把斗地主的基本规则告诉计算机(编写成程序)之后,在与真人游戏的过程中,自动学习,自动生成决策规则。(当然,这种程度暂时只是一个目标)

我现在有点把握的想法是:
1.使用已知规则,根据另外两人的出牌情况,推测他们的牌的情况。(概率)
2.也是用已知规则和推测出来的情况,来制定自己出的牌。
其中使用的规则都是人总结出来的,而概率则是在游戏过程中统计的。我的初步想法就是如此,但是我想看看我能不能更进一步,请大家推荐几本书。
...全文
1326 40 打赏 收藏 举报
写回复
40 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hhddz 2010-10-16
[Quote=引用 37 楼 damo_xu 的回复:]
引用 35 楼 kenshu 的回复:
另外,我纯粹为了混饭而也程序的,写出来的都是一陀陀的。
唐突了,LS别介意。


哈哈哈,解释清了没什么大不了的,都是学C++的。
兄台别介意才好,以后还要早晚请教。
[/Quote]

好的斗地主算法,必须要像人一样理性思考。

算法的主要麻烦在于可行解的空间太大,想一想一手牌最多20张,有多少种出牌组合?因此搜索必须有针对性地优化才能达到实用的水平。

设计斗地主的人工智能算法,可以参考下面这个欢欢斗地主。


  • 打赏
  • 举报
回复
超级大笨狼 2009-08-04
PC游戏编程 人机博弈

那书一般般。

你可以去
http://www.elephantbase.net/

这里的东西值得推荐
  • 打赏
  • 举报
回复
VistaKobe 2009-08-04
学习了!
  • 打赏
  • 举报
回复
PDD123 2009-08-04
谢谢,我去看看。
  • 打赏
  • 举报
回复
kenshu 2009-08-04
[Quote=引用 24 楼 pdd123 的回复:]
引用 17 楼 kenshu 的回复:


楼主,建议买本书(不过我估计现在买不到了,看看当当或卓越有没有), <PC游戏编程 人机博弈>,就有路可以走下去了.在这件事上,真的是手把手带你入门.里面是一个中国象棋从头到尾教你,当然你不可能完全抄代码,但起码知道怎么一条思路走下去.



请问一下,当当和卓越 是网上书店么?以前我找蓝岭香柏网上书店购买一本书,他们说书没有了,然后就没有下文,钱也不退。
[/Quote]


www.dangdang.com
www.amazon.cn

都是货到付款的,那本书当当上有
  • 打赏
  • 举报
回复
PDD123 2009-08-04
[Quote=引用 17 楼 kenshu 的回复:]


楼主,建议买本书(不过我估计现在买不到了,看看当当或卓越有没有), <PC游戏编程 人机博弈>,就有路可以走下去了.在这件事上,真的是手把手带你入门.里面是一个中国象棋从头到尾教你,当然你不可能完全抄代码,但起码知道怎么一条思路走下去.

[/Quote]

请问一下,当当和卓越 是网上书店么?以前我找蓝岭香柏网上书店购买一本书,他们说书没有了,然后就没有下文,钱也不退。
  • 打赏
  • 举报
回复
zxlxp9527 2009-08-04
关注中
  • 打赏
  • 举报
回复
dingpin 2009-08-04
等待结果...
  • 打赏
  • 举报
回复
PDD123 2009-08-04
小县城,书一时半刻买不到,我还是先构思评估一把牌好坏的模型吧。
  • 打赏
  • 举报
回复
jyh_baoding 2009-08-04
帮顶一个
  • 打赏
  • 举报
回复
zhugay 2009-08-04
难啊,我视乎感觉比中国象棋的人工智能还难。
计算机成为斗地主高手,那么写程序的人必须是高手呀,因为你要教计算机如何斗赢。计算机和人相比只是记忆力好,计算速度快,它的智商还比不上人。
我想会有一天的,计算机具有思维能力的时候,大部分人的智商都比它低了,因为只要计算机的程序足够的复杂,计算机的速度足够快,它会比人厉害的,但它又是被人可以控制的。

我只是写了个qq斗地主记牌器,要做到判断分析对方的牌,不容易呀,只是到了最后的关键时刻,记牌器才派上用场,说明我不是斗地主高手。

LZ得加紧呀,完成了给我分享一下:zhugay@yahoo.com.cn
  • 打赏
  • 举报
回复
kenshu 2009-08-04
[Quote=引用 19 楼 damo_xu 的回复:]
引用 18 楼 kenshu 的回复:
我上面说的那些书,跟本不需要你自己是这个游戏的专家,只要懂规则就可以写了,因为你可以让你的电脑进化(当然你是高手的话做起来会容易一些,但绝不是关键)


电脑进化?哈哈哈。这么说懂遗传算法的大牛可以制造出比人还聪明的机器人啦?
[/Quote]

也没什么好笑的吧?

如果你用的是有限状态机(没写过人机对弈的程序员,第一反应,10个人有10个人要用有限状态机来做),那当然你必须比电脑聪明,因为必须你会的,电脑才有可能会。

但通过遗传和变异,对一些参数的调整,通过进化,确实有机会比程序员初始设定的参数要优(当然也有机会退化),并且实际上进化的机会要大于退化的机会,反正我做出来的程序,下过几万盘的,明显强于我初始设定的值.

另外,我认为想当然的就上来取笑人,不是很礼貌.人工智能我虽然不行,但至少确实粗略学过,并且实际地写了一两个相关的程序。

您要还不服气,看我给的链接的首页,也有一两个程序不在人后。
  • 打赏
  • 举报
回复
damo_xu 2009-08-04
[Quote=引用 35 楼 kenshu 的回复:]
另外,我纯粹为了混饭而也程序的,写出来的都是一陀陀的。
唐突了,LS别介意。
[/Quote]

哈哈哈,解释清了没什么大不了的,都是学C++的。
兄台别介意才好,以后还要早晚请教。
  • 打赏
  • 举报
回复
kenshu 2009-08-04
另外,我纯粹为了混饭而也程序的,写出来的都是一陀陀的。
唐突了,LS别介意。
  • 打赏
  • 举报
回复
kenshu 2009-08-04
[Quote=引用 29 楼 damo_xu 的回复:]
引用 20 楼 kenshu 的回复:
也没什么好笑的吧?
如果你用的是有限状态机(没写过人机对弈的程序员,第一反应,10个人有10个人要用有限状态机来做),那当然你必须比电脑聪明,因为必须你会的,电脑才有可能会。

但通过遗传和变异,对一些参数的调整,通过进化,确实有机会比程序员初始设定的参数要优(当然也有机会退化),并且实际上进化的机会要大于退化的机会,反正我做出来的程序,下过几万盘的,明显强于我初始设定的值.
另外,我认为想当然的就上来取笑人,不是很礼貌.人工智能我虽然不行,但至少确实粗略学过,并且实际地写了一两个相关的程序。
您要还不服气,看我给的链接的首页,也有一两个程序不在人后。


对不起,兄台误会了。我这水平怎敢取笑别人。
我本意是想探讨一下到底程序设计出来是不是能比人还聪明.
遗传算法我也接触过,我的理解还是这个算法还是属于以机率变异为探索最优解,当然这个机率函数和其它的函数还是最终归到人来设定。而且这个遗传算法应该求得的是渐进解,不一定是最优解。

我认为棋的算法远远要比牌的算法简单。
棋可以搜索路径等等一些,将更优解存储,而牌的算法模拟要复杂的多。至今有计算机下棋战胜人,有打牌战胜人的例子吗?求教网友。

以我的水平本意还是想求教打牌的算法还是应该由打牌好的人来设定,而非通过遗传算法来学习,
再次道歉。以后还要早晚请教。


[/Quote]

对不起,昨天做了一整天(到今天中午),一脸都是郁闷,没什么好声气。

另外,有个游戏,叫开心斗地主的,很久以前玩过,挺好玩的。感觉写得非常好。
  • 打赏
  • 举报
回复
damo_xu 2009-08-04
[Quote=引用 33 楼 zaodt 的回复:]
这个好像很复杂!
97年的深蓝是下国际象棋,那是一人走一步;
但斗地主,你可以不跟;
我感觉,不跟比跟有难度!
[/Quote]

而且还要判断:
上友家或敌家的牌跟不跟;
下友家或敌家的牌跟不跟;
对友家或敌家的牌跟不跟;
因为这涉及到整体赢牌,所以有时候自己要采取以输自己而换整体赢的策略。

  • 打赏
  • 举报
回复
zaodt 2009-08-04
这个好像很复杂!


97年的深蓝是下国际象棋,那是一人走一步;


但斗地主,你可以不跟;


我感觉,不跟比跟有难度!
  • 打赏
  • 举报
回复
mitiao 2009-08-04
我也写了好久了,基本的搜索判断操作还是很好实现的,写的第一版不成功,电脑的出牌差,胜率太低了。
后来我就加了作弊,只要知道其他两家手里都有什么牌,然后自己就好出牌了,哈哈。
不过还是没有成功,我还在为程序的效率发愁。
  • 打赏
  • 举报
回复
damo_xu 2009-08-04
[Quote=引用 18 楼 kenshu 的回复:]
我上面说的那些书,跟本不需要你自己是这个游戏的专家,只要懂规则就可以写了,因为你可以让你的电脑进化(当然你是高手的话做起来会容易一些,但绝不是关键)
[/Quote]

电脑进化?哈哈哈。这么说懂遗传算法的大牛可以制造出比人还聪明的机器人啦?
  • 打赏
  • 举报
回复
damo_xu 2009-08-04
还有要补充问一下:
棋的算法模拟是不是可以模拟一些固定的最优解?比如围棋中有"定式"这个名词,就是一旦计算机发现这个棋局,就按定式下棋,因为这就是最优解,而不是较优解。而牌的"定式"应该只在最后几张牌的情况下才管用吧?
  • 打赏
  • 举报
回复
加载更多回复(19)
相关推荐
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2009-08-03 05:58
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……