Мне нужно решить систему неравенств для n переменных, где одно из неравенств имеет ограничение ортогональности.Неравенства заключаются в следующем.
В моей конкретной проблеме было доказано, что решение системы всегда приводит к одному точному решению.Из-за ортогональности я не думаю, что могу использовать линейное программирование.У кого-нибудь есть рекомендации по эффективным методам решения в Python?Wolfram alpha умеет это делать!(Вы можете увидеть пример здесь и здесь ) Я знаю, что sympy не может решить, потому что он может решить только для одномерного случая.Пожалуйста, включите время выполнения с любым ответом, который вы дадите!
Редактировать : Сразу после публикации я нашел z3.И он может делать что-то, что я хочу.Но я думаю, что это может быть излишним и не настолько эффективным, насколько это возможно (в расчете на линейное по n: = количество переменных для решения).
from z3 import Solver, Real
def solve_inequalities(z):
n = len(z)
s = Solver()
ys = [Real(f'y{i}') for i in range(n)]
s.add(sum(ys) == 0)
for i in range(1, n):
s.add(sum(ys[:i]) >= 0)
s.add(sum([(z[i]-ys[i])*ys[i] for i in range(n)]) == 0)
for i in range(n-1):
s.add(z[i]-ys[i] <= z[i+1]-ys[i+1])
s.check()
return s.model()