#optimization #minimize
#оптимизация #минимизировать
Вопрос:
Я просто хочу минимизировать простую функцию, каждый пример, который я просматривал, ни к чему меня не привел.
import math
import numpy as np
import sympy as sp
from scipy.optimize import minimize
import scipy.optimize as optimize
R=1.5
k_1=2
a=1
n=a
alpha=0.25
beta=0.5
delta=0.9
def f_gob(x, y, z):
c_1=((1/x-y/x) R*k_1)/(1 delta*(1 alpha))
c_2=delta*x*(((1/x-y/x) R*k_1)/(1 delta*(1 alpha)))
l=n-(alpha*(delta*x*(((1/x-y/x) R*k_1)/((1 delta*(1 alpha))))))/(1-y)
return -1*(math.log(c_1) delta*(math.log(c_2) alpha*math.log(n-l) beta*math.log(z)))
f_gob(0.9996,0.332,0.7765)
x0 = [0.8,0.2,0.6]
res = minimize(f_gob, x0)
Большое вам спасибо.
Ответ №1:
Лучше:
def f_gob(a):
x = a[0]
y = a[1]
z = a[2]
c_1= ((1/x-y/x) R*k_1)/(1 delta*(1 alpha))
c_2=delta*x*c_1
l=n-(alpha*c_2)/(1-y)
return -1*(math.log(c_1) delta*(math.log(c_2) alpha*math.log(n-l) beta*math.log(z)))
f_gob([0.9996,0.332,0.7765])
Основная проблема заключается в том, что текущие уровни трех переменных решения x,y,z
передаются в виде единого массива, который я вызываю a
. Я просто распаковываю отдельные элементы, чтобы все было близко к тому, что у вас было. Передача данных в виде массива имеет смысл, особенно если вы хотите разрешить большое количество переменных (скажем, сотни).
Дополнительную информацию смотрите в документации: в третьем предложении объясняется формат вызываемой функции. Также проверьте примеры.