从(几乎)随机数据中找到最佳结果的方法



,所以我正在为我玩的游戏制作一些计算器 - 为了娱乐,它具有不同的能力,具有不同的冷却时间,使用时间,可以在ETC上使用它们的百分比。..

到目前为止,我正在通过分析基础数字来做到这一点,但是我拥有许多能力,因此,假设我有5个能力使用了4秒:

0000:60损坏(使用能力0,尝试再次使用它但失败 - 因此返回能力损坏0(

0001:60伤害

跳过几个...

0101:200伤害

再次...

4444:70伤害。

过程终止。 - 希望这是有道理的。

问题是,在蛮力中进行此操作,与小时(如上文(以及数量或能力的效果很好,但是在更高的时间和能力数量下,它运行了分析数万亿个模拟,这意味着蛮力不再成为一种选择。

问题是,考虑到数据大多是随机的,是否有任何启发式算法(所有人都认为可能无法返回最佳(将返回相对较好的结果。

感谢您的任何答复:(

让我重新确保我正确理解:鉴于他们的个人损害和冷却,您想找到最佳的技能测序,以便每次只使用一项技能,并且没有任何技能比其冷却允许的频率更频繁。如果是这样,这是一种调度问题,一种方法是通过线性编程。

粗略的想法是引入n_skills * simulation_length变量x[skill][time],每个变量在0到1之间都限制在0到1之间,并解释"在时间使用skill的技能CC_3如果time,如果x[skill][time] == 1,请使用== 0,请勿使用。现在,您在其他线性约束下优化了由其技能所做的损坏加权的所有变量的总和(通过numpy -like like pseudocode解释(:

  1. 每次tsum(x[:][t]) <= 1(每次都可以使用一个能力(
  2. 对于每种能力a和时间t0 sum(x[a][t0-cooldown(a):t0+cooldown(a)] <= 1(在冷却时间内,您最多只能使用自己的能力(
  3. (

现在,棘手的部分是,尽管这将为您提供最佳的解决方案,但在某种意义上,它很可能不是物理,也就是说,您将获得分数x s。这是启发式部位开始的地方,您必须找到某种方法来"将"解决方案"绕过"整数的解决方案,而在过程中失去了客观价值,以使其在物理上(游戏中(有意义。一种方法是仅保留x[a][t] == 1,然后将所有其他数字舍入零。它将提供一个有意义的解决方案,但它可能不是很令人满意(即。您的角色几乎无能为力(。鉴于我的问题模型非常简单,我希望有一些关于如何进行良好舍入的理论结果。

虽然我可以建议使用线性程序的Scipy软件包,但一旦制定了线性程序,但构建约束矩阵并将结果(即使是琐碎的(构建的整个问题不是初学者级的编程任务。

最新更新