求(几乎)随机d的最佳结果的方法

2024-05-12 21:08:10 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在为我玩的一个游戏做一些计算器-为了好玩,它需要不同的技能,不同的冷却时间,使用时间,它们可能被使用的百分比等等

到目前为止,我是通过分析基数中的数字来实现这一点的,不管我拥有多少能力,例如假设我在4秒内使用了5种能力:

0000:60伤害(使用异能0,尝试再次使用但失败-因此返回0的异能伤害)

0001:60伤害

跳过几个

0101:200伤害

再说一次

4444:70伤害

进程终止。-希望这有道理

问题是,在暴力中这样做可以很好地处理小时间(如上所述)和数量或能力,但在更高的时间和数量的能力,它运行分析万亿模拟意味着暴力不再成为一种选择

问题是,考虑到数据大多是随机的,是否有任何启发式算法(所有的想法可能不会返回最优)会返回一个比较好的结果

感谢您的回复:)


Tags: 数据算法游戏数量进程技能时间数字
1条回答
网友
1楼 · 发布于 2024-05-12 21:08:10

让我重新措辞,以确保我正确理解:你想找到最好的技能排序,考虑到他们的个人伤害和冷却时间,这样每次只使用一个技能,没有技能的使用频率超过其冷却时间允许。如果是这样,这是一种调度问题,一种方法是通过linear programming

大致的想法是引入n_skills * simulation_length变量x[skill][time],每个变量都限制在0和1之间,解释为“在时间time使用技能skill如果x[skill][time] == 1,不要使用如果== 0”。现在,在附加的线性约束条件下(通过类似于numpy的伪代码进行解释),优化所有变量的总和,这些变量的权重由它们的技能造成的伤害sum(x[skill][:] * damage[skill] for skill in skills)决定:

  1. 每次tsum(x[:][t]) <= 1(每次最多只能使用一个异能)
  2. 对于每个异能a和时间t0sum(x[a][t0-cooldown(a):t0+cooldown(a)] <= 1(在它的冷却时间内,你最多只能使用你的异能一次)

现在棘手的部分是,虽然这会给你一个在某种意义上是最优的解决方案,但它很可能不是物理的,也就是说你会得到分数的x。这就是启发式部分开始的地方,你必须找到一些方法来“四舍五入”整数的解决方案,在这个过程中失去目标值,使它在物理上(游戏联盟)有意义。一种方法是只保留x[a][t] == 1,并将所有其他数字舍入为零。它会给出一个有意义的解决方案,但可能不是很令人满意(即,你的角色几乎什么都不会做)。考虑到我对这个问题的模型非常简单,我希望在如何给出一个很好的舍入方面会有一些理论结果

虽然我可以建议用scipy package来解决线性规划问题,但构建约束矩阵和四舍五入结果的整个问题(即使很小)并不是初级编程任务

相关问题 更多 >