我是非线性编程的新手,我读到 mystic 在有效解决这类问题方面相当不错。我正在尝试实现这个数学模型(根据本文的多对象最大重叠匹配):
数学模型 大致如下:
"""
Maximize:
sum_{i=1 to max i} sum_{j=1 to max j} C_{ij} z_{ij}
Subject to:
4 - min(sum_{i=1 to max i}z_{ij},2) - min(sum_{j=1 to max j}z_{ij},2) >= z_ij
C_{ij} >= z_{ij}
z_{ij} in {0, 1}
where the decision variables are:
C_{ij}: pixel overlap between i reference obj and j output object
defined as:
C_{ij} = R_i intersect O_j (value in matrix)
and:
z_{ij}: R_i is matched to O_j
"""
我认为这将类似于布尔示例。但我正在处理矩阵输入以找到最佳的最大匹配。Matches(z_ij) 可以是一对一、多对一、一对多的关系,但不能是多对多的。
示例矩阵输入 (C_ij)
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 5600.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 6300.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1600.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 2500.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1200.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 4800.0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1600.0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2400.0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1200.0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 300.0, 1000.0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 400.0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 2500.0, 600.0, 600.0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1600.0, 800.0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1600.0, 1600.0, 1971.428571428571]]
我不确定要放置什么边界以及如何设置 ieqn 约束以引用 z_ij