tl / dr:在元启发式算法中,有没有一种使多个目标“平衡”的标准方法?
我最近通过简单的PSO获得了成功-它可以在少量的计算时间内有效地找到一个足够好的解决方案(并且很容易获得工作代码)。但是,一旦我尝试将其扩展到多个目标(以更好地表示一个现实的解决方案),它就会开始具有自我参照性和 twisty 的感觉,并且似乎已经有了答案。
真实示例:我想将无聊的视频转换成有趣的延时视频。我有一个“帧之间的变化量”的输入数组。正交目标包括:
没关系:我优化error = c1*percentDistanceFromTargetTime() + c2*lackOfVarianceInOutputVideo()
哪个有效!但是,这些c1和c2权重修饰符很棘手(并且手工制作它们无法达到目的)。一个目标往往会主导结果(例如,以差异为代价完美地延长30秒),我不希望这样做。
在内部解决的“我们必须更深入”是开始吗?有没有一种方法,具有“行为,该死的你!”是否会出现其他错误,从而使解决方案脱离漏洞和边界,然后将c1和c2包括在优化中?
fun behaveNicely() = when {
// absolute no-nos.
outputLength !in 20..40 -> BIG_ERROR
// the twisty part
c1 !in 0.0001..100.0 -> BIG_ERROR
c2 !in 0.0001..100.0 -> BIG_ERROR
areWeOnASolutionThatJustComesFromTime() -> BIG_ERROR // c1 is dominating
areWeOnASolutionThatJustComesFromVariance() -> BIG_ERROR // c2 is dominating
// do the usual thing
else -> 0.0
}
error += behaveNicely()
希望这是我可以重用的已知技术。