gpt4 book ai didi

prolog - 您如何计算 Prolog SWI 或 CHR Prolog SWI 中的回溯量

转载 作者:行者123 更新时间:2023-12-01 03:49:40 30 4
gpt4 key购买 nike

我在序言SWI与CHR(约束处理规则)创建多个谜题解决者

一切都很好,但是,我喜欢测试哪个求解器是最好的。
因此,我想搞清楚,这解算器使用回溯的最少。

是否有一种聪明的方法可以找出(或打印出)求解器解决特定难题所需的回溯量?

从逻辑上讲,计数会有所帮助,但它不会 --> 回溯! <--。
此外,在屏幕上打印一个新行是不是有效,因为SWI的GUI的。您不能打印超过+/- 50行,不能正确选择

最佳答案

考虑到约束处理规则维护“约束存储”并且规则的执行可能,实现这一点确实并非易事。添加 , 重写 删除 运行时来自此商店的规则。这会改变程序的状态,并使得在整个执行过程中跟踪全局状态有些困难。
但是,由于 CHR 已集成在 SWI 中,因此您可以使用非逻辑操作 nb_setarg/3保持计数回溯。
文档中的注释:

  • Compatible with GNU-Prolog's setarg(A,T,V,false)

  • This implementation is thread-safe, reentrant and capable of handling exceptions


编辑
至于在哪里计算回溯,这当然取决于您的程序,但通常会出现在定义搜索失败条件的 CHR 约束规则中,允许它“分支”(= 重写 CHR 规则)。每次在搜索期间重写约束存储时,它都表示回溯,您可以使用上面定义的操作相应地增加计数器。
考虑一个小的、抽象的例子:
invalid_state ==> increment_backtracks, fail.
guess <=> branch

关于prolog - 您如何计算 Prolog SWI 或 CHR Prolog SWI 中的回溯量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23958087/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com