使用累积函数进行矩形放置

Fab*_*zio 2 constraint-programming minizinc

我有一个矩形放置问题。我想要的是将大小为 x x y 的矩形放入另一个矩形而不重叠。我最终想要的是每个矩形的起点。

我为它制作了这部分代码,逻辑是它会沿着函数的高度和宽度累积检查 x 和 y 轴。但是,当我运行它时,它适用于一些实例,但不适用于其他实例。因此,我发布了一个特定实例,它在这里给出了重复点,以询问问题是什么以及可以进行哪些更改。

谢谢

constraint cumulative(start, x, y, height);
constraint cumulative(starty, y, x, width);
Run Code Online (Sandbox Code Playgroud)

hak*_*ank 5

如果您添加diffn约束框不重叠的约束,它应该工作,即

include(globals.mzn);
....
constraint diffn(start,starty,x,y);
... 
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅https://www.minizinc.org/doc-2.4.3/en/lib-globals.html?highlight=diffndiffn

10752 解决方案之一是:

15  15
10
1: 3 3  0 9
2: 3 4  12 0
3: 3 5  12 10
4: 3 6  12 4
5: 3 7  9 8
6: 3 8  9 0
7: 3 9  0 0
8: 3 12 3 0
9: 3 15 6 0
10: 6 3 0 12
Run Code Online (Sandbox Code Playgroud)

我在纸上检查了这是一个正确的解决方案,即没有重叠并且 15x15 框中的所有单元格都被覆盖。

  • 一般来说,您可以尝试使用不同的求解器(例如 Chuffed 和 Gecode)并测试不同的搜索启发式,有关更多信息,请参阅 https://www.minizinc.org/doc-2.4.3/en/mzn_search.html。 (2认同)