通过CVXPY调用Mosek时,stat_key无法保存Verbose输出的问题
解决CVXPY调用Mosek时保存Verbose输出的问题
你误用了stat_key参数——这个参数是用来给Mosek的统计结果条目设置标识键的,不是用来保存控制台输出日志的,所以才会出现文件未生成的情况。
正确方案:使用Mosek日志文件参数
要把Mosek的verbose输出保存到文件,需要设置mosek.sparam.log_file_name参数,指定输出文件路径。同时配合verbose=True确保日志输出开启。修改后的代码如下:
import cvxpy as cvx import mosek import numpy as np A = np.random.randint(10, size=(16,32)) b = np.random.randint(10, size=16) c = np.random.randint(10, size=32) x = cvx.Variable(32, integer=True) prob = cvx.Problem(cvx.Maximize(c @ x), [A @ x <= b, x >= 0, x <= 10]) prob.solve( solver=cvx.MOSEK, mosek_params={mosek.sparam.log_file_name: 'results.txt'}, verbose=True )
运行后,results.txt会包含Mosek在终端输出的所有日志内容。
补充说明
- 若需调整日志详细程度,可额外设置
mosek.iparam.log参数,比如设为mosek.log.log_info或mosek.log.log_debug获取更细致的日志; - 如果需要同时在终端显示日志并保存到文件,除了上述原生参数方法,也可通过Python标准输出重定向实现,但前者更可靠。
内容的提问来源于stack exchange,提问作者Hennich
相关产品推荐
相关产品推荐

