2012-5-12 13:23
zhouhuan
曹操传主动出击AI在相同距离下的走位规律
[size=3][color=#000000][font=宋体]经过一段时间的研究,发现本楼的理论存在不少缺陷,故重新编制了一套新理论,已发在曹操传贴吧[/font][/color][/size]
[url=http://tieba.baidu.com/p/2657297902]http://tieba.baidu.com/p/2657297902[/url]
[size=3][color=#000000][font=宋体][/font][/color][/size]
======================================================================================================
[size=3][color=#000000][font=宋体]最近玩了裸奔玩法,在研究战术的同时,少不了对[/font][font=Times New Roman]AI[/font][font=宋体]的研究,其中大部分是针对“主动出击”和“被动出击”的,于是在通关后专门测试了某种[/font][font=Times New Roman]AI[/font][font=宋体],也略有些心得,将此自娱自乐的过程拿出来跟大家分享一下。过程有些啰嗦,想直接看结论的同学可到5楼查看(其实结论也有些啰嗦)。[/font][/color][/size]
[size=3][color=#000000][font=宋体]目前关于曹操传[/font][font=Times New Roman]AI[/font][font=宋体]的理论已经较为成熟,玩家基本上可以掌控电脑的行为。而对[/font][font=Times New Roman]AI[/font][font=宋体]介绍最详尽的当属[/font][font=Times New Roman]anitector[/font][font=宋体]的《岳飞传小贴士》一文,内容主要是两块:一个是上右下左的行动路线顺序,一个是状态的优先度,从高到低包括“击退、[/font][font=Times New Roman]10%[/font][font=宋体]和[/font][font=Times New Roman]40%[/font][font=宋体]、[/font][font=Times New Roman]174[/font][font=宋体]武将、无反击、就近”等几种原则,但是“就近原则”之后的优先度却没有提到。也许是作者太忙了没时间分析,也许是之后的优先度实用性不大作者觉得没必要分析,总之这么好的一个帖子就这么太监了实在可惜。[/font][/color][/size]
[size=3][color=#000000][font=宋体]本帖要说的内容就是在“就近原则”之后的优先度,即相同状态相同距离的情况下,“主动出击”[/font][font=Times New Roman]AI[/font][font=宋体]的选择依据。同时将提出一种新的行动路线顺序,以配合该依据。[/font][/color][/size]
[font=宋体][size=3][color=#000000]其实这种情况很早之前已经有过一个说法,就是周瑜在他的《敌人行动详解》一帖中提到的:“以敌人原位置为原点,上半平面优先,上方优先,高度相等时,右方优先;下半平面,左方优先。按照上右下左的顺序走向该攻击点。”不过实际情况跟此说法有不小的出入,远不是这么简单就能解释的。比如下图这种优先度,就无法用该说法解释。[/color][/size][/font]
[attach]121418[/attach]
[size=3][color=#000000][font=宋体]再比如下图,图中敌军装备赤兔马,移动力为[/font][font=Times New Roman]9[/font][font=宋体],[/font][font=Times New Roman]AI[/font][font=宋体]是主动出击,我军除了两个弓骑无反击之外,其他状态无差别,敌军会移动到哪个位置呢?[/font][/color][/size]
[size=3][color=#000000][/color][/size][attach]121377[/attach]
[color=#000000][font=宋体][font=宋体][size=3]为了解决上述问题,并且希望以后能够解释并预测所有的走位,最好能找到一个一般性的理论。[/size][/font]
[font=Times New Roman][size=3][/size][/font][font=宋体][size=3][b]我将敌军可以攻击到我方的位置称为“攻击位”[/b],以区别敌军攻击范围内的“攻击点”。敌军当然是选择离自己最近的一个攻击位,首先要将最近攻击位分为两类:[/size][/font]
[font=宋体][size=3]一、最近攻击位处于敌军移动范围内,即通常所说的敌军移动一次后可以攻击到我军,上图就是这种情况。[/size][/font]
[font=宋体][size=3]二、最近攻击位处于敌军移动范围外,即敌军移动后不能攻击到我军。[/size][/font][/font][/color]
[color=Silver][[i] 本帖最后由 zhouhuan 于 2013-10-31 17:43 编辑 [/i]][/color]
2012-5-12 13:24
zhouhuan
[size=4][align=center][b]第一部分 最近攻击位处于敌军移动范围内[/b][/align][font=宋体][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]首先要知道敌军只移动一格时选择的方向,为上右下左,也可称为贴身四格的优先度:[/color][/size][/font]
[size=3][font=宋体][attach]121379[/attach][/font]
[font=宋体][color=#000000][/color][/font]
[/size][font=宋体][size=3][color=#000000]然后开始长距离判断,里面有个关键的步骤:电脑将拿倒数第二格的位置来判断高低左右。[/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]1[/font][font=宋体]、先布置出所有路线,注意这里布置路线的顺序是上左右下。[/font][/color][/size]
[font=宋体][size=3][color=#000000][attach]121413[/attach][/color][/size][/font]
[font=宋体][size=3][color=#000000][/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]2[/font][font=宋体]、比较这些路线上倒数第二格的位置,选择最靠上的一个;高度一样的话选择靠左的。[/font][/color][/size]
[font=宋体][size=3][color=#000000][attach]121414[/attach][/color][/size][/font]
[font=宋体][size=3][color=#000000][/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]3[/font][font=宋体]、按照贴身四格的优先度选择最后一格的方向。[/font][/color][/size]
[font=宋体][size=3][color=#000000][attach]121415[/attach][/color][/size][/font]
[font=宋体][size=3][color=#000000][/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]4[/font][font=宋体]、最后移动过去,至于如何移动那已经无关紧要了。[/font][/color][/size]
[font=宋体][size=3][color=#000000][attach]121416[/attach][/color][/size][/font]
[font=宋体][size=3][color=#000000][/color][/size][/font]
[/size][size=3][font=宋体][font=宋体][color=#000000]这就是电脑的整个判断过程。可能有人会觉得电脑是先移动到倒数第二格,再进贴身四格的判断,其实不是的,电脑在移动过去之前就已经把所有的情况都定好了。之所以这么说,是因为在第二部分中,攻击位是处于敌军攻击范围外的,电脑不可能先移动再判断,只能在移动过去之前就判断完毕。下面让我们看一些电脑走位被影响的例子。[/color][/font][/font]
[/size]
[color=Silver][[i] 本帖最后由 zhouhuan 于 2012-5-16 22:03 编辑 [/i]][/color]
2012-5-12 13:24
zhouhuan
[color=#000000][font=宋体][font=宋体][font=宋体][size=3]在上图中安排一名我军干扰电脑的行动路线,让敌军通往司马懿的行动路线上倒数第二格的位置发生变化,则敌军会向右边的荀彧移动。[/size][/font]
[attach]121396[/attach]
[font=宋体][size=3]再安排一名我军干扰通往荀彧的行动路线,电脑又会回到左边。[/size][/font]
[font=宋体][attach]121397[/attach][/font]
[font=宋体][size=3][/size][/font]
[font=宋体][font=宋体][size=3]移开司马懿,电脑会去打荀攸。[/size][/font]
[font=宋体][attach]121398[/attach][/font]
[font=宋体][size=3][/size][/font]
[font=宋体][font=宋体][size=3]再让夏侯惇去干扰路线,电脑又会去打荀彧。[/size][/font]
[font=宋体][attach]121399[/attach][/font]
[font=宋体][size=3][/size][/font]
[font=宋体][size=3]下半平面的情况:[/size][/font]
[font=宋体][size=3][attach]121400[/attach][/size][/font]
[attach]121417[/attach]
[font=宋体][size=3][/size][/font]
[font=宋体][font=宋体][size=3]远程也一样。[/size][/font]
[font=宋体][attach]121402[/attach][/font]
[font=宋体][size=3][/size][/font]
[font=宋体][size=3][font=宋体]最后再来判断一下最开始那张图片里的走位,答案是[/font][font=Times New Roman]C[/font][/size]
[size=3][font=宋体][attach]121404[/attach][/font][/size]
[/font][/font][/font][/font][/font][/font][/color]
[color=Silver][[i] 本帖最后由 zhouhuan 于 2012-5-13 07:44 编辑 [/i]][/color]
2012-5-12 13:25
zhouhuan
[size=4][align=center][b]第二部分 最近攻击位处于敌军移动范围外[/b][/align][size=3][color=#000000][/color][/size]
[size=3][color=#000000][font=宋体]先来看一张图,图中敌军会移动到[/font][font=Times New Roman]A[/font][font=宋体]、[/font][font=Times New Roman]B[/font][font=宋体]、[/font][font=Times New Roman]C[/font][font=宋体]三个格子中的哪个呢?[/font][/color][/size]
[color=#000000][/color][size=3][attach]121405[/attach]
[color=#000000][font=宋体]大部分人可能会猜[/font][font=Times New Roman]A[/font][font=宋体]或[/font][font=Times New Roman]B[/font][font=宋体],很遗憾错了,答案是[/font][font=Times New Roman]C[/font][font=宋体]。[/font][/color][/size]
[font=宋体][size=3][color=#000000]由此可推测出几条结论:[/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]1[/font][font=宋体]、电脑不是凭我军所在的位置来确定移动距离的,否则他会向离自己最近的夏侯渊移动而到达[/font][font=Times New Roman]A[/font][font=宋体]。[/font][/color][/size]
[font=宋体][size=3][color=#000000]既然跟我军位置无关,那就只能跟攻击位有关了,图中两个白框代表离敌军最近的攻击位,电脑到两个白框的距离相等。而图中夏侯渊是可以被敌军一击击退的,而且也是不反击的,所以还可以推测:[/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]2[/font][font=宋体]、当攻击位处于电脑移动范围外时,电脑在确定优先度的时候不会考虑我军的状态,也就是不考虑“击退、无反击”之类的因素,仅仅考虑到攻击位的距离。[/font][/color][/size]
[size=3][color=#000000][font=宋体]另外,如果电脑是朝着攻击位移动,那么应该会移动到离攻击位最近的[/font][font=Times New Roman]A[/font][font=宋体]或[/font][font=Times New Roman]B[/font][font=宋体],但是却偏偏移动到[/font][font=Times New Roman]C[/font][font=宋体],所以再推测:[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]3[/font][font=宋体]、电脑是朝着我军移动的,而且是按照上右下左的顺序移动的。[/font][/color][/size]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]上述三个结论看似有一些矛盾,其实没有,我重新整理一下电脑的判断过程:[/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]1[/font][font=宋体]、找出所有距离最近的攻击位,不考虑其它诸如“击退”之类的因素影响。[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]2[/font][font=宋体]、根据第一部分的判断过程确定一个攻击位。[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]3[/font][font=宋体]、根据攻击位确定一个我军武将,按照上右下左的顺序移动到离该武将最近的位置,移动的过程需逐格判断。[/font][/color][/size]
[size=3][attach]121406[/attach]
[color=#000000][font=宋体]这个过程的第[/font][font=Times New Roman]1[/font][font=宋体]点和第[/font][font=Times New Roman]3[/font][font=宋体]点比较好验证,但是第[/font][font=Times New Roman]2[/font][font=宋体]点却不太好办,因为无法安排我军去干扰电脑布置的行动路线,所以要借助障碍物。让我们在敌军通往夏侯惇的路上放一把火,由于火堆的影响,倒数第二格的位置发生了变化,导致敌军走位发生变化:[/font][/color][/size]
[size=3][attach]121407[/attach]
[/size][font=宋体][size=3][color=#000000]验证下来是相符的,可见上面的结论应该没错。[/color][/size][/font]
[size=3][color=#000000][font=宋体]但是目前还有一个问题,如果在攻击位可攻击到的我军有多个,电脑又会如何选择。这种情况只有在直线方向上才会发生,而且只发生在八向攻击的敌军身上。看下图,敌军会移动到[/font][font=Times New Roman]A[/font][font=宋体]、[/font][font=Times New Roman]B[/font][font=宋体]、[/font][font=Times New Roman]C[/font][font=宋体]三个格子中的哪个呢?[/font][/color][/size]
[size=3][attach]121408[/attach]
[color=#000000][font=宋体]大部分人可能会猜[/font][font=Times New Roman]A[/font][font=宋体]或[/font][font=Times New Roman]B[/font][font=宋体],很遗憾又错了,答案还是[/font][font=Times New Roman]C[/font][font=宋体]。[/font][/color][/size]
[font=宋体][size=3][color=#000000]再来看一张图,这回又该选哪个呢?[/color][/size][/font]
[size=3][attach]121409[/attach]
[/size]
[size=3][color=#000000][font=宋体]大家可能要骂我了,这两张图不是一样的么,刚才说选[/font][font=Times New Roman]C[/font][font=宋体]那这张当然也是选[/font][font=Times New Roman]C[/font][font=宋体]啦。很遗憾再次错了,答案是[/font][font=Times New Roman]B -_-![/font][/color][/size]
[size=3][color=#000000][font=宋体]仔细看看这两张图真的是一模一样吗?不是,图中夏侯惇和张辽的位置换过了。经过多方测试后,可推测出第[/font][font=Times New Roman]4[/font][font=宋体]条结论:[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]4[/font][font=宋体]、电脑优先朝出场顺序靠后的我军移动[/font][/color][/size]
[font=宋体][size=3][color=#000000]就是我们在出兵界面安排的出战顺序,没想到这种地方都会影响电脑走位,这当真出乎意料。当然本来是想猜默认等级顺序的,但是跟实验不符,因此最后确定为出场顺序。另外友军肯定比我军靠后,那友军之间怎么比较呢?只能通过剧本或者通用调试器来看了,从上到下就是出场顺序,而且不区分名将和小兵。[/color][/size][/font]
[/size]
[color=Silver][[i] 本帖最后由 zhouhuan 于 2012-5-16 22:09 编辑 [/i]][/color]
2012-5-12 13:25
zhouhuan
[size=4][align=center][b]第三部分 总结[/b][/align][font=宋体][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]路线:[/color][/size][/font]
[font=宋体][size=3][color=#000000]游戏中已知的路线顺序有三种:[/color][/size][/font]
[font=宋体][size=3][color=#000000]一、布置通往攻击位路线的上左右下顺序[/color][/size][/font]
[font=宋体][size=3][color=#000000]二、朝着武将或者指定点移动的上右下左顺序[/color][/size][/font]
[font=宋体][size=3][color=#000000]三、游戏中显示的顺序[/color][/size][/font]
[font=宋体][size=3][color=#000000]前两种用于判断走位,后一种只是给玩家看的,应该没什么用。[/color][/size][/font]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]倒数第二格规律:[/color][/size][/font]
[font=宋体][size=3][color=#000000]电脑根据上左右下的顺序确定通往攻击位路线上倒数第二格的优先度,再以最高优先度的倒数第二格为中心,上右下左为顺序确定最后一格优先度。[/color][/size][/font]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]主动出击的走位需要分两种情况:[/color][/size][/font]
[font=宋体][size=3][color=#000000]一、最近攻击位处于敌军移动范围内。[/color][/size][/font]
[font=宋体][size=3][color=#000000]判断过程为:[/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]1[/font][font=宋体]、以上左右下的顺序布置出通往最近攻击位的行动路线。[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]2[/font][font=宋体]、通过倒数第二格理论确定出唯一的攻击位。[/font][/color][/size]
[size=3][color=#000000][font=Times New Roman]3[/font][font=宋体]、走到该攻击位,走的过程不用再进行逐格判断。[/font][/color][/size]
[font=宋体][size=3][color=#000000]此过程同样适用于被动出击。[/color][/size][/font]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]二、最近攻击位处于敌军移动范围外。[/color][/size][/font]
[font=宋体][size=3][color=#000000]判断过程为:[/color][/size][/font]
[color=#000000][font=Times New Roman][size=3]1[font=宋体]、电脑先选择出所有离自己最近的攻击位,选择的时候不考虑目标状态。[/font][/size]
[size=3]2[font=宋体]、以上左右下的顺序布置出通往这些攻击位的行动路线。[/font][/size]
[size=3]3[font=宋体]、通过倒数第二格理论确定出唯一的攻击位。[/font][/size]
[size=3]4[font=宋体]、选择该攻击位内出场顺序靠后的武将,按上右下左的顺序移动到距离该武将最近的位置,移动的过程要逐格判断。[/font][/size]
[/font][/color]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000]其它小发现:[/color][/size][/font]
[size=3][color=#000000][font=宋体]一、当法师的[/font][font=Times New Roman]AI[/font][font=宋体]设为被动出击时,需要走到其物理攻击范围内,才能吸引他出击。[/font][/color][/size]
[size=3][color=#000000][font=宋体]二、当友军的[/font][font=Times New Roman]HP[/font][font=宋体]小于等于[/font][font=Times New Roman]40%[/font][font=宋体]时,若其[/font][font=Times New Roman]AI[/font][font=宋体]设置是“被动出击、主动出击、攻击武将、到指定点”中的一个,则统统变为“攻击武将”,指定武将为我军第一个出场的武将。比如一般情况下是曹操,在博望坡就是夏侯惇了。敌军的[/font][font=Times New Roman]HP[/font][font=宋体]若小于等于[/font][font=Times New Roman]40%[/font][font=宋体],其[/font][font=Times New Roman]AI[/font][font=宋体]同样会变为“攻击武将”,指定武将是敌军第一个出场的武将。[/font][/color][/size]
[size=3][color=#000000][font=宋体]“攻击武将”这个[/font][font=Times New Roman]AI[/font][font=宋体]也挺有趣,可能是“到指定点”和“主动出击”这两种[/font][font=Times New Roman]AI[/font][font=宋体]的结合体,不过目前还未深入研究,暂时不谈了。[/font][/color][/size]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[align=center][font=宋体][color=#000000][b]全文到此结束。[/b][/color][/font][/align][/size]
[color=Silver][[i] 本帖最后由 zhouhuan 于 2012-5-16 22:16 编辑 [/i]][/color]
2012-5-12 14:14
阿尔法孝直
似乎看出一点名堂出来了。。。。。。感觉像是逐格上右下左的递归一样。
2012-5-12 14:17
zhouhuan
原来是我电脑显示的问题:q(+
[color=Silver][[i] 本帖最后由 zhouhuan 于 2012-5-12 14:19 编辑 [/i]][/color]
2012-5-12 17:32
冷风青古道
兄弟加油!
我已经不想在轩辕回很长的帖了,轩辕不知道什么时候来日经的。:angry2:
[color=Silver][[i] 本帖最后由 冷风青古道 于 2012-5-12 17:49 编辑 [/i]][/color]
2012-5-12 21:23
墨叶
第一次看没有完全领悟。以后再来。
刚才回帖就发生错误。
2012-6-14 12:58
墨叶
又看了一遍。
请问:若攻击对象比较远,结论是否仍然成了。
分析曹操传AI的技术贴并不多,该贴有推荐的必要。
2012-6-14 13:19
阿尔法孝直
回复 #10 墨叶 的帖子
:hz1026:前段时间忙坏了,再加上挂挂影响,给忘了。
2012-6-16 19:55
zhouhuan
回复 #10 墨叶 的帖子
我个人测试过的情况,并没有出现反例,所以在此之前,可以认为在任何距离下都成立。
2012-6-19 09:13
小陶醉
某这残念的技术,都是用S/L大法来看电脑走位:hz1011:
2012-10-13 14:29
mhc9202
good 情况
2012-10-13 22:13
raynoree
玩曹操传的兄弟们,真是藏龙卧虎
2012-10-14 19:01
剑侠赏蝶
不错,不错!
2012-10-16 15:30
YSH0212
好贴,赞一个
2013-6-19 23:21
成太守
问下楼主,布置路线的顺序为何是上左右下,电脑移动不是按上右下左么?
2013-6-19 23:23
墨叶
回复 #18 成太守 的帖子
个人猜测是故意设定,玩家更难发现规律。
2013-6-20 00:27
阿尔法孝直
回复 #18 成太守 的帖子
按现代人读书的顺序,从上到下,同一行从左到右。
2013-6-20 15:52
成太守
这个比喻够形象:victory:
2013-6-20 17:36
zhouhuan
[quote]原帖由 [i]成太守[/i] 于 2013-6-19 23:21 发表
问下楼主,布置路线的顺序为何是上左右下,电脑移动不是按上右下左么? [/quote]
这我就不知道了,找出来的规律就是上左右下,也许就是为了让规律更难找
2013-8-3 12:23
古月新风
受教了,只是不知道MOD里面怎么个设定法,还有许多敌军一起上的话,头就有些大了。
2013-8-3 17:36
zhouhuan
[quote]原帖由 [i]古月新风[/i] 于 2013-8-3 12:23 发表
受教了,只是不知道MOD里面怎么个设定法,还有许多敌军一起上的话,头就有些大了。 [/quote]
对新引擎mod有可能不适用,老引擎都是可以的。
2013-9-19 20:59
xggzga117
楼猪分析得不错。
2013-10-31 07:32
yanyiyun
此乃神贴, 受益颇大
2013-10-31 17:42
zhouhuan
本楼的理论还不够完善,一楼给出新理论链接
2014-1-11 17:19
379130432
……对于SL的俺来说 有点奢侈!
2014-5-15 13:06
13677575257
回复 #13 小陶醉 的帖子
我也是啊!
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.