Z3返回未知值

Z3返回未知值,z3,smt,Z3,Smt,我有一组Z3无法处理的简单约束: 有没有办法调整约束以获得结果? 这是一个更大的约束集(数千)的简单示例,但是 我不知何故感到不安,因为即使在这样简单的例子上,它也不起作用 提前谢谢 您的问题具有非线性约束。虽然Z3在大多数情况下都可以处理这些问题,但混合使用Ints和Real似乎使其超出了当前的能力。如果您只需将Reals用于s_0_1、s_0_2等变量,我相信Z3将能够解决此问题。(您似乎有足够的值约束,因此我相信不会有建模问题。) 我认为莱昂纳多多次表示,即将发布的版本将在存在非线性约束

我有一组Z3无法处理的简单约束:

有没有办法调整约束以获得结果? 这是一个更大的约束集(数千)的简单示例,但是 我不知何故感到不安,因为即使在这样简单的例子上,它也不起作用


提前谢谢

您的问题具有非线性约束。虽然Z3在大多数情况下都可以处理这些问题,但混合使用
Int
s和
Real
似乎使其超出了当前的能力。如果您只需将
Real
s用于
s_0_1
s_0_2
等变量,我相信Z3将能够解决此问题。(您似乎有足够的值约束,因此我相信不会有建模问题。)


我认为莱昂纳多多次表示,即将发布的版本将在存在非线性约束的情况下更好地支持组合理论。

您的问题存在非线性约束。虽然Z3在大多数情况下都可以处理这些问题,但混合使用
Int
s和
Real
似乎使其超出了当前的能力。如果您只需将
Real
s用于
s_0_1
s_0_2
等变量,我相信Z3将能够解决此问题。(您似乎有足够的值约束,因此我相信不会有建模问题。)


我认为莱昂纳多多次表示,即将发布的版本将在存在非线性约束的情况下更好地支持组合理论。

Levent是正确的,问题在于使用混合整数和实非线性算法。我认为有两种可能的解决办法。我们可以用实变量替换所有整数变量,这是可以的,因为整数变量在您的问题中只能假设0或1个值(以下是解决方案:)。在这种情况下,将使用Z3中的新nlsat解算器。另一种选择是用布尔变量替换整数变量,并使用
If
s将问题线性化。以下是此解决方案的链接。第二种解决方案的规模应该更好。Levent是正确的,问题是使用混合整数和实非线性算法。我认为有两种可能的解决办法。我们可以用实变量替换所有整数变量,这是可以的,因为整数变量在您的问题中只能假设0或1个值(以下是解决方案:)。在这种情况下,将使用Z3中的新nlsat解算器。另一种选择是用布尔变量替换整数变量,并使用
If
s将问题线性化。以下是此解决方案的链接。第二种解决方案应该扩展得更好。