У меня есть строковый входной файл, как показано ниже (одно уравнение на строку): 1,0 - x [0] - x [1] x [0] + x [1]
Я пытаюсь преобразовать этиУравнения для лямбда-функций с помощью eval () в Python, а затем использовать их в схеме оптимизации.Вот что я делаю:
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 - это зло, и искал альтернативы, но не смог найти лучшего способа, который бы помог моей проблеме.Буду очень признателен за вашу помощь.