我可以从一个“动作”列表中选择一个来执行,每秒钟执行一次。列表中的每个动作都有一个数字值,表示它的价值,还有一个表示“冷却时间”的值——我必须等待多少秒才能再次使用该动作。列表可能看起来像这样:
我的问题是尝试优化使用动作的顺序,以最大化一定数量的动作的总价值。显然,如果您只使用一种动作,则最佳顺序是执行动作D,结果总价值为3。使用两个动作的最大价值来自执行CD或DC,结果总价值为5。当您执行10或20或100个动作时,情况会变得更加复杂。我无法找到一种在不进行暴力破解的情况下优化行动顺序的方法,这将使其复杂度指数级地增长,取决于您要优化的行动总数。过去大约15个行动就变得不可能了。
因此,有没有一种以较少的复杂性找到最佳时间的方法?是否曾经研究过这个问题?我想象中可能有一种基于加权图类型的算法可以解决这个问题,但我不知道它是如何工作的,更不用说如何实现它了。
如果这很令人困惑,请原谅——它在概念上有点奇怪,我找不到更好的表述方式。
- 动作A的价值为1,冷却时间为2秒
- 动作B的价值为1.5,冷却时间为3秒
- 动作C的价值为2,冷却时间为5秒
- 动作D的价值为3,冷却时间为10秒
我的问题是尝试优化使用动作的顺序,以最大化一定数量的动作的总价值。显然,如果您只使用一种动作,则最佳顺序是执行动作D,结果总价值为3。使用两个动作的最大价值来自执行CD或DC,结果总价值为5。当您执行10或20或100个动作时,情况会变得更加复杂。我无法找到一种在不进行暴力破解的情况下优化行动顺序的方法,这将使其复杂度指数级地增长,取决于您要优化的行动总数。过去大约15个行动就变得不可能了。
因此,有没有一种以较少的复杂性找到最佳时间的方法?是否曾经研究过这个问题?我想象中可能有一种基于加权图类型的算法可以解决这个问题,但我不知道它是如何工作的,更不用说如何实现它了。
如果这很令人困惑,请原谅——它在概念上有点奇怪,我找不到更好的表述方式。