【问题标题】:Calculating the value of a unit in a game计算游戏中单位的价值
【发布时间】:2010-11-30 16:37:31
【问题描述】:

我目前正在开发一款游戏,其中每个单位都有生命值、护盾和敏捷值,以及一定数量的六种武器。

例如B单元有2个激光、2个重激光和1个导弹发射器,没有离子冲击波,没有重离子冲击波,没有核导弹,5生命值,2盾,40敏捷。

我已经使用了 20 种不同的算法,试图让 MS Excel 平衡所有这些因素,从而给船打分。我当前的算法适用于一些较小的单位,但与较大的单位非常不平衡

每艘船都有一个伤害值,其中每种类型的武器乘以该武器的伤害并相加。

damage = weapon1*damage1 + weapon2*damage2 + ...

伤害值乘以生命值 + 2*护盾 + 2*敏捷。敏捷和盾牌相乘,使他们的重量超过健康(如果不能被击中,单位就不会失去健康)。我还减去了单位的成本。所以我目前的一个单位的方程式看起来像:

value = damage*(health + 2*shield + 2*agility) - 3*cost

这里有一些例子:

  • 单元 1 - 1 激光、1 生命值、93 敏捷和成本 1。总分为 233。
  • 单元 2 - 2 激光、导弹发射器和 3 生命值,但只有 76 敏捷。分数是 200。
  • 单位 3 - 6 激光,30 生命值和 15 护盾,37 敏捷 - 得分 585。

我希望unit 3的分数更高,但是unit 1和unit 2的分数都不错。谁能提出一个更好的方程来平滑这些值?

【问题讨论】:

  • 您对这里的目标不是很清楚。您是否试图通过改变每种武器的伤害来平衡单位?还是每艘船的不同武器的数量?或者它的成本?或者是别的什么? ...
  • 每个单位都有不同数量的武器,它们都造成相同的伤害(每把武器)——这就是为什么 F...L 乘以 N58...N64。问题是 =ROUND(W*(M+2N+2O),0)-3R 得出的值对于较低的单位来说很好,但对于较好的单位来说却高或低得离谱。我正在寻找一种更好的配方来消除这些颠簸。
  • 好的,说你有一个更好的公式,那你打算用它做什么? IE。你的最终目标是什么?
  • 我想用公式来定义每个单位的能力,所以较高的数字意味着该单位可以摧毁数量较少的单位。基本上是简单的游戏机制。
  • 所以你只是假设你拥有的单位统计数据已经平衡,它没有显示是公式的错吗?如果您上面的公式是可以的,但单位的统计数据设计不佳且不平衡怎么办?如果我处于你的情况,我会完全按照你目前所做的:提出一个对我有意义的公式并调整统计数据,使它们都具有相同的分数。然后使用游戏测试来真正测试它们是否平衡并根据需要进一步调整。

标签: excel artificial-intelligence machine-learning


【解决方案1】:

我认为genetic programming 算法是解决您描述的问题的好方法。遗传编程通过迭代进化算法的计算以最小化成本函数。这是通过创建一组应用于算法的“突变”来完成的,例如,您降低单位成本的想法可能是突变之一。成本函数将是相对于平衡概念增加/减少的东西。将根据此成本函数评估突变。

请参阅书 Programming Collective Intelligence 以获取用于解决此类问题的 Python 代码。

【讨论】:

  • 这似乎是个好主意,但是如何在不更改单元每次迭代的公式的情况下将其应用于 Excel?
  • 如果您最终希望在 Excel 中执行此操作,我会在 Excel 中设置我的输入。使用 Python 读取这些内容并进行遗传算法迭代。输出最好的突变集。获取突变并创建 Excel 公式。
  • 建立在上面的链上,@The Snypr:您需要分析您的公式并梳理出可能变化的每个部分,例如敏捷乘数。确定这件作品的许多候选可能性,这可能像值乘以乘数一样简单(例如敏捷性 * 2),但也可能更复杂(例如 if-then-else 逻辑),然后通过我已经描述的方法。
【解决方案2】:

这个问题和我的cloud balancing example(开源,java)类似。只需用单元替换计算机,用武器替换进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多