scipy.optimize.minimize的多个界限

时间:2018-07-03 01:37:38

标签: scipy

在scipy.optimize.minimize

w0 = np.ones(assets_num) / assets_num   #assets_num is an integer
bnds_1 = tuple((0.25, 1) for w in w0)
bnds_2 = tuple((0, 0.00001) for w in w0)
opt = minimize(obj_func, w0, methods='SLSQP', bounds=(bnds_1, bnds_2)) 

我希望让w放在(0,0.00001)U(0.025,1)中,这意味着我允许它为零(大约),但是一旦它大于零,则其下限应为0.025

那么我该如何修改界限以满足要求?感谢您的协助!

1 个答案:

答案 0 :(得分:0)

SciPy中的求解器无法处理这样的约束。他们期望一种可行的解决方案来满足所有约束条件。也就是说,假设您要求解bnds_1 bnds_2。无法指定bnds_1 bnds_2。 (并且这样做需要将某些离散优化添加到求解器中。)

您可以两次解决问题,一次只需bnds_1,一次只需bnds_2。然后选择两种解决方案中最好的一种。