组合约束满足与优化

时间:2018-10-15 11:55:05

标签: python mathematical-optimization nonlinear-optimization sat mixed-integer-programming

问题

我基于平面相交袋创建了一组多边形。

schermafbeelding 2018-10-11 om 16 50 39

现在,我尝试通过组合优化来创建以下流形。

schermafbeelding 2018-10-11 om 16 50 51

  • 歧管约束最终模型中的每个边缘应入射到两个多边形。
  • 优化权重每个多边形都有一个置信度权重,模型应朝最高总体置信度进行优化
  • 优化简单性向更少的角(同一平面上的更多多边形)进行优化

尝试

想法是使用python-constraint生成可能的解决方案,并通过使用scipy.optimize优化每个多边形的权重来选择最佳拟合。

但是,尝试使用python-constraint进行以下操作,但它无法生成解决方案。

import constraint
problem = constraint.Problem()
problem.addVariables(range(len(polygons)), [True, False])

for idx, polygon in enumerate(polygons):
    edge_adjacent_polygons = [polygon[a][b]['polygon'] for a, b in polygon.edges()]
    if all([len(adjacent_polygons) > 2 for adjacent_polygons in edge_adjacent_polygons]):
        for adjacent_polygons in edge_adjacent_polygons:
            problem.addConstraint(lambda *adjacent_polygons: sum(adjacent_polygons) == 2, adjacent_polygons)
    elif any([len(adjacent_polygons) == 2 for adjacent_polygons in edge_adjacent_polygons]) & \
        all([len(adjacent_polygons) >= 2 for adjacent_polygons in edge_adjacent_polygons]):
        problem.addConstraint(lambda idx: idx == True, [idx])
    else:
        problem.addConstraint(lambda idx: idx == False, [idx])

我的其他想法是将其建模为NetworkX中的图形优化问题,并使用诸如min_weighted_vertex_cover之类的东西。还是使用jMetalPy库,但是我不清楚如何在这些方法中对这个问题进行建模。

问题

我知道此问题结合了非线性优化和组合满意度问题。我最重要的问题是;

  • 我的方法正确还是过于复杂?
  • 是否存在用于对此类问题进行建模的工具?

最初的问题(和图像)来自我尝试复制https://repository.kaust.edu.sa/handle/10754/627151的论文。在本文中,使用了专有的Gurobi求解器。由于许可证原因,我无法使用此求解器。

0 个答案:

没有答案