所以我正在为我玩的一个游戏做一些计算器-为了好玩,它需要不同的技能,不同的冷却时间,使用时间,它们可能被使用的百分比等等
到目前为止,我是通过分析基数中的数字来实现这一点的,不管我拥有多少能力,例如假设我在4秒内使用了5种能力:
0000:60伤害(使用异能0,尝试再次使用但失败-因此返回0的异能伤害)
0001:60伤害
跳过几个
0101:200伤害
再说一次
4444:70伤害
进程终止。-希望这有道理
问题是,在暴力中这样做可以很好地处理小时间(如上所述)和数量或能力,但在更高的时间和数量的能力,它运行分析万亿模拟意味着暴力不再成为一种选择
问题是,考虑到数据大多是随机的,是否有任何启发式算法(所有的想法可能不会返回最优)会返回一个比较好的结果
感谢您的回复:)
让我重新措辞,以确保我正确理解:你想找到最好的技能排序,考虑到他们的个人伤害和冷却时间,这样每次只使用一个技能,没有技能的使用频率超过其冷却时间允许。如果是这样,这是一种调度问题,一种方法是通过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)
决定:t
,sum(x[:][t]) <= 1
(每次最多只能使用一个异能)a
和时间t0
sum(x[a][t0-cooldown(a):t0+cooldown(a)] <= 1
(在它的冷却时间内,你最多只能使用你的异能一次)现在棘手的部分是,虽然这会给你一个在某种意义上是最优的解决方案,但它很可能不是物理的,也就是说你会得到分数的
x
。这就是启发式部分开始的地方,你必须找到一些方法来“四舍五入”整数的解决方案,在这个过程中失去目标值,使它在物理上(游戏联盟)有意义。一种方法是只保留x[a][t] == 1
,并将所有其他数字舍入为零。它会给出一个有意义的解决方案,但可能不是很令人满意(即,你的角色几乎什么都不会做)。考虑到我对这个问题的模型非常简单,我希望在如何给出一个很好的舍入方面会有一些理论结果虽然我可以建议用scipy package来解决线性规划问题,但构建约束矩阵和四舍五入结果的整个问题(即使很小)并不是初级编程任务
相关问题 更多 >
编程相关推荐