考虑以下问题:
import numpy
import scipy.optimize
def f(x):
return (x[0] == 1)*(x[1] + 2)**2 - (x[0] == 0)*(x[1] + 1)**2
kwargs = {
'method': 'trust-constr',
'jac': False,
'bounds': [(0, 1), (0, 1)],
}
m = scipy.optimize.minimize(f, numpy.array([1, 0]), **kwargs).x
print(m)
# [0.91136811 0.19026955] <- wrong result
我想在空间上优化这个功能
x[0] \in {0,1}
x[1] \in [0,1]
有没有办法指定 x[0] 不应该是一个真实的值(即行上的一个值[0,1]
),而只能是 0 或 1?
我目前的做法是执行 N 次优化,每个 x[0] 选项一个。问题是,如果有多个分类变量,这会迅速爆发。