我正在使用simulated annealing来解决NP完全资源调度问题。对于任务的每个候选顺序,我计算几个不同的成本(或能量值)。一些例子(尽管细节可能与问题无关):
global_finish_time
:时间表跨越的总天数。split_cost
:由于其他任务中断而导致每项任务延迟的天数(这是为了阻止任务启动后中断)。deadline_cost
:每个错过截止日期的平方天数总和。传统的接受概率函数看起来像这样(在Python中):
def acceptance_probability(old_cost, new_cost, temperature):
if new_cost < old_cost:
return 1.0
else:
return math.exp((old_cost - new_cost) / temperature)
到目前为止,我已将前两个成本合并为一个,只需添加它们,以便我可以将结果输入acceptance_probability
。但我真正想要的是deadline_cost
始终优先于global_finish_time
,而global_finish_time
优先于split_cost
。
所以我对Stack Overflow的问题是:我如何设计一个考虑多个能量的接受概率函数,但总是认为第一个能量比第二个能量更重要,依此类推?换句话说,我想传递old_cost
和new_cost
作为几个成本的元组并返回合理的价值。
编辑经过几天试验提出的解决方案后,我得出的结论是,对我来说唯一合适的方法是Mike Dunlavey的建议,尽管这会给成本组件带来许多其他困难有不同的单位。我实际上被迫将苹果与橙子进行比较。
所以,我付出了一些努力来“规范化”价值观。首先,deadline_cost
是平方和,因此它呈指数增长,而其他组件线性增长。为了解决这个问题,我使用平方根来获得类似的增长率。其次,我开发了一个函数来计算成本的线性组合,但是根据到目前为止看到的最高成本组件自动调整系数。
例如,如果最高成本的元组是(A,B,C)并且输入成本向量是(x,y,z),则线性组合是BCx + Cy + z。这样,无论z有多高,它都不会比x值为1更重要。
这会在成本函数中产生“锯齿”,因为会发现新的最高成本。例如,如果C上升,那么对于给定的(x,y,z)输入,BCx和Cy都将更高,因此成本之间的差异也会更高。较高的成本差异意味着接受概率将下降,就好像温度突然降低一个额外的步骤。在实践中虽然这不是问题,因为最大成本在开始时只更新几次而且以后不会更改。我相信这甚至可以在理论上证明收敛到正确的结果,因为我们知道成本会收敛到较低的值。
让我感到有些困惑的一件事是当最高成本为1.0且更低时,例如0.5,会发生什么。利用(0.5,0.5,0.5)的最大向量,这将给出线性组合0.5 * 0.5 * x + 0.5 * y + z,即优先顺序突然反转。我想处理它的最好方法是使用最大向量来将所有值缩放到给定范围,这样系数总是可以相同(例如,100x + 10y + z)。但我还没有尝试过。
答案 0 :(得分:2)
你可以对不同的能量进行线性组合,并调整系数吗?
可能会将它们进行日志转换吗?
我使用Metropolis-Hastings完成了一些MCMC。在那种情况下,我正在定义一个特定状态的(非标准化的)对数似然性(鉴于它的先验),我发现这是一种澄清我对我想要的想法的方法。
答案 1 :(得分:1)
我会考虑以下几点:
If (new deadline_cost > old deadline_cost)
return (calculate probability)
else if (new global finish time > old global finish time)
return (calculate probability)
else if (new split cost > old split cost)
return (calculate probability)
else
return (1.0)
当然,你计算概率的三个地方中的每一个都可以使用不同的函数。
答案 2 :(得分:1)
我会从多目标进化算法(MOEA)中得到一个提示,并且如果所有目标同时通过您给出的acceptance_probability
函数,则会进行转换。这将有助于探索帕累托前沿,就像标准模拟退火探索相同能量解决方案的平台一样。
然而,这确实放弃了让第一个优先考虑的想法。
您可能需要调整参数,例如为其提供更高的初始温度。
答案 3 :(得分:0)
这取决于你的意思是“优先”。
例如,如果deadline_cost
下降0.001,但global_finish_time
成本上升10000,该怎么办?你是否返回1.0,因为deadline_cost
减少了,并且优先于其他任何东西?
这似乎是一个只有你能做出的判断电话,除非你能提供足够的项目背景信息,以便其他人可以建议他们自己明智的判断电话。