赞 | 13 |
VIP | 118 |
好人卡 | 28 |
积分 | 12 |
经验 | 35779 |
最后登录 | 2017-7-6 |
在线时间 | 1564 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1185
- 在线时间
- 1564 小时
- 注册时间
- 2008-7-30
- 帖子
- 4418
|
>>> 我们的讨论限制在下面的条件下:
- 角色、怪物的HP、移动距离、攻击范围是公共知识;
- 衡量水平相当的角色或怪物的能力的排列顺序(也就是对于任意一个成员,大概知道对方的能力由大到小的排列)的经验公式是公共知识;
- 对于战局中的任何一个成员,都可以估算任意一个其他成员能给自己造成的伤害范围;
- 战局是没有战争迷雾的;
- 尸体是不可以复活的;
- 行动顺序按照速度值展开;
>>> 那么,我们关心什么?
- 聪明的电脑应该给玩家造成尽可能多的伤害;
- 聪明的电脑应该将自已收到的伤害减少以给玩家造成更多的伤害;
- 聪明的电脑的每一步行棋都是有意义的;
- 聪明的电脑能够正确分析出玩家的行棋意图;
>>> 如何保证电脑能给玩家造成尽可能多的伤害而自己受到较少的伤害?
2更像是1的前提,而1和2,可以根据 damage_expect() 函数计算这个衡量指标(不用担心他的具体实现,理解为一个抽象函数)。
我的一种想法是,每个电脑只关心离自己最近和自己可以给予最大伤害的目标,当然,有时候需要在两者之间均衡。在玩家每一部行棋后,move_to(actor, x, y) ,电脑会使用 find_damage_max_target(enemy) 和 find_nearby_actor(enemy) 来获得目标,然后使用 damage_expect(actor, enemy) 来衡量,只是这个过程是复杂的,需要考虑行棋路线的变化和状态的变化;
同时,这个利用了贪心策略的思想并不是正确的:子过程的最大收益并不能保证全局最大收益。
>>> 保证电脑的每一步行棋都有意义?
这个就更麻烦了,针对一个可移动距离为 n 的成员,在 ZTBS 中,他的最大可移动范围为:2*n*(n+1) 个单元格。如果要枚举更深的移动,那么这个时间就会更长。
>>> 如何能正确分析出玩家的行棋意图?
保证电脑的每一步行棋都有意义都很难了,如何保证电脑能了解玩家的行棋意图呢?算法不聪明,自然被带上独木桥。
突然发现 ZTBS 默认的 AI 多么聪明:直接朝最近的目标靠近,不管三七二十一,打吧。于是,就上演了上面的那幕。如果帕吉尔很厉害,就可以一夫当关万夫莫开,法师部队在后面输出了。
那么,什么样的电脑才算聪明?有哪些有效的算法?不一定要给出具体的实现,说个思路就行。
|
|