【发布时间】:2021-06-06 16:45:02
【问题描述】:
我正在尝试在给定字符串列表列表的情况下自动生成 lambda 函数,以便为 scipy.optimize.minimize() 例程生成约束。我有一个 list 的字符串对,我需要将其传递给每个 lambda 函数约束,如下所示:
list = [
["parameter1", "parameter2"],
["parameter3", "parameter4"]
]
constraints = []
for pair in list:
constraints.append( {"type":"ineq","fun": lambda p: p[param_names.index(pair[0])]-p[param_names.index(pair[1])]} )
但是,当将此约束列表传递给scipy.optimize.minimize() 时,这些约束将被忽略。或者,当我像这样明确定义字符串时
cons = [
{'type':'ineq','fun': lambda p: p[param_names.index("parameter1")]-p[param_names.index("parameter2")] },
{'type':'ineq','fun': lambda p: p[param_names.index("parameter3")]-p[param_names.index("parameter4")] }
]
scipy.optimize.minimize() 遵守约束。我相信这是我如何定义 lambda 函数的问题,即尝试将变量(字符串)传递给 lambda 函数,而不是 scipy.optimize.minimize() 的问题。我需要我的代码能够解析上述字符串对列表,以自动定义这些 lambda 函数和约束,因为列表可能会因情况而异。
有没有办法将 lambda 函数外部的变量传递给 lambda 函数?或者我应该这样做的另一种方式?
【问题讨论】:
-
可以肯定的是,列表中的某些字符串缺少“e”(cmp.:
paramter1和parameter1)。错别字? -
是的,这是一个错字,抱歉。
-
所以没有错字代码可以按预期工作?
-
错字不会改变问题或问题。这是我在此处输入问题时的错误。
-
您能提供一个minimal, reproducible example吗?我无法重现所描述的行为。