【问题标题】:Programmatically identify Mosek's solution type parameter以编程方式识别 Mosek 的解决方案类型参数
【发布时间】:2021-09-30 06:03:05
【问题描述】:

首先,Mosek 的初始化 API 效果很好。我们能够将优化速度提高 25 倍,仅通过对样本问题进行决策变量初始化(所有变量都受积分约束)。

现在,我们正在解决一个新的大规模 MIQCQP 问题(一些变量积分受限且一些连续),我们想要初始化所有这些变量。

在使用task.putxxslice API [1] 时,我们在确定whichsol 参数的值时遇到了问题。

疑问:

  1. 由于我们的问题既有积分又有连续,用whichsol = mosek.soltype.itg代替所有变量(积分和连续)是否正确?

  2. 我们的最终目标是添加此通用支持自定义 Cvxpy。我们几乎已经实现了这一点 - 是否有任何编程方式来决定 Cvxpy 中的whichsol?或者更好地问 - 这是正确的方法吗?

if num_bool + num_int > 0:     # if problem is Mixed-integer (some integral, some contiguous)
    whichsol = mosek.soltype.itg
elif inverse_data['is_LP']:    # if problem is LP
    whichsol = mosek.soltype.bas 
else:                          # all other cases
    whichsol = mosek.soltype.itr  

for idx, initial_guess in zip(idx_list, initial_guess_list):
    task.putxxslice(whichsol, idx, idx+1, [initial_guess])

[1] - https://docs.mosek.com/latest/pythonapi/optimizer-task.html#mosek.task.putxxslice

【问题讨论】:

    标签: python cvxpy mosek


    【解决方案1】:

    在Mosek中设置初始点的原因是:

    1. 当问题具有整数变量时,混合整数求解器的起始可行点,在这种情况下设置itg

    2. 热启动单纯形求解器,在这种情况下设置bas

    3. 热启动圆锥/内点求解器,在这种情况下设置为itr,尽管此选项只是理论上的,因为目前 Mosek 不会热启动并且只是忽略该解决方案。

    通常,如果问题中有任何整数变量,那么只有itg 解决方案是相关的。如果问题是线性的并且通过 Mosek 参数显式选择单纯形求解器,则只有 bas 解决方案是相关的。

    但是,假设问题有整数变量,但用户设置 Mosek 参数iparam.mio_mode=ignore,因为现在只想解决 LP 松弛问题。有人严重需要这种组合的可能性极小,但至少在原则上是可能的。然后怎样呢?有很多这样的极端情况,您必须明确检查大量 Mosek 参数(这些参数会随着时间而变化)才能做出决定。

    解决此问题的一种方法是设置所有三个原始解决方案,并设置参数iparam.remove_unused_solutions。然后,一旦 Mosek 在内部决定使用哪个优化器,它就会清除那些此时不相关的解决方案。

    另一个选项是您只设置itg 解决方案。除了上述 1. 之外,任何 cvxpy 用户都不太可能使用此功能。

    【讨论】:

    • 谢谢 Michal,这很有道理!如果我们的问题是混合整数并且我们想要初始化连续变量 - 即使这样我们可以使用itg吗?
    • 是的,整个解决方案都集中在一个地方,在本例中为 itg
    • 知道了。只是最后一个问题——这种解释是否正确:1)对于 MI 问题——mosek 总是使用integer solver。 2) 对于连续问题 - mosek 始终使用 interior-point solver(和 simplex solver - 仅在明确指定时)
    • 是的,有一个额外的扩展 2):如果连续问题恰好是线性的,那么在内点求解器之后它还会执行基识别,因此bas 解决方案也可以像单纯形一样使用也被跑了。也可以使用参数禁用此行为。
    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2014-12-15
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多