用Python求解具有正交约束的不等式系统

时间:2019-04-29 13:23:38

标签: python machine-learning sympy mathematical-optimization symbolic-math

我需要解决n个变量的不等式系统,其中一个不等式具有正交约束。不等式如下。

在我的特定问题中,已经证明解决系统问题始终可以得出一种精确的解决方案。由于正交性,我认为我不能使用线性编程。有人建议使用Python解决有效方法吗? Wolfram alpha可以做到! (您可以看到示例herehere)我知道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()

0 个答案:

没有答案