python - 在 Python 中求解具有正交约束的不等式系统
问题描述
我需要为 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()
解决方案
推荐阅读
- javascript - 如何在 redux 工具包中将参数传递给 createAsyncThunk?
- github - 使用 Github Desktop 是什么导致推送到源挂断?
- javascript - Swiper Slider 在播放滑块时不会更新幻灯片活动状态
- javascript - 无法使用打字稿在对象中设置属性
- c++ - Gnu make:生成所有子目录的列表
- r - R中是否有一个函数可以检查两个XStrings是否在相应位置具有某种大小(n)的匹配子字符串
- python - 使用pygame colliderect后无法移动我的精灵
- scala - 数据未通过 Avro 序列化发送到 Kafka
- xaml - 从右到左的本地化在 android 上不起作用
- javascript - 我怎样才能找到是否点击了屏幕的某个部分?