在像PSO这样的元启发式方法中平衡目标(错误权重)

时间:2019-04-30 22:38:14

标签: kotlin minimization particle-swarm

tl / dr:在元启发式算法中,有没有一种使多个目标“平衡”的标准方法?

我最近通过简单的PSO获得了成功-它可以在少量的计算时间内有效地找到一个足够好的解决方案(并且很容易获得工作代码)。但是,一旦我尝试将其扩展到多个目标(以更好地表示一个现实的解决方案),它就会开始具有自我参照性和 twisty 的感觉,并且似乎已经有了答案。

真实示例:我想将无聊的视频转换成有趣的延时视频。我有一个“帧之间的变化量”的输入数组。正交目标包括:

  1. 输出应该在20-40秒范围内,最好是30s。
  2. 改变输出速度以专注于源的有趣部分是“好”。

没关系:我优化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()

希望这是我可以重用的已知技术。

0 个答案:

没有答案