Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm SMT解算器是否有可能找到布尔公式的最优解?_Algorithm_Optimization_Boolean Expression_Z3_Smt - Fatal编程技术网

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,那么我们就有了 有限区