Я пытаюсь минимизировать функцию (возвращает доход, а входные данные - цены) с 200 переменными, используя scipy.optimize.minimize. В настоящее время я использую вариант SLSQP. SLSQP выбрасывает ограничения неравенства несовместимые ошибки. Итак, я удалил ограничения и попытался запустить его, но оптимизатор не может найти решение и возвращает значения начальной точки. Производная в начальной начальной точке выглядит следующим образом:
derivative: [-1.0, -3.0, -3.0, -0.0, -419132.0, -0.0, -18.0, -26.0, -1.0,
-3.0, -17.0, -365.0, -1.0, 0.0, -0.0, -1.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0,
-19.0, -0.0, -1.0, -0.0, -0.0, 0.0, -1320.0, -14.0, -1803947.0, 0.0, 0.0,
-0.0, -5.0, -0.0, 0.0, -12.0, -1.0, -1.0, -1.0, -0.0, -1.0, 0.0, 0.0, -1.0,
-0.0, -8.0, -1.0, -1.0, -8.0, -94.0, -1.0, -1.0, -1.0, -1.0, -1.0, -2.0,
-1.0, -1.0, -1.0, -2.0, -1.0, -1.0, -0.0, 0.0, -1.0, -1.0, -0.0, -2.0, 1.0,
-0.0, -0.0, -1.0, -0.0, -1.0, -0.0, -132317496.0, 0.0, -1.0, -0.0, -0.0,
-0.0, -0.0, -0.0, -1.0, -1.0, 0.0, 0.0, -1.0, -1.0, 10.0, -0.0, 4.0, -3.0,
-1.0, -4.0, -2.0, -6.0, -3.0, -3.0, -7.0, -5.0, -30.0, -4.0, -2.0, 0.0, 0.0,
-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -733236331.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0]
Написанная мною производная верна, поскольку я проверил с помощью scipy.optimize.check_grad
, и она возвращает 0.00013283768452133855.
Однако для некоторых элементов производные значения очень высокие , Это из-за коэффициентов, которые я получил из моделей глубокого обучения. Когда я пытаюсь приписать эти коэффициенты низкому значению, оптимизатор может работать и сходиться. Итак, кто-нибудь может объяснить мне, почему это происходит?
Уравнение дохода составляет
P1*(e^(beta1*ln(Price1)) + P2*(e^(beta2*ln(Price2))+ ………. + P200*(e^(beta200*ln(Price200))
Derivative is array of [(beta1*(e^(beta1*ln(Price1)))+(e^(beta1*ln(Price1)),...……..,(beta200*(e^(beta200*ln(Price200)))+(e^(beta200*ln(Price200))]