Optaplanner用于安排几何形状和区域

时间:2016-10-25 20:29:01

标签: java algorithm geometry optaplanner

我想使用OptaPlanner来安排最能代表地图区域的任务。基本上,我在地图上有一定数量的正方形和一些具有不同优先级的圆,我需要优化正方形的位置以与圆相交,以优化与正方形相交的圆的优先级得分

我的问题在于决定哪些对象应该是规划实体,哪些应该是问题事实。 OptaPlanner文档here表明

  

在多对一关系中,通常是计划实体类的许多方面。引用另一侧的属性是计划变量。例如,在员工排班中:计划实体类是ShiftAssignment,而不是Employee,计划变量是ShiftAssignment.getEmployee(),因为一个Employee有多个ShiftAssignments,但一个ShiftAssignment只有一个Employee。

这似乎表明Circle将是规划实体,因为许多圈子可以被一个Square激活。因此,计划变量将是Circle.activatedBy()。但是,稍后在文档中,它说明了

  

计划实体是在解决期间发生变化的JavaBean(POJO)。

圆圈固定在2d平面上 - 正方形本身正在改变位置。此外,如果圆圈远离其他圆圈,或者优先级足够低,则圆圈很可能会被取消激活。在这些情况下,Circle.activatedBy()根本不会返回特定的方块。

我之前从未使用过optaplanner,所以我很欣赏一个使用哪个以及为什么要使用的解释。我还不太确定如何开始代表所有这些物体的2d平面,尽管我已经研究过GeoJSON和其他解决方案以确定两个多边形是否相交。很可能像SquarePosition这样的东西是最好的规划实体,虽然我不知道OptaPlanner如何可能,因为在2d平面上有一个多边形的无限多个潜在位置。

我的具体问题是:在这种情况下,规划实体注释会在Square上进行,而规划变量是Squares的X和Y坐标吗?如果是这样,那么为Squares创建移动的最佳方法是什么?在这种情况下,每个圆圈都有一个优先级分数,如果方形与圆相交,则将其分数添加到总分中。我想优化最高分,所以我考虑可能有正方形"轨道"在最高优先级的圆圈周围查看它可能与之交叉的其他圆圈,然后移动到下一个优先级圆圈并重复。尽管如此,这听起来并不是最佳的,据我所知,OptaPlanner的其他文档都没有涵盖这些类型的动作。

1 个答案:

答案 0 :(得分:0)

OptaPlanner 6.5无法优雅地处理2D​​表面或3D体积包装。在未来的版本中,我们将支持它。

话虽这么说,几年前我使用OptaPlanner组装了一个3D体积包装机来处理100万个物体IIRC:Packing Santa's Sleigh (here be dragons)

目前正在进行二维多边形表面包装研究:寻找CODeS小组的论文,特别是Tony Wauters撰写的论文。