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

电力系统OTS问题中MATPOWER调用MOSEK求解非最优解的优化问询

关于MATPOWER调用MOSEK求解OTS问题的优化疑问解答

问题背景

在电力系统最优输电开关(OTS)场景下,通过MATPOWER调用MOSEK求解混合整数线性规划(MILP)问题,该问题包含极小化目标函数、若干线性约束及二进制变量。在IEEE 9节点测试算例中,求解器返回的解技术上合理正确,但并非最优:MOSEK分支定界算法得到的解需要断开2条线路,而手动推导的最优解仅需断开1条线路,且目标函数值更低。目标函数为:

Total cost = generation_cost + B*(number_of_switching_actions) 

其中B为手动设置的权重系数,用于调节开关操作的权重。

已尝试操作

  • 增大B值,无明显效果;
  • 手动验证认为的最优解,其目标函数值确实更低;
  • 在MATPOWER中设置MOSEK参数,代码如下:
%% load the options
mpopt = mpoption();
mpopt.model = 'DC';
mpopt = mpoption(mpopt, 'opf.dc.solver', 'MOSEK');

%% Set the Mosek solver parameters 
mpopt = mpoption(mpopt, ...
    'mosek.lp_alg', 0, ...  
    'mosek.max_it', 1000, ...
    'mosek.gap_tol', 1e-7, ...
    'mosek.max_time', 60, ...
    'mosek.num_threads', 4 ...
);
mpopt.verbose = 4 ; 

但优化间隙和计算时间无明显变化,MOSEK始终返回以下结果:

An optimal solution satisfying the relative gap tolerance of 1.00e-02(%) has been located.
The relative gap is 0.00e+00(%).
An optimal solution satisfying the absolute gap tolerance of 0.00e+00 has been located.
The absolute gap is 0.00e+00.

问题解答

1. 是否能更好地控制算法,以更多计算时间为代价找到更优解?

可以通过调整MOSEK的混合整数优化(MIO)参数,强制求解器进行更彻底的搜索:

  • 收紧间隙容忍度:直接设置MIO专用的间隙参数,比如mosek.mio_tol_rel_gap和mosek.mio_tol_abs_gap为1e-9级别的严格阈值,避免求解器提前终止。
  • 关闭启发式剪枝:设置mosek.mio_heuristic_level为0,减少求解器依赖启发式算法提前返回次优解的可能,让分支定界遍历更多分支。
  • 延长计算时间:将mosek.max_time从60调至300或600,给求解器充足时间探索解空间。
  • 调整分支策略:设置mosek.mio_branch_strategy为1(强分支策略),虽然计算速度变慢,但能更精准地选择分支变量,减少无效搜索。
  • 开启详细日志:将mpopt.verbose设为5,查看分支定界过程中上下界的变化,确认是否存在被遗漏的更优解。

2. 该问题是否与数值误差或约束公式有关(尽管当前解正确)?

大概率是约束建模或数值缩放的问题:

  • 约束检查:核实OTS问题中二进制开关变量与线路潮流的耦合约束是否正确。比如线路断开时的潮流约束是否严格置零,是否因数值精度问题被求解器判定为不可行。
  • 数值缩放:如果generation_cost的量级远大于B*(number_of_switching_actions),求解器会优先优化发电成本,忽略开关次数的减少。可调整B的量级至与发电成本匹配,或对目标函数进行归一化处理。
  • 完整性约束验证:确认MATPOWER是否将线路开关变量正确标记为二进制变量,可通过高 verbose 级别输出模型变量类型来验证。
  • 手动解可行性验证:将手动解代入MATPOWER的所有约束条件,检查是否严格满足(包括不等式约束的边界),若手动解处于约束边界,可能因数值误差被求解器判定为不可行。

3. MATPOWER是否会影响求解器的正常使用?

MATPOWER作为建模工具,可能在模型传递或参数映射环节出现问题:

  • 参数映射偏差:MATPOWER对MOSEK参数的封装可能存在偏差,比如你设置的mosek.gap_tol可能未正确传递给MIO的间隙参数。可直接使用原生参数结构体设置:
mpopt.mosek.params.MIO_TOL_REL_GAP = 1e-9;
mpopt.mosek.params.MIO_TOL_ABS_GAP = 1e-9;
mpopt.mosek.params.MAX_TIME = 300;
  • 模型简化问题:MATPOWER的DC-OPF模型可能对OTS约束进行了简化,导致求解器得到的解并非全局最优。可手动构建MILP模型直接调用MOSEK求解,与MATPOWER结果对比,确认是否为建模问题。
  • 版本兼容性:检查MATPOWER与MOSEK的版本是否兼容,旧版本MATPOWER可能不支持MOSEK的部分参数设置,导致参数无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:07:05