【问题标题】:python create dynamically dictionary for constraints in scipypython为scipy中的约束创建动态字典
【发布时间】:2019-05-23 20:59:01
【问题描述】:

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

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)])

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

【问题讨论】:

  • 你想在第一个代码块上创建?
  • 类似[{'type':'ineq','fun': lambda x: x[i] &lt; x[i+1]} for i in range(0,N)]?
  • @yatu 我虽然是这样,但 lambda 让事情变得棘手。

标签: python loops dictionary optimization minimize


【解决方案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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多