Для упрощения, скажем, я могу описать систему с
переменными x1
и x2
,
параметрами p1
и p2
и
ограничения f(x, p) = 0
и g(x, p) = 0
:
Например:
f(x1, x2, p1, p2) = x1^2 * p1 + x1^2 * p2 + x2 = 0
g(x1, x2, p1, p2) = x2^2 * p2 + x1 * p1 = 0
Теперь предположим, что с учетом истинное значение параметров p1
и p2
, существует (а) root (а). Однако в моем случае параметры определены неидеально, и нелинейный root -поискатель типа scipy.optimize
s fsolve
не работает. Можно ввести параметры как переменные и попытаться найти корни, но увеличить переменные и параметры на порядок, как в моей реальной системе, и ограничения станут очень трудно соблюдать.
Следовательно , Я искал пакеты оптимизации в python, которые могли бы «решить» мой набор нелинейных уравнений. И именно здесь мое непонимание оптимизации представляет собой препятствие.
Если я правильно понимаю, как изложено, мои уравнения являются ограничениями, что означает, что они должны соблюдаться, чтобы мой дизайн был успешным. Однако я понял, что, учитывая несовершенный характер параметров (или большое количество возможных переменных), мне нужно иметь одну (или несколько) целевых функций, которые нужно минимизировать, а не ограничивать.
Все уравнения, описывающие мою систему, имеют одинаковую силу, поэтому я не думаю, что могу просто выбрать одно или несколько уравнений в качестве целевых функций, а остальные останутся ограничениями. Похоже, мне нужно, чтобы все мои уравнения были целевыми функциями.
Поэтому у меня есть два вопроса:
- Могу ли я c иметь все мои уравнения как целевые функции и
- Какой пакет python позволит мне минимизировать эти целевые функции?
Я рассмотрел cyipopt
, casadi
, pyomo
и DEAP
, но я немного заблудился. Я думаю, что как только моя модель моей системы будет лучше определена, я буду точно знать, что искать. Однако, если можно предоставить код для моего простого примера, я был бы очень признателен.
PS: Моя модель в ее нынешнем виде имеет 11 переменных и 11 * 5 параметров (пять коэффициентов, представляющих полином 4-й степени для каждого переменная). Я также могу добавить ограничения к переменным, если необходимо, в пакете оптимизации.