Балансирование целей (весов ошибок) в метаэвристике, такой как PSO - PullRequest
0 голосов
/ 01 мая 2019

tl / dr: есть ли стандартный способ сохранить «сбалансированность» нескольких целей в метаэвристических алгоритмах?

Недавно я добился успеха с простым PSO - он эффективно находит достаточно приличныйРешение за небольшое количество вычислительного времени (и было легко получить рабочий код).Однако, как только я попытался расширить его до нескольких целей (чтобы лучше представить реальное решение), он начал приобретать самоссылочный характер и извилистый и чувствовал, что что-то, что, вероятно, уже имеет ответ.

Пример из реальной жизни: я хотел бы превратить длинное скучное видео в интересное замедленное видео.У меня есть входной массив «количество изменений между кадрами».Ортогональные цели включают в себя:

  1. Выход должен быть где-то в диапазоне 20-40 секунд, лучше всего ближе к 30 с.
  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()

Надеюсь, это известный метод, который я могу использовать повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...