【问题标题】:Using Cumulative function for Rectangular Placement使用累积函数进行矩形放置
【发布时间】:2020-07-05 19:10:11
【问题描述】:

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

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

谢谢

constraint cumulative(start, x, y, height);
constraint cumulative(starty, y, x, width);

【问题讨论】:

    标签: constraint-programming minizinc


    【解决方案1】:

    如果您添加 diffn 约束,该约束将框限制为不重叠,它应该可以工作,即

    include(globals.mzn);
    ....
    constraint diffn(start,starty,x,y);
    ... 
    

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

    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
    

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

    【讨论】:

    • 谢谢,这很好用。我有一个关于如何在运行此函数时减少较大数组的处理时间的问题。谢谢
    • 一般而言,您可以尝试使用不同的求解器(例如 Chuffed 和 Gecode)并测试不同的搜索启发式算法,有关此内容的更多信息,请参阅 minizinc.org/doc-2.4.3/en/mzn_search.html
    【解决方案2】:

    Cumulative 只会检查其单一维度的资源使用情况(这很有用,有时可以提供良好的修剪),它不能确保无重叠属性。 diffn global constraint 是用于确保不重叠的规范。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多