为什么Microsoft Solver Foundation求解线性规划时未返回可行解?
问题定位操作指南
1. 求解器初始化异常排查
返回报告显示求解器迭代次数为0,且求解完成状态为Unknown,说明求解流程未正式启动,优先排查以下配置问题:
- 确认是否完成目标函数定义:仅添加约束未设置最小化/最大化目标,是MSF返回Unknown状态的高频原因
- 检查变量边界合法性:时间变量t1、t2的上下界是否设置正确,避免出现上下界颠倒(如I1的r1大于d1)、未设置全局时间上界的情况
- 核对变量类型与求解器匹配性:当前调用的是MILP求解器,若时间变量为离散整数型,需确保已正确标记为Integer类型,类型不匹配会导致求解器无法初始化。
2. 模型可行性验证
排除配置问题后,按以下步骤排查模型约束冲突:
- 做最小规模测试:仅保留1个患者的所有约束,手动核验是否存在可行解:
- t1需落在I1=[r1,d1]区间,且满足t1 + p1 ≤ d1,保证首次预约时长可完整容纳
- 第二次预约区间I2=[t1 + p1 + g + x, t1 + p1 + g + x + l - 1]的右边界不可超过全局可用时间上限,且t2 + p2 ≤ I2的右边界
- 两次预约满足间隔约束t2 ≥ t1 + p1 + g + x
- 单患者测试通过后,逐步增加患者数量,直到复现Unknown状态,即可定位到冲突的参数或约束。
3. 求解器参数调整验证
当前使用默认原始单纯形法,可调整为对偶单纯形法开启不可行性检测,修改求解指令参数为:Simplex(Algorithm = Dual, Arithmetic = Default)
对偶法对不可行模型的识别效率更高,会返回明确的不可行状态而非Unknown。
关联求解器返回报告:
===Solver Foundation Service Report=== Date: 15/10/2021 16:00:21 Version: Microsoft Solver Foundation 3.0.2.10889 Express Edition Model Name: DefaultModel Capabilities Applied: MILP Solve Time (ms): 51 Total Time (ms): 103 Solve Completion Status: Unknown Solver Selected: Microsoft.SolverFoundation.Solvers.SimplexSolver Directives: Simplex(TimeLimit = -1, MaximumGoalCount = -1, Arithmetic = Default, Pricing = Default, IterationLimit = -1, Algorithm = Default, Basis = Default, GetSensitivity = False) Algorithm: Primal Arithmetic: Exact Variables: 133 -> 133 + 40 Rows: 40 -> 40 Nonzeros: 522 Eliminated Slack Variables: 0 Basis: Slack Pivot Count: 0 Phase 1 Pivots: 0 + 0 Phase 2 Pivots: 0 + 0 Factorings: 0 + 0 Degenerate Pivots: 0 (0,00 %) Branches: 0
关联模型示意图:
内容的提问来源于stack exchange,提问作者Alex Janse
相关产品推荐
相关产品推荐

