- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我做了两个实现来解决 Shikaku 难题。一个使用顶部、左侧、宽度和高度 (TLWH) 作为每个矩形的参数,另一个使用顶部、左侧、底部、右侧 (TLBR)。
出于某种原因,使用 TLBR 的速度要快得多,但我不太确定为什么。所以我想知道是否有办法查看在 TLWH 实现中是什么约束花费了如此长的时间。
有没有办法分析 ECLiPSe CLP 解决方案?
我目前在 Windows 上使用 TkEclipse。
最佳答案
在代码(尤其是对问题建模的部分)与其执行性能之间没有简单的关系,这是 CLP 程序的一个典型特征。最明显的例子是,通常可以通过添加冗余约束来大幅减少运行时间。
影响 CLP 性能的主要因素是搜索树的大小和形状,幸运的是和不幸的是,这取决于许多因素。幸运的是,因为它为我们提供了很多影响搜索树的选项。不幸的是,因为它很难预测性能。
第二个因素是约束传播的强度,这在某种程度上更直接地与模型的制定方式相关联。例如,单个“全局”约束(同时作用于许多变量)通常比具有许多较小约束的等效公式提供更强的传播。传播强度反过来影响搜索树的大小。
因此,要找出为什么您的两个实现表现如此不同,第一步是比较它们的搜索树。最简单的方法是查看找到解决方案所需的回溯 次数。如果您使用 search/6库谓词,您可以通过 Options
参数获取计数:
search(Xs, ..., ..., ..., ..., [backtrack(BT)]),
printf("Solution found after %d backtracks%n", [BT]),
我用了this Sikaku code作为我的 TLBR 模型,以及作为 TLWH 模型的修改版本。为了找到 p(15,1) 问题的解决方案,这些需要
TLBR: 0 backtracks
TLWH: 171 backtracks
显然,这两个程序做的事情非常不同。特别是,TLBR 模型似乎“更紧凑”得多,不需要太多搜索!
为了找出原因,我比较了搜索阶段开始前的计算状态(我刚刚删除了对搜索例程的调用,并打印了带有部分结果的网格 - 你可以也可以使用示踪剂和术语检查器工具,或其他可视化工具)。事实证明,在 TLBR 模型中,许多矩形已经有了它们的最终位置(即它们的坐标变量已经实例化),而在 TLWH 模型中它们都没有(它们的变量仍然可以取很多值)。
仔细观察一个子问题可以找到原因。只考虑水平坐标,假设 L 是左边缘,R 是右边缘,W 是矩形的宽度。 L和W的域给定,矩形必须覆盖点9。在TLBR模型中,这导致约束:
?- L::6..9, W::1..4, R#=L+W-1, L#=<9, 9#=<R.
L = L{6..9}
W = W{1..4}
R = R{9..12}
There is 1 delayed goal.
Yes (0.00s cpu)
而在 TLWH 模型中,我们必须以不同的方式编写最后一个约束,因为此时我们没有可用的 R 变量:
?- L::6..9, W::1..4, Rimplicit#=L+W-1, L#=<9, 9#=<L+W-1.
L = L{6..9}
W = W{1..4}
Rimplicit = Rimplicit{6..12}
There are 2 delayed goals.
Yes (0.00s cpu)
我们在 TLWH 模型中看到,当从 L+W-1
计算时,右边缘的域没有反射(reflect)它必须至少为 9 的信息。我们丢失了一些不分解 L+W-1
子表达式的传播强度,我认为这是传播较弱的主要原因。
搜索树的不同还有另一个原因,就是我们要标记的变量不同:[L,R]
在一种情况下,[L,W]
在另一个。特别是在使用域敏感变量选择启发式时,这可能会导致非常不同的行为。
关于clpfd - 剖析 ECLiPSe CLP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356702/
我想在文件系统上手动创建文件夹/文件,以便在 eclipse 的工作区中创建新项目,并在启动 eclipse 并选择工作区时显示在项目资源管理器中。 执行此操作需要创建哪些文件,它们需要位于何处? 请
我正在关注these instructions ,但在运行 mvn eclipse:eclipse 等命令时遇到问题。 我应该如何以及在哪里运行该命令? 我的设置: Windows 7 32 位 面向
是否有任何命令可以在不实际启动 eclipse 的情况下创建 eclipse 工作区?我希望该命令成为脚本的一部分。创建工作区后,将对其进行配置(例如文本编码),然后用于将项目导入到 RTC。我知道下
我想为 Eclipse 插件创建一个自动安装程序(即不通过“更新管理器”)。我的场景很简单:用户关闭 Eclipse,将下载的 JAR 放入 dropins 文件夹,启动 Eclipse,其余的过程是
每当我们想要使用现有源位置创建 Eclipse 项目时,我们将选择现有源位置(根)作为项目位置。 Eclipse 将在该源的根目录中创建所有项目特定文件。 现在,出于某种原因,如果我们想用不同的设置重
可能被问过多次; 有没有办法从控制台(Linux 或 Windows)刷新 Eclipse 工作区文件夹。 我知道有 Ant 任务可以做到这一点。但很想知道是否有命令行技巧。 最佳答案 不,您能做的最
我说的是工具栏上的小图标。 网络上似乎没有任何这样的问题,它们都指的是 android 或自定义应用程序,而不是与 eclipse 捆绑在一起的图标。 我想知道是否有人尝试过这个,或者可以告诉我它不值
如何使用 Eclipse 比较两个文件? (目前我正在使用 WinMerge 。) 最佳答案 要在 Eclipse 中比较两个文件,请首先在 Project Explorer/Package Expl
我正在尝试将我在一个带有数据库的 Eclipse JEE6 项目中所做的所有工作转移到另一个 Eclipse 程序。我知道我将不得不重新配置很多并重建很多库文件,但是尽可能多地传输的最简单方法是什么?
在 Eclipse 中加载我的工作台并启用 TFS 插件时,它挂起。与此类似: http://social.msdn.microsoft.com/Forums/vstudio/en-US/85c1d3
Eclipse 可以通过插件包含许多不同的功能集。您是否在一个 Eclipse 中安装所有插件?或者您是否从 spring 安装 STS,从 adobe 安装 Flex eclipse,甚至从 ecl
我错误地单击了“在 Eclipse 首选项中将目标运行标记为忽略在 Eclipse 构建中(实验)”: 在哪里/如何撤消此操作? 最佳答案 m2e 使用文件 YOUR_WORKSPACE/.metad
我是 Maven 新手。我尝试执行 >mvn eclipse:eclipse -Dwtpversion=2.0。但我收到以下错误: D:\test\CounterWebApp>mvn eclips
当我运行多个 Eclipse 实例时,操作系统不断请求上述权限。 我已经授予了该权限,并且我尝试了多次禁用和启用该权限。 我正在使用, macOS Catalina(版本:10.15.3 (19D76
我有一个 Maven 项目,其中我在项目构建期间使用 wsimport 作为目标来使用 Web 服务。 org.codehaus.mojo
当尝试使用 eclipse 新软件功能安装 eclipse 时,出现此错误: Cannot complete the install because one or more required item
我已经下载了整个 Eclipse Helios/Indigo 版本的源代码。现在我想对它进行一些修改等等。所以我导入了整个源代码,但现在我在编译时遇到了 n 个错误。此外,我正在尝试 RunAs> 插
我已经安装了 eclipse Oxygen 并且正在尝试连接到 Eclipse 市场,以安装插件,它给出了以下异常 - org.eclipse.equinox.p2.core.ProvisionExc
我的 IDE 中安装了来自 Sonatype 的 m2Eclipse 插件。它允许我通过右键单击 pom.xml 文件并导航到“运行方式”菜单来运行各种 Maven 命令(打包、安装等)。 但是,我还
我在 Windows7 64 位上运行 Maven 3 时遇到问题。当我执行maven eclipse:eclipse(我使用maven-eclipse-plugin 2.8)时,maven不会创建任
我是一名优秀的程序员,十分优秀!