需要一些关于使用什么算法的建议

时间:2013-05-10 09:38:01

标签: algorithm

这是一个简单的c ++游戏。

在坐标范围(0.0f,0.0f)到(10.0f,10.0f)中生成5个随机塔。 他们有随机的hp,范围和伤害限制在一定限度内。他们无法动弹。

现在,在地图上添加了10个单位,具有固定的移动速度,hp和伤害。

通过模拟不会修复单位和塔楼。只有他们的初始职位才会被随机化。 将运行1000次模拟。

目标是实现单位约90%的赢率。

当单位摧毁所有塔时,赢得一场比赛。单位可以以预定的速度向塔移动。每个模拟需要多轮才能完成。在每个圆形单位中移动到最佳选定目标并在一定范围内进行攻击。同样地,塔在其攻击范围内挑选任何一个单位并继续攻击它直到它死亡或移出范围。

我需要一些关于我应该投入时间来实现同样算法的指针。

目前,我可以使用塔的单位,hp,范围和损坏的一些加权平均值来获得84.2%的赢率,并选择在这些标准上得分最低的塔。在没有考虑其他属性的情况下向距离单位最远的塔移动可以获得大约72%的赢率。


来自已删除答案的评论

还有一个限制。我每次都可以选择一个目标。这些单位将确保朝着该目标前进。我不应该修改单位向目标移动的部分。因此,每一轮模拟都必须有一个目标塔,以此为目标的单位将移动。因此,我无法将我的单位从塔楼移到安全区域并将它们组装在一个点上,然后计划我的攻击。<​​/ p>

2 个答案:

答案 0 :(得分:1)

我有一个更好的想法,可以选择一个方法来选择要攻击的塔。

对于每个战士,使用它来得到一个&#34;得分&#34;每个塔。然后选择得分最高的塔

a1*todalDmgFromOtherWarriorsAimedAtThatTower - a2*towerRange - a3*towerDamage - a4*towerHP - a5*distance/speed
应该反复修改

a1-a5,直到获得最佳结果,使某些参数比其他参数更重要

答案 1 :(得分:1)

如果没有时间限制或时间优势,我会尝试采用分组方法 - 让所有单位一起攻击同一个塔,并拥有所有单位在同一时间进入塔的攻击范围。实际上这可能最终不会花费更长的时间,因为你会在减少伤害的同时更快地射击,因此不必考虑防止单位死亡的程度,也会产生更高的(如果不是完美的)胜率。

你可能有一个特定的单位(一个HP最高的单位?)在其他单位之前略微进入范围,因此它会引发火焰,并且当它接近死亡时可以超出范围。如果最强的单位已超出范围,您可以将下一个受攻击的单位移出范围(等等),或者只是继续攻击直到塔被摧毁。

你必须先玩哪座塔进行攻击。可能是最弱的(最低的HP +伤害),但你可能不想发送你最强的单位来引火,因为你可能想把它保留在最后一个最强的塔上。

移动一个单元以避免所有塔的攻击范围到达所需的塔可能是困难的。一些选择:

  • 将单位留在原处。

  • 从战略上挑选塔楼以“解开”最强大的单位。

  • 攻击多个塔。

如果所有这些听起来像是一项几乎不可能完成的任务,需要一些非常先进的AI,请注意它可能比您想象的要简单得多。只需忽略大多数约束来启动并一次一个地添加它们,就像在开始时一样简单并从那里构建它。但是,是的,它比你的个人方法困难得多;主要的困难在于几何计算和一点点玩,以找到塔的最佳攻击顺序和伤害者的顺序。

我怎么可能接近这个:(在每一步测试效率,在你开心时停止)

  • 编写一个启发式算法来确定最佳塔。将所有单位移动到那里进行攻击(忽略所有其他塔)。重复直到比赛结束。这应该非常简单。

  • 修改以等到大多数单位出现之后再进入塔范围。不应该太困难。

  • 如果你想要,你可以在任何困难的东西开始发生之前就停在这里(可能会稍微改进一下),因此它不应该花费你太长时间,并且只需将其与您当前的方法进行比较。

  • 写一些简单的代码让单位在其他塔楼周围移动(如果可能的话)。

  • 如果某些单位无法到达那里,请修改您的拣选塔代码以重新确定塔楼。

  • 渐渐地使一切变得更加复杂。

旁注 - 由于塔是静止的,您可以确定提前到达塔楼所需的时间,因此您可以在安全的地方等待(而不仅仅是塔的外部范围,这可能是如果其他单位需要更长时间才能到达那里,可以在多个其他塔楼的范围内。

附加说明 - 如果单位也可以进行远程攻击,如果任何单位的攻击范围比任何一个塔都长,那么让该单位独立直到它被摧毁(免费杀死!)将是最有效的。