Я пытаюсь оптимизировать выбор двигателя для данной задачи, т.е. качание двойного маятника. Кажется, что ipopt не решает проблему, потому что не распознает
Я пытался реализовать math.pow (), но делаю это
Код:
from math import pow
def _epsilon_max(M,n):
return M.epsilon_max[n]* pow(M.ratio_motor[n],0.8) -1== 0
m.epsilon_max_cons = Constraint(m.dofs,rule=_epsilon_max)
Выход:
TypeError: неявное преобразование типа Pyomo NumericValue `ratio_motor [1] 'в число с плавающей запятой отключено. Эта ошибка часто является результатом использования компонентов Pyomo в качестве аргументов одной из функций встроенного математического модуля Python при определении выражений. Избегайте этой ошибки, используя математические функции, предоставляемые Pyomo.
Вместо использования реализованной функции pow
работает только для целых чисел.
Код:
def _epsilon_max(M,n):
return M.epsilon_max[n]*(M.ratio_motor[n])**0.8 -1== 0
m.epsilon_max_cons = Constraint(m.dofs,rule=_epsilon_max)
Выход:
Ipopt 3.12.11: Ошибка при оценке ограничения 1011: невозможно оценить pow '(0,0.8).