Каков оптимальный способ запуска emcee, если изменение одного подмножества пространства параметров значительно увеличивает время выполнения? - PullRequest
0 голосов
/ 21 января 2020

Мне нужно использовать emcee в некотором коде, который я пишу. Мне нужно искать в пространстве параметров какое-то оптимальное решение, как это делается с emcee. Для моего приложения, по сути, есть две части прямой задачи, которую я решаю. Скажем, у меня есть параметры {a, b, c, d, e, f} . Подмножество {a, b, c} подключено к функции G ; Запуск функции g занимает 1 секунду. Подмножество {d, e, f} подключено к функции H ; Запуск функции h занимает 1 миллисекунду. Я объединяю результаты функций G & H в своей функции Q , чтобы получить окончательное решение.

Если я хочу использовать emcee для найти оптимальное решение для Q с пространством параметров {a, b, c, d, e, f}, существует ли стандартный правильный (оптимальный) способ go по этому поводу?

Я думаю, что должен запустить emcee для всего процесса, где Q определяет функцию минимизации. Поэтому я думаю, что могу запустить emcee, где функция log-likelihood() принимает параметры {a, b, c} и запускает функцию G для этих параметров. Внутри функции log-likelihood() будет дополнительный вызов emcee, который найдет оптимальные значения параметров {d, e, f} в соответствии с функцией H . Это будет означать, что для определенного набора значений параметров {a, b, c} = {a0, b0, c0} , что занимает 1 секунду, 1000 значений {d, e, f } можно пройти, что также занимает одну секунду, и будет найдено оптимальное решение для этого {a0, b0, c0} . Внешний вызов emcee может проходить минимальное количество раз, например, 1000 значений, что означает, что функция F будет выполняться 1000 раз, но функция G будет вызываться 1000 х 1000 = 1 000 000 раз.

Может ли это решение вообще работать? Что-то подобное уже было реализовано в emcee или в каком-либо расширении библиотеки? Есть ли другой оптимальный способ сделать это лучше, чем я думал?

...