You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MOSEK Fusion Python API:获取优化过程中找到的可行解数量

获取MOSEK优化过程中的可行解数量(Fusion Python API)

针对混合整数规划(MIP)问题

MOSEK求解MIP时会跟踪找到的可行解,你可以通过两种方式获取计数:

1. 解析优化日志统计

MOSEK的日志会记录每次找到可行整数解的事件,你可以捕获日志后统计对应条目数量:

import mosek.fusion as mf
import io

with mf.Model("mip-example") as model:
    # 此处添加你的模型构建代码...

    # 将日志捕获到内存流
    log_buffer = io.StringIO()
    model.setLogHandler(log_buffer)

    # 执行求解
    model.solve()

    # 统计可行解数量
    log_content = log_buffer.getvalue()
    feasible_count = log_content.count("Int feasible solution found")
    print(f"累计找到可行解数量: {feasible_count}")

2. 通过回调函数实时计数

注册MIP回调函数,在每次发现新可行解时递增计数器:

import mosek.fusion as mf

feasible_count = 0

def mip_callback(phase, callback_info):
    global feasible_count
    # 触发条件:找到新的整数可行解
    if phase == mf.CallbackPhase.MIP_NEW_INT_POINT:
        feasible_count += 1

with mf.Model("mip-example") as model:
    # 此处添加你的模型构建代码...

    # 注册回调函数
    model.setCallback(mip_callback)

    # 执行求解
    model.solve()

    print(f"累计找到可行解数量: {feasible_count}")

针对连续优化问题(LP/QP等)

连续问题的可行域是连续空间,存在无穷多可行解,MOSEK不会统计可行解数量。这类场景下,你需要通过调整求解停止准则(如时间限制、最优间隙阈值)来平衡求解时间与解的质量。

平衡时间与解质量的参数设置

结合可行解计数需求,你可以通过以下参数控制MIP求解过程:

  • mipMaxSolutions:设定MOSEK最多寻找的可行解数量,达到后停止求解
  • optimizerMaxTime:设定求解的最长时间限制(单位:秒)
  • mipRelativeGap:设定最优间隙阈值,当间隙小于该值时停止求解

示例参数设置:

# 最多寻找50个可行解
model.setSolverParam("mipMaxSolutions", 50)
# 求解最长不超过30秒
model.setSolverParam("optimizerMaxTime", 30.0)
# 最优间隙小于1%时停止
model.setSolverParam("mipRelativeGap", 1e-2)

内容的提问来源于stack exchange,提问作者iLoveMosek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:03:17