python为scipy中的约束创建动态字典

时间:2019-05-23 20:59:02

标签: python loops dictionary optimization minimize

我正在使用scipy.optimize.minimize(...)例程,我需要指定采用以下形式的constraints参数:

N = 50
cons = ({'type': 'ineq', 'fun': lambda x: x[0]<x[1]},
               {'type': 'ineq', 'fun': lambda x: x[1]<x[2]},
               {'type': 'ineq', 'fun': lambda x: x[2]<x[3]}, 
               ...)

包含格式为{'type':'ineq','fun':lambda x:x [i]的$ N $元组

我想本着

的精神使用循环(或其他方式)创建此类字典
cons = dict([{'type':'ineq','fun':lambda x[i]<x[i+1]} for i in range(0,N)])

我尝试过:

cons = zip(['fun' for i in range(0,N)], [lambda x: x[i]<x[i+1] for i in range(0,N)])

但是它不起作用,我也不知道如何管理几个键和值。

1 个答案:

答案 0 :(得分:1)

这个问题很难解决,因为python如何进行后期绑定关闭...请参见this answer。 本质上,您需要这样做:

N = 50
cons = tuple({'type':'ineq','fun':(lambda x, i=i: x[i] < x[i + 1])} for i in range(N))
print(cons[0]['fun']((1, 2, 3)))