Python 如何使用分类变量进行scipy优化

Python 如何使用分类变量进行scipy优化,python,scipy,scipy-optimize-minimize,Python,Scipy,Scipy Optimize Minimize,考虑以下问题: 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.optimiz

考虑以下问题:

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
导入numpy
导入scipy.optimize
def f(x):
返回(x[0]==1)*(x[1]+2)**2-(x[0]==0)*(x[1]+1)**2
kwargs={
“方法”:“信任结构”,
"jac":错,,
‘界限’:[(0,1),(0,1)],
}
m=scipy.optimize.minimize(f,numpy.array([1,0]),**kwargs.x
打印(m)

#[0.91136811 0.19026955]也许您可以看看
hyperopt
软件包。但请检查它是否满足您在精度和性能方面的需求。我认为它主要是为了机器学习中的超参数优化而创建的,在机器学习中,精度可能不是最大的问题。在hyperopt中,您可以将一些值定义为离散的(甚至是分类的),而其他值则是连续的。一般的方法是混合整数非线性规划(例如Couenne)。但这是否可行取决于这么多细节。也许你可以看看
hyperopt
软件包。但请检查它是否满足您在精度和性能方面的需求。我认为它主要是为了机器学习中的超参数优化而创建的,在机器学习中,精度可能不是最大的问题。在hyperopt中,您可以将一些值定义为离散的(甚至是分类的),而其他值则是连续的。一般的方法是混合整数非线性规划(例如Couenne)。但这是否可行取决于这么多细节。