Python scipy.optimize.basinhoing,目标函数的非数值参数
我正在尝试使用模拟退火/basinhopping来找到语法对象的最小描述长度,并根据该语法找到数据 我自己定义语法对象,以及Python scipy.optimize.basinhoing,目标函数的非数值参数,python,numpy,scipy,mathematical-optimization,Python,Numpy,Scipy,Mathematical Optimization,我正在尝试使用模拟退火/basinhopping来找到语法对象的最小描述长度,并根据该语法找到数据 我自己定义语法对象,以及take_step(这是语法上的一种变异): 问题:我得到一个错误: File "C:\Users\Sefi\Anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 556, in _approx_fprime_helper grad[k] = (f(*((xk + d,) + args)) - f
take_step
(这是语法上的一种变异):
问题:我得到一个错误:
File "C:\Users\Sefi\Anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 556, in _approx_fprime_helper
grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]
TypeError: unsupported operand type(s) for +: 'Grammar' and 'float'
如何使算法单独引用take step函数,以便找到目标函数当前值附近的邻居?此处无法定义小步长
也许盆地跳跃无法处理非数值参数?
如果是这样的话,您是否知道Python中的广义模拟退火算法可以做到这一点(我可以自己编写一个,但它的效率远远低于scipy…)Basinhopping不适合离散优化,因为局部最小化步骤要求目标函数是连续的。如果你想走模拟退火的路线,你也许可以试试这个软件包。A也可能有意义。如果不了解更多关于您试图解决的具体问题的信息,就不可能提出有意义的建议。明白。谢谢你的回答和参考!你所说的在实践中或多或少是正确的。但原则上,只要选择能够处理离散函数的局部极小化子,basinhopping就可以用于离散优化。basinhopping不适用于离散优化,因为局部极小化步骤要求目标函数是连续的。如果你想走模拟退火的路线,你也许可以试试这个软件包。A也可能有意义。如果不了解更多关于您试图解决的具体问题的信息,就不可能提出有意义的建议。明白。谢谢你的回答和参考!你所说的在实践中或多或少是正确的。但原则上,只要选择一个能够处理离散函数的局部极小值,basinhopping就可以用于离散优化。
File "C:\Users\Sefi\Anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 556, in _approx_fprime_helper
grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]
TypeError: unsupported operand type(s) for +: 'Grammar' and 'float'