Алгоритм для оптимизации параметров на основе неточной функции фитнеса

расширение Kotlin

fun FragmentManager?.replaceAndAddToBackStack(
    @IdRes containerViewId: Int,
    fragment: () -> Fragment,
    tag: String
) {
    // Find and synchronously remove a fragment with the same tag.
    this?.findFragmentByTag(tag)?.let {
        beginTransaction().remove(it).commitNow()
    }
    // Add a fragment.
    this?.beginTransaction()?.run {
        replace(containerViewId, fragment, tag)
        // The next line will add the fragment to a back stack.
        // Remove if not needed.
        addToBackStack(null)
    }?.commitAllowingStateLoss()
}

Использование:

val fragment = { SomeFragment.newInstance(data) }
fragmentManager?.replaceAndAddToBackStack(R.id.container, fragment, SomeFragment.TAG)
5
задан ire_and_curses 2 September 2009 в 17:07
поделиться

4 ответа

Я думаю, что то, что вы ищете, относится к широкой области исследований, называемой метаэвристикой (которая включает в себя множество алгоритмов нелинейной оптимизации, таких как генетические алгоритмы, моделирование отжига или запретный поиск ).

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

1136663]

3
ответ дан 15 December 2019 в 01:07
поделиться

Вы имеете в виду алгоритм Метрополис ?

Этот подход использует случайное блуждание, взвешенное функцией приспособленности. Это полезно для определения локальных экстремумов в сложных условиях пригодности, но обычно медленнее, чем детерминированные подходы, где они будут работать.

1
ответ дан 15 December 2019 в 01:07
поделиться

Вы в значительной степени описываете генетический алгоритм, в котором последовательность операций представляет собой «ген» («хромосома» было бы более подходящим термином для этого, где параметр [s] передается в каждая операция представляет собой один «ген», и несколько генов составляют хромосому), полученное изображение представляет фенотипическое выражение гена, а голоса реальных людей представляют функцию приспособленности.

Если я понимаю ваш вопрос, вы ищете какой-то альтернативный алгоритм, который будет оценивать операции и давать оценку «красоты», аналогичную той, которую производят настоящие люди. Удачи с этим - я не думаю, что на самом деле существует что-то подобное, и я не удивлен, что вы ничего не нашли. Человеческий мозг, и, соответственно, человеческие оценки эстетики слишком сложны, чтобы их можно было свести к упрощенному алгоритму.

Интересно, что ваш вопрос, кажется, инкапсулирует предвзятость против использования реальных человеческих реакций в качестве функции приспособленности в программном обеспечении, основанном на генетических алгоритмах. Это актуально для меня, поскольку мое одноименное программное обеспечение специально разработано для использования человеческих реакций (или «голосов») для оценки музыки, созданной с помощью генетического процесса.

0
ответ дан 15 December 2019 в 01:07
поделиться

Простая цепь Маркова

Цепи Маркова , о которых вы упомянули, неплохой вариант. Цепь Маркова - это просто конечный автомат , представленный в виде графа с весами ребер, которые являются вероятностями перехода. В вашем случае каждая из ваших операций является узлом в графе, а ребра между узлами представляют допустимые последовательности операций. Поскольку порядок имеет значение, ваши ребра направлены . Затем вам понадобятся три компонента:

  1. Функция генератора для построения графика разрешенных переходов (которым разрешено следовать одна за другой). Если любой операции разрешено следовать за любой другой, то это легко написать: все узлы соединены, и ваш граф называется полным . Изначально вы можете установить для всех ребер веса 1.
  2. Функция для обхода графа , пересекающего N узлов, где N - длина вашего гена. В каждом узле ваш выбор делается случайным образом, но с пропорциональным взвешиванием по значениям ребер (так что лучшие ребра имеют больше шансов быть выбранными).
  3. Функция обновления весов , которая может использоваться для корректировки весов краев, когда вы получаете отзыв об изображении. Например, простая функция обновления может заключаться в том, чтобы дать каждому краю, участвующему в «приятном» изображении, положительный голос каждый раз, когда это изображение выдвигается человеком. Затем взвешивание каждого ребра нормализуется, при этом для самого высокого на данный момент ребра устанавливается значение 1, а для всех остальных соответственно уменьшается.

Этот граф представляет собой простую обучающую сеть, которая будет уточняться последующим голосованием. Со временем, по мере накопления голосов, последовательные обходы будут иметь тенденцию отдавать предпочтение более высоко оцененным последовательностям операций, но все же иногда будут исследовать другие возможности.

Преимущества

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

Это также легко анализировать и отлаживать - вы можете проверить веса в любое время и очень легко вычислить такие вещи, как 10 лучших известных на данный момент последовательностей и т. Д. Это большое преимущество - другие подходы, как правило, гораздо сложнее исследовать («почему он это сделал?») из-за их возросшей абстракции. Хотя очень эффективно, вы можете легко растопить свой мозг, пытаясь следовать и отлаживать шаги сходимости симплексного краулера !

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

Эта идея о базовая оценка очень важна, если вы хотите эмпирически оценить качество вывода вашего алгоритма. Например, в моделировании климата простой тест: " лазание по холмам или изучение ландшафта »- это неизбежный« поворотный регулятор »(свободный параметр), с которым все алгоритмы поиска должны иметь дело прямо или косвенно. Вы пытаетесь найти наивысшую точку в некоторой области поиска пригодности . Ваш алгоритм пытается сделать это с меньшим количеством попыток, чем случайная проверка, глядя на форму пространства и пытаясь что-то сделать о нем. Если вы думаете, что поднимаетесь в гору, вы можете угадать и прыгнуть дальше. Но если окажется, что это небольшой холм на ухабистой местности, значит, вы просто полностью пропустили пик.

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

0
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: