我有一个字符串输入文件如下(每行一个方程式): 1.0 - x [0] - x [1] x [0] + x [1]
我试图在python中使用eval()将这些方程式转换为lambda函数,然后在优化方案中使用它们。这是我的工作:
def gen_const(input):
list = input.read_eqs()
for i in list:
m = lambda x: eval(i)
cons.extend([{'type': 'ineq', 'fun': m}])
return cons
在优化方案中使用时,此缺点会失败。但是,如果我只考虑循环内的第一轮(即第一个等式),则约束可以正常工作:
def gen_const(input):
list = input.read_eqs
for i in list[0:1]:
m = lambda x: eval(i)
cons.extend([{'type': 'ineq', 'fun': m}])
return cons
奇怪的是,当我复制完全相同的方程式(从输入文件中复制,相同的字符,间距)时,它也可以正常工作:
def gen_const(input):
list = input.read_eqs
m0 = '1.0 - x[0] - x[1]'
m1 = 'x[0] + x[1]'
cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m0)}])
cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m1)}])
return cons
所以我在循环中看到eval()的这种奇怪行为,我真的卡住了。我已经读过eval是邪恶的并且通过替代方案进行搜索但是找不到更好的方法来解决我的问题。 我非常感谢你的帮助。