如何使用 scipy.optimize 计算出给定参数和约束的回归方程的最佳输入
How to figure out optimum inputs to regression equation given parameters and constraints using scipy.optimize
我需要做一些优化,但我的经验很少,不是 100% 从哪里开始。
假设我有一个回归方程;
y = exp(intercept + beta1 * x1 + beta2 * x2)
我如何使用 scipy.optimize 找到 x1 和 x2 的输入,使给定的 y 最大化;
intercept = 10
beta1 = 1.1
beta2 = 1.2
Constraints;
(x1 + x2) has to be less than 10
x1 has to be greater than x2
我不想暴力破解它(即手动计算 x1 和 x2 的每个组合的 y)。这是一个非常简单的例子,我希望能从中学习和构建。
我找到了一个名为 gekko 的软件包,它可以按照我的需要进行非线性优化。可以在此处找到该软件包的完整文档; Gekko Documentation
这是我用来解决简单示例问题的代码:
from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=0,ub=10)
x2 = m.Var(value=1,lb=0,ub=10)
# Init the coefficients
alpha = m.Const(value=7)
beta1 = m.Const(value=1.01)
beta2 = m.Const(value=1.02)
# Inequality constraints
m.Equation(x1 + x2 <= 10)
m.Equation(x2 < x1)
m.Obj(-1 * m.exp(alpha + x1*beta1 + x2*beta2)) # Objective
m.options.IMODE = 3 # Steady state optimization set to 3, change to 1 for integer
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
我需要做一些优化,但我的经验很少,不是 100% 从哪里开始。
假设我有一个回归方程;
y = exp(intercept + beta1 * x1 + beta2 * x2)
我如何使用 scipy.optimize 找到 x1 和 x2 的输入,使给定的 y 最大化;
intercept = 10
beta1 = 1.1
beta2 = 1.2
Constraints;
(x1 + x2) has to be less than 10
x1 has to be greater than x2
我不想暴力破解它(即手动计算 x1 和 x2 的每个组合的 y)。这是一个非常简单的例子,我希望能从中学习和构建。
我找到了一个名为 gekko 的软件包,它可以按照我的需要进行非线性优化。可以在此处找到该软件包的完整文档; Gekko Documentation
这是我用来解决简单示例问题的代码:
from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=0,ub=10)
x2 = m.Var(value=1,lb=0,ub=10)
# Init the coefficients
alpha = m.Const(value=7)
beta1 = m.Const(value=1.01)
beta2 = m.Const(value=1.02)
# Inequality constraints
m.Equation(x1 + x2 <= 10)
m.Equation(x2 < x1)
m.Obj(-1 * m.exp(alpha + x1*beta1 + x2*beta2)) # Objective
m.options.IMODE = 3 # Steady state optimization set to 3, change to 1 for integer
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))