SciPy.optimize.minimize SLSQP忽略边界和约束

时间:2015-11-18 02:28:41

标签: python numpy scipy mathematical-optimization

我尝试使用SciPy.optimize.minimize最小化多变量函数。

我尝试了几种方法。 SLSQP似乎忽略了边界和/或约束。显然我的调用最小化有些问题,但我不确定是什么。

函数(在代码中称为f)太复杂了,无法在此描述。 我没有f的渐变,我也不知道形状。

import numpy as np
from scipy.optimize import minimize
....

# fields is an argument (list of strings)
indf1 = fields.index('f1')
indf2 = fields.index('f2')
methods=['Nelder-Mead','SLSQP','L-BFGS-B','COBYLA','Powell']
method_name = methods[1]
cons = ( {'type':'ineq','fun':lambda(x):np.array([x[indf1]])}, {'type':'ineq', 'fun':lambda(x):np.array([x[indf2]])}) 
bounds_pairs = [(None,None) for i in range(len(fields))]
bounds_pairs[indf1] =  (float_info.epsilon,1)
bounds_pairs[indf2] =  (float_info.epsilon,1)
minimize(f,np.array(initial_guess),method=method_name,bounds=bounds_pairs,jac=False,constraints=cons,tol=1e-12)

根据两个界限和缺点,字段f1和f2都应该是非负的。但是,这不起作用。

这是输出:

 status: 4
 success: False
 njev: 2
 nfev: 24
 fun: 1000000000000.0
   x: array([  0.00000000e+00,  -4.00000000e-04,  -1.00005897e-04,
    -6.09588623e-13,   1.00000014e-10])
 message: 'Inequality constraints incompatible'
 jac: array([  0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
    -6.71088639e+19,   0.00000000e+00,   0.00000000e+00])
 nit: 3

当我打印出参数的值时,我可以看到负值赋值:

{'f4': 0.0, 'f1': 1.5001161208210954e-08, 'f3': -0.00010000589702911378, 'f2': -6.0958862304687526e-13, 'f5': -0.00040000000000000002} 

这方面的任何线索?

* P.S:我之前发过一个类似的问题,但只得到了没有建设性和无关紧要的评论。

0 个答案:

没有答案