Algorithm SMT解算器是否有可能找到布尔公式的最优解?
我有一个很大的布尔公式需要解决,由于编校的原因,我必须在这里粘贴一个图像: 另外,我已经有一个函数Algorithm SMT解算器是否有可能找到布尔公式的最优解?,algorithm,optimization,boolean-expression,z3,smt,Algorithm,Optimization,Boolean Expression,Z3,Smt,我有一个很大的布尔公式需要解决,由于编校的原因,我必须在这里粘贴一个图像: 另外,我已经有一个函数area来测量4个整数的维数:area(c,d,e,f)=c−d |×| e−f | 我想做的不仅仅是计算公式是否令人满意:我正在寻找一个最佳的6元组(a,b,c,d,e,f),它使大公式为真,区域(c,d,e,f)大于或等于同样满足公式的任何其他6元组的维数 换句话说,根据大公式查找Max(面积(c,d,e,f)) 我想知道SMT solver是否可以帮助解决这个问题。我了解到Z3支持量词,并且
area
来测量4个整数的维数:area(c,d,e,f)=c−d |×| e−f |
我想做的不仅仅是计算公式是否令人满意:我正在寻找一个最佳的6元组(a,b,c,d,e,f)
,它使大公式为真
,区域(c,d,e,f)
大于或等于同样满足公式的任何其他6元组的维数
换句话说,根据大公式查找Max(面积(c,d,e,f))
我想知道SMT solver是否可以帮助解决这个问题。我了解到Z3
支持量词
,并且能够说出布尔表达式是否可满足。但问题是Z3
是否有助于找到函数区域的最佳解决方案
有人知道吗?如果您对SMT solver、Z3或其他算法有任何评论,我们将不胜感激……您的问题并不完全是一个可满足性问题,而是一个优化问题或更具体地说是一个混合整数规划问题。
这应该不会太难用任何解算器来解决,例如(因为你标记了你的问题Z3,而且你似乎正在使用Windows),它也提供了一个免费版本。你的问题不完全是一个可满足性问题,而是一个优化问题,或者更具体地说是一个混合整数规划问题。
这应该不会太难使用任何解算器来解决,例如(因为您标记了问题Z3,并且似乎正在使用Windows),它还提供免费版本。简而言之,是的
<> P>因为你的公式由量词组成,我不认为微软解决方案基金会是一个合适的选择。正如您所说,Z3支持量词,整数理论,并用于检查可满足性。尽管Z3不直接支持优化,但您可以使用通用量词轻松编码优化问题:
sat(a、b、c、d、e、f)=>(对于所有a1、b1、c1、d1、e1、f1。sat(a1、b1、c1、d1、e1、f1)&&
目标(a、b、c、d、e、f)>=目标(a1、b1、c1、d1、e1、f1))
其中:sat
是用于检查可满足性的布尔表达式,goal
是区域
函数,是优化目标
正如您所看到的,这个公式是从您在问题中的需求字面上翻译过来的。(a、b、c、d、e、f)
的赋值是您需要找到的最佳解决方案
另外,Z3有一个Linux发行版,并提供完全符合您偏好的OCAMLAPI。简而言之,是的
<> P>因为你的公式由量词组成,我不认为微软解决方案基金会是一个合适的选择。正如您所说,Z3支持量词,整数理论,并用于检查可满足性。尽管Z3不直接支持优化,但您可以使用通用量词轻松编码优化问题:
sat(a、b、c、d、e、f)=>(对于所有a1、b1、c1、d1、e1、f1。sat(a1、b1、c1、d1、e1、f1)&&
目标(a、b、c、d、e、f)>=目标(a1、b1、c1、d1、e1、f1))
其中:sat
是用于检查可满足性的布尔表达式,goal
是区域
函数,是优化目标
正如您所看到的,这个公式是从您在问题中的需求字面上翻译过来的。(a、b、c、d、e、f)
的赋值是您需要找到的最佳解决方案
另一方面,Z3有一个Linux发行版,并提供完全符合您偏好的OCaml API。目标函数使用非线性整数算术和量词。
非线性整数运算已经很难(不可判定)
没有量词,加上量词会使情况更糟。
如果你把排序从Int改为Real,那么我们就有了
非线性实数的有限量词消去
((设置选项:ELIM_量词true)
(设置选项:ELIM_NLARITH_量词true))
但这似乎不适合你似乎要解决的问题。
试着看看它是否可以表述为一个线性或二次优化问题。
有许多工具被调整为二次优化
(比如说Z3是布尔搜索,它们可能不太适合)。
例如,解决方案基金会,其中包括几个优化工具的插件。
可以使用Z3解决优化问题,
但典型的方法是在外部有一个循环
Z3的。首先,您提出要检查的问题是否令人满意,
然后你会寻找下一个令人满意的任务来改进
当前的一个(从满意模型中检索的)。
要搜索下一个令人满意的任务,您将声明
分配给您要查找的下一个值的“目标”改善了“目标”
指定给当前最佳值
这里有一些幻灯片
这应该是相关的。他们很快就要解决这类问题了。
这组幻灯片中的最后几张幻灯片演示了如何使用Z3的API进行搜索
模型。当然,如果您想为其编写解析器,也可以使用文本API
输出格式。有更多的方式与Z3交互以进行优化
问题,但它们都需要您在Z3上编程优化搜索。
当您有约束的布尔组合时,这仍然很有用
Z3支持的算术和其他领域,但标准优化问题
可以通过专用优化工具更好地解决问题。目标函数使用非线性整数算法和量词。
非线性整数运算已经很难(不可判定)
没有量词,加上量词会使情况更糟。
如果你把排序从Int改为Real,那么我们就有了
有限区