Мне нужно estimate размер популяции, найдя значение n, которое максимизирует scipy.misc.comb(n, a)/n**b
, где a
и b
являются константами. n
, a
и b
- целые числа.Целочисленная оптимизация/максимизация в numpy
Очевидно, что я мог бы иметь петлю в range(SOME_HUGE_NUMBER)
, вычислить значение для каждого n и вырваться из цикла, как только достигнет перегиба на кривой. Но я задавался вопросом, был ли элегантный способ сделать это с помощью (например) numpy/scipy или какой-нибудь другой элегантный способ сделать это только в чистом Python (например, как целочисленный эквивалент метода Ньютона?)
Насколько велики вы ожидаете 'n'? Из порядка 181, как в связанном ответе, или более порядка 7,5 миллиардов человек на Земле? – jotasi
Я бы (gut-feel) ожидал n <1000, и, конечно, << 10000, хотя до тех пор, пока я не запустил настоящие данные, я абсолютно не знаю! – TimGJ
Вы можете преобразовать 'comb' в функцию над действиями через гамма-функцию (или аппроксимировать формулой Стирлинга). Затем вы можете использовать метод численного решения, а затем просто проверить, какое ближайшее целое число max. – strubbly