cvxpy - 使用 Mosek + Cvxpy 捕获超时异常
问题描述
我们正在使用 Cvxpy 和 Mosek 解决我们的大规模 MI 优化问题。
通常情况下,Mosek 消耗的运行时间比我们规定的两小时超时时间要长。
有没有办法系统地捕获那些超时异常?
最小可重现示例:
import cvxpy as cp
import numpy as np
import mosek
m = 15
n = 10
np.random.seed(1)
s0 = np.random.randn(m)
lamb0 = np.maximum(-s0, 0)
s0 = np.maximum(s0, 0)
x0 = np.random.randn(n)
A = np.random.randn(m, n)
b = A @ x0 + s0
c = -A.T @ lamb0
# Define and solve the CVXPY problem.
x = cp.Variable(n)
prob = cp.Problem(cp.Minimize(c.T@x),
[A @ x <= b])
# try:
prob.solve(cp.MOSEK, mosek_params={mosek.dparam.optimizer_max_time: 0.01}) # set verbose=True (to see actual error in solver logs)
# except Timeout exception
# print('Timeout occured')
print(prob.value)
def execute_other_important_stuff():
print("Hello world")
execute_other_important_stuff() # Not executed currently
解决方案
我不确定这是否是 Cvxpy 问题。
但是,一般评论是 Mosek 无法连续检查时间限制,因此它很可能会随着时间的推移而消失。
例如,对于 SDP,它必须计算一个可能很大的矩阵的特征值,并且在完成之前无法检查时间限制。
推荐阅读
- r - 如何使用 R 中的协变量准确建模多项式回归?
- ruby-on-rails - 在记录保存时添加现有的 has_many (current_user)
- c - 检查单元格在矩阵中的位置
- angular - 如何取消在 Angular 中发出的多个请求?
- android - Android:Android Build 失败并出现异常:错误:属性 tagetAlpha y 错误:属性 depensOn
- python - 如何使用 ldap passwd_s 函数更改用户密码
- javascript - Javascript str.split 在冒号字符处并添加换行符
- jquery - 如何使用jquery动态自动填充添加/删除字段?
- ruby - 为什么 ruby 在块内尝试 yield 时会抛出语法错误?
- python - 如何在 macOS 上使用 freeTDS 连接到本地 mysql