俄罗斯方块 人工智能的问题 (难)

languagec 2009-05-25 07:28:58
额... 有个问题请教下大家.
给定一个传统的俄罗斯方块,7种方块,总数量可达1亿到5亿的输入量,消除1行的0分,消除2行得2分,消除3行得4分,消除4行得8分.
要求写一个程序,尽可能的得分. 得分最多者胜.处理当前方块时可以考虑后续方块(即允许考虑后续方块参与当前方块最终位置的决策过程.
输入格式为:
第一行为一个整数n(实际输入100000000 >= n >= 50000000), 表示接下来有n个方块要落下,接下来有n行, 每行有一个整数t(0< t < 8),代表上7个方块中的一个方块要落下。

我自己写了一个,分数最高的时候可以达到2000多分(不过要看运气),到了9000多个方块的时候就完蛋了 .
我的程序只能判断当前的方块,没有能够考虑后续的方块.
不论如何,希望大家给提点意见,不需要源码,给个想法就可以.
百分相谢!

题目原址:
http://legendcode.alibaba-inc.com/intro-project.jsp#a

...全文
605 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztasd6530 2009-06-25
  • 打赏
  • 举报
回复
学习
wanyuzhen 2009-06-03
  • 打赏
  • 举报
回复
总数量可达1亿到5亿的输入量,这样的文件不能一次性读入内存
无法从全部的输入制定最优方案。
游戏中,每次落下一个方块,落到一个宽度为 10 格的槽中,
如果方块刚刚落下后顶部高度大于 17 行,游戏结束。也就是说
,游戏槽的大小是固定的,假设是10*X
方块有七种方式,可以考虑从文件中一次性读取适当数量的方块,
使其可以填满游戏槽(方块要进行变换),用枚举。
这次数据完后,在一次性读入数据。


languagec 2009-06-03
  • 打赏
  • 举报
回复
今天已经是3号了,我始终还是没有实现出很好的考虑后续方块的算法,弄了一个计算下一个方块的算法,但是结果还不如没有考虑后续方块的,我想一定是我哪里弄错了。但是现在也不想去弄这个。
经过改进和不停的尝试,现在的算法已经可以轻松获得2000分了,运气好的时候可以获得3万分以上,可以在几万到几十万的落子内保持不死,但衰的时候没到100分就挂了。

代码很长,500行左右,留个联系方式,可以和大家分享交流。
goodname 2009-05-26
  • 打赏
  • 举报
回复
以前我也想寻求过AI,发两个链接,供参考

http://jinyou.100webspace.net/jytk/jytk.htm

http://notabdc.vip.sina.com/Solver/tetris.htm
fairchild811 2009-05-26
  • 打赏
  • 举报
回复
光宇广贞 2009-05-26
  • 打赏
  • 举报
回复
顶一个,关注一下。
Sou2012 2009-05-26
  • 打赏
  • 举报
回复
算法不错!
  • 打赏
  • 举报
回复
看看
liliangbao 2009-05-25
  • 打赏
  • 举报
回复
帮顶!!!
nyeboy123 2009-05-25
  • 打赏
  • 举报
回复
一个方块与当前的游戏主体布局有关系,而这个布局是固定的,你是不能改变的,所以你根本不用去考虑它。只需要考虑我这个方块掉下去后可以放置的位置。而位置安排好了,势必会影响布局了,所以布局变了。
因为方块可放置的位置只有10格,再加上摆放的方式只有4种,再加上只与后续的4个方块相关,我想你就算用枚举法,这样算法也是可行的。但是从效率上考虑,还是应该在这个函数里再添加些限制条件,以及找到潜在的联系。
你的算法我没仔细看过,还是要你自己慢慢去想。我只是帮你把问题简化了,算法还是要自己写的。
languagec 2009-05-25
  • 打赏
  • 举报
回复
我自己写的代码很长,要不就贴上来了。

我的选择函数是大概是这样的,

每一个方块,方在哪一个位置,都计算出一系列参数,然后根据这些参数综合评价哪个位置最优。
这些参数有:
1.方块放下后,有些格子不能填满,产生的这些格子的数量是一个参数
2.方块放下后,与这个方块相接触的格子的个数
3.方块放下后,方块的最高点的格子的高度
4.方块放下后,能消去的行的行数
5.最低点的没有填满的格子的位置的高度

大概就这些,然后根据这些参数,根据不同的权重写成一个表达式,得到一个综合值,值最大的最优。

使用这个表达式的时候,假如随即产生的方块中,没10个连续的方块中有一个长条形的方块的话,几乎可以不死。
只是,我还不知道如何计算后续的方块。。

不知道该如何评价后续的方块。

请指教。。
nyeboy123 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jixingzhong 的回复:]
后续的方块应该是随机未知的吧?
[/Quote]
文本文件里已经给出了数据,方块是依次下落的,不是随机的。
nyeboy123 2009-05-25
  • 打赏
  • 举报
回复
//功能:获取最好位置
//参数:Pos是返回的最好放置位置,CurrShapeIndex当前要下落的方块,
//PreScene上一个场景,Next4Shape接下来的4个方块,ResultScene是当一个方块放置后的整个游戏主体方块布局
Pos GetBestPos(CurrShapeIndex,PreScene,Next4Shape,out ResultScene );
说明:整个游戏的宽度是10格,而每个方块无论怎么放至少要占2个格,所以我们可以判断它与接下来的4格方块有关系。
而每次方块下落都会有当前游戏主体方块布局的限制,再考虑到后面4格方块也会影响到消块效果,所以要用到PreScene和ResultScene。然后,递归地对每一个方块调用此函数,直到没有方块为止。
至于这个函数的算法要怎么写,那就得看你自己了。这里我想到一些。每个方块有4中摆放方式(不旋转,左旋转,右旋转,180度旋转),把这几个方块放在一起,最大可能消去的方块数。呵呵 我就想到这些了
我的思路就是这样,仅供参考 LZ,加油
jixingzhong 2009-05-25
  • 打赏
  • 举报
回复
后续的方块应该是随机未知的吧?
killbug2004 2009-05-25
  • 打赏
  • 举报
回复
参赛资格:
浙江大学所有在读研究生。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧