声明基于跳跃优化的约束条件

3

我在使用scipy.optimize.basinhopping创建带有约束条件的字典时遇到了问题。我能够让我的代码运行(没有约束条件),但是答案不符合实际情况,因为我需要强制执行一些约束条件。目前,我只尝试让一个约束条件起作用,但对于最终的解决方案,我需要找出如何实现多个约束条件。我现在的代码是:

x0 = [f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11]
args = arg1,arg2,arg3,arg4
def func(x,*args)
     #Do some math
     return result

#This is where I need help most
cons = {'type':'ineq','fun': lambda x: x[5]-x[4]}

minimizer_kwargs = {"method":"COBYLA","args":"args","constraints":"cons"}
ret = scipy.optimize.basinhopping(func,x0,minimizer_kwargs=minimizer_kwargs)

但是在尝试运行时,出现了以下错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 601, in runfile
    execfile(filename, namespace)
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 66, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "C:/Python27/Scripts/SpectralResearch/mainScripts/main.py", line 121, in <module>
    ret = scipy.optimize.basinhopping(func,x0,minimizer_kwargs=minimizer_kwargs)
  File "C:\Python27\lib\site-packages\scipy\optimize\_basinhopping.py", line 605, in basinhopping
    accept_tests, disp=disp)
  File "C:\Python27\lib\site-packages\scipy\optimize\_basinhopping.py", line 72, in __init__
    minres = minimizer(self.x)
  File "C:\Python27\lib\site-packages\scipy\optimize\_basinhopping.py", line 279, in __call__
    return self.minimizer(self.func, x0, **self.kwargs)
  File "C:\Python27\lib\site-packages\scipy\optimize\_minimize.py", line 432, in minimize
    return _minimize_cobyla(fun, x0, args, constraints, **options)
  File "C:\Python27\lib\site-packages\scipy\optimize\cobyla.py", line 218, in _minimize_cobyla
    raise TypeError('Constraints must be defined using a '
TypeError: Constraints must be defined using a dictionary.

我需要强制执行某些变量大于其他变量的约束条件。我一直查看文档([1],[2])和文章,但没有找到有效的方法。您有什么想法,我可能做错了什么吗?

1个回答

5
minimizer_kwargs = {"method":"COBYLA","args":args,"constraints":cons}

您传递的是字符串"args"和"cons",而不是这些名称的变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接