尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MATLAB复现配电网韧性提升:移动储能预布局与动态调度全流程解析

MATLAB复现配电网韧性提升:移动储能预布局与动态调度全流程解析 简介本资源是面向电力系统高年级本科生、研究生及配电网规划工程师的科研复现型代码包聚焦极端灾害下配电网韧性提升这一前沿问题完整复现《电力系统自动化》2022年刊发的两阶段鲁棒优化策略灾前移动储能预布局与灾后多源协同动态调度。资源共19个文件含13个核心MATLAB脚本如两阶段鲁棒主/子问题求解、灾前布局与灾后调度主程序、4个数据文件IEEE33节点拓扑、负荷曲线、距离矩阵等及2份PDF说明文档总大小2.53MB结构清晰分为“灾前布局”与“灾后调度”两大模块便于分阶段学习与调试。已有1770人下载学习用户可直接运行获得移动储能最优配置位置与数量、灾后负荷恢复时序方案、各时段柴油机/电动汽车/移动储能出力分配结果并通过show_result.m可视化关键指标显著降低复现高水平期刊算法的技术门槛。 配电网韧性这个方向这几年在电力系统圈子里越来越热。原因也不难理解极端天气把配电网打成一片漆黑光有坚强电网还不够还得考虑灾后怎么快速恢复。我这次用MATLAB完整复现了一篇做移动储能预布局与动态调度策略的论文说白了就是回答两个问题台风来之前移动储能车该停在哪些关键节点台风过后这些车又该怎么跑、怎么放电才能让更多用户尽快来电整个复现过程花了我差不多三周时间从读模型、搭算例到调求解器踩了不少坑。这篇博文把整套流程拆开讲清楚模型怎么建、代码怎么写、结果怎么验证全部记录下来给正在做配电网韧性或者想复现电力期刊优化算例的同学当个参考。1. 项目整体拆解预布局和动态调度到底在优化什么1.1 先理解问题场景这个研究场景并不复杂但很贴近实际。假设我们手头有一个IEEE 33节点配电系统平时运行一切正常。现在预测到一场台风会在某个时段正面袭来可能造成多条线路同时故障。此时我们有一支移动储能车队比如5辆容量为500 kWh的移动储能车最大充放电功率为100 kW。问题是台风登陆之前这些车应该停在哪里台风造成故障之后哪些车应该开到哪些节点去放电每辆车应该在什么时间从节点A移动到节点B充满一轮电之后要不要回充电站补电这里面其实包含了两个层面的决策。第一层是预布局这是“灾前决策”信息是不确定的——我们不知道具体哪条线路会断只能基于灾前预测去选位置。第二层是动态调度这是“灾后决策”故障信息逐渐明确我们根据实时状态滚动优化移动储能的运行轨迹和功率输出。这两个层面有很强的耦合关系预布局选的位置不好后面对移动储能的调度再优化也很难挽回。我在复现这篇论文时最直观的感受是这个问题表面上是一个优化问题实际上是个“带空间维度的决策问题”。普通储能调度只需要考虑时间维度上的充放电移动储能多了“空间转移”这个维度整个模型的复杂度瞬间上了一个台阶。这也是为什么很多人在复现时容易卡壳——空间维度引入的约束不只是把储能从一个节点挪到另一个节点那么简单。1.2 为什么选择移动储能而不是其他手段做韧性提升的常规手段有很多比如加固线路、配置固定式储能、布局分布式电源等。但这些方案各有短板。加固线路成本高固定式储能只能在安装点附近发挥价值分布式电源在故障期间能不能持续出力还要看一次能源的情况比如光伏在夜间或者阴雨天基本帮不上忙。移动储能最大的优势是“灵活”——它可以在灾前提前移动到预测的事故多发区域又可以在灾后根据实际故障情况重新部署。这种“先布局、后调度”的模式本质上是在用移动性换取韧性的提升空间非常适合灾后应急响应这种弱信息、强约束的决策环境。应急电源车在城市保电、大型活动保障里已经用得很成熟只不过过去多是靠经验人工调配缺少系统性的优化模型。这篇论文的价值在于把人工经验变成了可求解的数学问题用优化算法替代人的判断在复杂场景下能找到比人工方案更好的配置。我复现的过程中体会最深的一点是移动储能的调度不是一个普通的储能调度问题它多了一个“空间维度”。普通储能只需要考虑什么时候充、什么时候放移动储能还得考虑从哪个节点到哪个节点、路上花多长时间、转移过程中对网络负荷的影响如何。这个空间维度会让模型的复杂度明显上升也是很多人在复现时容易出差错的地方。1.3 预布局和动态调度的耦合关系预布局在数学上通常建模成一个两阶段优化问题。第一阶段在灾前决定移动储能的初始停靠节点第二阶段在灾害场景确定后给出移动储能的最优移动路径和出力计划。这里需要特别注意的是第一阶段的决策变量在第二阶段是以“初值”形式存在的两阶段之间通过移动储能的可用性、位置状态、SOC状态耦合在一起。我在复现中把这个问题拆成了两层求解框架外层用预布局模型求解初始位置内层用动态调度模型在故障场景下跑滚动优化。也就是先对若干历史台风场景做预布局优化得到一组初始位置再针对具体故障场景以这组初始位置为起点运行动态调度模型。这样做的好处是把一个大问题拆成了两个可独立调试的模块排查问题的时候可以逐个模块去验证而不是一上来就去调试一个庞大的联合模型。我建议想复现的同学也采用这个思路。两阶段优化看着复杂但如果把“灾前预布局”和“灾后动态调度”彻底解耦成两个独立脚本调试压力会小很多。先把动态调度跑通再回过头去调预布局最后再把两者串起来整个工程会顺畅不少。我梳理了一个维度对照表方便大家和论文里的表述对应维度预布局阶段动态调度阶段时间灾前提前若干小时/天灾中/灾后故障发生后持续运行信息基于预测数据不确定性高基于实测或仿真故障状态逐步明确决策变量移动储能初始停靠节点移动路径、充放电功率、停靠时长优化目标最小化期望失负荷成本最小化当前/滚动时域内的失负荷成本求解难度中等取决于场景数量较高受时间尺度和空间维度影响2. 数学模型目标函数、约束条件和关键参数2.1 韧性评估指标怎么定建模的第一步是定义“韧性”。复现之前我犹豫了很久因为韧性指标在文献里定义并不统一。有的用负荷削减率有的用系统恢复时间有的用加权电量缺失期望。这篇论文采用的是一个综合性的失负荷惩罚指标本质上是把故障期间和恢复期间的电量缺失按重要负荷权重进行折算。这比较符合工程直觉——医院、通信基站、供水系统的用电优先级远高于普通居民负荷恢复时要优先保障。具体到代码里目标函数可以写成两部分。第一阶段把预布局决策对期望失负荷成本的影响最小化第二阶段在给定故障场景下把负荷削减成本、储能移动成本和充电成本之和最小化。其中负荷削减成本不是简单电价而是按负荷等级加权的单位失负荷惩罚值这个值设置得很高目的就是让优化器优先恢复重要负荷。我在代码里把一级负荷的惩罚系数设为正常电价的100倍二级负荷设为50倍三级负荷就按普通电价算。这个设计直接影响了优化结果惩罚系数设置得合理不合理会直观反映在“优先恢复哪类负荷”的调度行为上。2.2 预布局模型的数学表达第一阶段的预布局模型核心决策变量是0-1变量表示第k台移动储能是否被预布局到节点i。目标函数要处理的是台风场景的随机性。常用的处理方式是场景法通过历史台风路径、线路故障概率等信息生成一组典型故障场景然后对每个场景计算对应的失负荷量再求期望。这样目标函数就变成了一个带期望算子的混合整数线性规划问题。这里我想强调一个容易忽略的细节移动储能的预布局不是简单地选几个负荷大的节点。因为负荷大的节点可能集中在一个区域如果台风路径偏差大全部预布局到一个区域风险反而高。所以很多模型里会加一个分散度约束限制移动储能在不同馈线或不同分区之间的分布比例。比如我复现的这个模型里明确约束了每个供电分区最多只能配置两台移动储能防止“把所有鸡蛋放在一个篮子里”。这也是为什么预布局模型里除了目标函数约束里还必须包含每个分区的储能数量限制之类的条款。在实际求解时预布局问题的整数变量个数是储能数量乘以节点数量。5台储能、33个节点就是165个0-1变量这个规模用商业求解器可以轻松求解。但如果你想扩展到真实的几百个节点网格整数变量会膨胀到几千甚至上万这时就得考虑用启发式算法或者Benders分解来加速。我建议复现阶段先不用考虑大规模问题把模型跑通才是第一要务。2.3 动态调度模型的约束细节动态调度部分的约束要比预布局复杂不少主要是约束类型多、时间耦合强。我代码里实现的主要约束包括节点功率平衡约束每个节点的注入功率等于负荷功率减去分布式电源出力和移动储能放电功率线路潮流约束采用DistFlow模型考虑线路容量上限故障线路开断后该线路潮流为0移动储能SOC约束SOC随充放电功率和时间步长动态更新必须保持在安全上下限之内移动时间约束移动储能从节点i到节点j需要的时间由距离和速度决定这一步在时间维度上引入了“转移状态”单点接入约束同一时刻一台移动储能只能停靠在一个节点并且只能在一个节点进行充放电这些约束单独看都不难难的是让它们在一个统一的时序框架里同时满足。我在初期调试的时候经常出现“储能同时出现在两个节点”或者“转移动力凭空多出来”这类问题后来才发现是没有把转移状态和停靠状态区分清楚。正确处理方式是定义一个“停靠状态”变量和“转移状态”变量二者互斥储能要么处于停靠并接入节点要么处于转移中不能同时置1。我整理了一份关键参数表供复现时对照参数示例取值说明节点数33IEEE 33节点测试系统线路数32含联络开关正常时为开环运行移动储能数量5台可按算例规模调整单台容量500 kWh单台移动储能电池容量充放电功率上限100 kW单台最大充放电功率SOC上下限[0.1, 0.9]保护电池安全移动速度30 km/h道路通行条件下的平均速度时间步长1 h动态调度时间分辨率故障恢复时间4 h某条故障线路预计修复时间2.4 为什么选择混合整数线性规划而不是启发式算法复现过程中我一直在想一个问题这个模型用混合整数线性规划MILP求解是不是最优选择后来我对比了遗传算法、粒子群这类启发式方法结论是在小规模算例下MILP加上商业求解器能拿到全局最优解而且求解速度快、结果可复现这对论文复现来说是至关重要的。启发式算法虽然能处理更大规模的变量但每次运行结果可能不一样不利于调试和验证。当然如果你后续要扩展到上千个节点的实际配电网MILP的求解时间可能会让你崩溃。到那时再考虑用启发式算法或者分解算法也不迟。我复现阶段的情况是33节点系统配上几百个整数变量Gurobi求解一个场景的动态调度模型只需要几秒到几十秒完全够用。3. MATLAB实现从数据准备到求解器调用3.1 算例系统搭建复现的第一步不是写优化模型而是把IEEE 33节点系统搭出来。我用MATLAB写了一个数据读取脚本把节点负荷、线路阻抗、系统基准容量这些基础数据放进结构体里。这里有一个关键点一定要把节点编号和线路编号理顺。IEEE 33节点系统看起来简单但线路的起始节点、终止节点方向不能弄错否则后面所有潮流约束都会出问题。我的习惯是先用一个函数验证网络的连通性确认没有孤立节点再进入优化模型。搭算例系统的时候我还做了个辅助函数能够把节点负荷数据按时间曲线展开。因为配电网的负荷是随时间变化的不能把一个固定值套用到所有时段。论文里通常会给出日负荷曲线系数比如凌晨负荷低、晚高峰负荷高。我在代码里用一个24维向量保存这个系数每个时段的节点负荷就是基础负荷乘以对应时段的系数。这个细节看起来不起眼但直接决定了动态调度的结果是否合理。3.2 YALMIP建模还是手写约束做电力系统优化复现绕不开工具选择的问题。我对比过几种方案直接用MATLAB优化工具箱的linprog/intlinprog、用YALMIP建模然后调用外部求解器、或者用CVX。最终我选了YALMIP加上求解器的组合。原因是预布局和动态调度问题的约束数量很多手写约束矩阵很容易出错而且出错后很难定位YALMIP提供了解析式的建模体验约束条件可以用近似论文公式的方式表达代码可读性强很多。不过YALMIP也有一个要注意的地方它只是一个建模层真正的求解能力取决于底层求解器。小规模算例用intlinprog还能跑但一旦场景数增加、变量规模上万intlinprog的速度会明显下降。我在动态调度部分使用的是Gurobi混合整数规划求解效率比intlinprog快了一个数量级以上。如果你的环境里暂时没有Gurobi也可以先用intlinprog验证逻辑正确性再平滑切换到Gurobi提升速度。Gurobi对学术用户是免费的申请个license就能用安装也不复杂。3.3 两阶段求解框架的代码结构整个复现工程的代码结构大致如下data/存放IEEE 33节点系统参数、负荷数据、台风场景数据pre_position.m预布局阶段的主函数dynamic_schedule.m动态调度阶段的主函数distflow.mDistFlow潮流约束函数scenario_gen.m故障场景生成模块metrics.m韧性指标计算模块plot_results.m结果可视化这种分模块设计的好处是每个模块都可以单独测试。比如我先单独测试distflow.m给一组已知的功率注入看节点电压是否在合理范围内测试通过后再集成到动态调度模型里大大减少了联合调试的难度。我在实际开发时还会额外写一个check_network.m脚本专门用来检查网络拓扑连通性和参数一致性这个脚本在后期排查问题时帮了大忙。3.4 关键代码片段示例这里给出动态调度模型中移动储能SOC更新的核心代码片段典型的YALMIP写法% 决策变量定义 P_ch sdpvar(T, K, N); % 充电功率 P_dis sdpvar(T, K, N); % 放电功率 SOC sdpvar(T, K, N); % 荷电状态 x_link binvar(T, K, N); % 停靠状态x(t,k,n)1表示时刻t储能k在节点n % SOC动态更新约束 for t 2:T for k 1:K for n 1:N SOC(t, k, n) SOC(t-1, k, n) eta_ch * P_ch(t, k, n) - P_dis(t, k, n) / eta_dis; end end end % SOC上下限 SOC_min SOC SOC_max; % 充放电功率上限与状态耦合 P_ch(t,k,n) P_max * x_link(t,k,n); P_dis(t,k,n) P_max * x_link(t,k,n);这段代码看起来简单但里面有两个坑。一是SOC的更新要考虑同一储能从上一时刻的节点转移到当前节点的情况如果没有转移SOC在下一秒是连续更新的如果发生了转移就要处理转移过程中的空档期。二是充电功率和放电功率不能同时非零需要额外加互补约束或者用状态变量限制。我在代码里用一个二元变量控制充放电模式确保同一时段、同一节点、同一储能不会同时出现充电和放电两个动作。3.5 求解器性能与调试技巧性能这块我实测下来5台移动储能、33节点系统、24小时调度周期、每个时间步1小时动态调度模型的变量规模大约是几千个其中0-1变量占比不少。用Gurobi求解单场景大约需要几秒到几十秒不等取决于故障场景的复杂度。如果要求解100个场景的期望值那计算量会急剧增加这时可以采用样本均值近似或者Benders分解来加速。调试的心得不要一开始就上大场景。先跑一个只含两三个故障分支的最小场景确认模型逻辑正确再逐步增加场景数量。这样排查问题的时间和成本都会低很多。另外YALMIP在求解前可以输出模型的变量数量和约束数量利用这个信息可以快速判断模型规模是否符合预期。如果约束数量比预想的多出一倍多半是循环里重复添加了约束。4. 实操过程完整复现流程记录4.1 数据准备与场景生成复现的第一步是准备数据。IEEE 33节点系统的标准参数网上就能找到节点有功负荷大约在3.7 MW左右无功负荷约为2.3 Mvar。我另外从文献里选了线路故障概率数据作为生成台风场景的基准。场景生成采用蒙特卡洛抽样的方式根据每条线路独立故障概率抽样生成若干个故障场景。生成完场景之后一定要检查场景是否合理比如是否有孤岛过多的场景是否有故障线路数超过抗灾能力的极端场景。做韧性研究有一个通用经验场景集合的好坏直接影响预布局结果的质量。如果场景太单一预布局会过拟合到一两个典型场景上如果场景太离散可能又找不到共享的共性规律。我用的是拉丁超立方抽样加场景消减的两步法先做大规模抽样再用同步回代法把场景数量压缩到20个左右保留典型性同时控制计算量。这里再多说一句场景生成是预布局模型的输入输入质量直接影响输出结果所以花时间做好场景消减是非常值得的。4.2 预布局求解模块的搭建预布局模块的核心是求解那个带场景期望的混合整数规划问题。我把第一阶段决策变量定义为X_init(k, n)表示储能k是否预布局在节点n同时定义一组辅助变量表达每个场景下移动储能初始位置与预布局决策的一致性约束。这样第二阶段求解时可以直接读取预布局结果作为初始状态不需要在代码层面临时修正。求解完成之后我通常会做一次灵敏度分析把移动储能的数量从3台增加到8台观察韧性指标的变化曲线。如果增加储能数量之后指标提升不明显说明系统瓶颈可能在于网络拓扑而不是储能数量如果指标提升明显说明储能确实是约束资源值得继续增加配置。这种分析在论文里是审稿人比较喜欢看的内容在项目中也是判断方案有效性的重要依据。4.3 动态调度模块的滚动优化实现动态调度部分我采用的是滚动时域优化rolling horizon框架。简单说就是每到一个新的决策时刻只求解未来若干个时段的优化问题然后只执行第一个时段的决策等下一个时刻到来重新用更新的信息求解。具体到代码里就是用一个循环控制时间推进每次调用一个内部优化函数。滚动时域的好处是能处理故障恢复时间不确定的问题。比如预测中某条线路需要4小时修复但实际到了第2小时就修复了此时如果不滚动更新原来计划里这条线路在后续时段仍然被视为故障状态恢复策略就会偏保守采用滚动时域后系统检测到线路修复会立刻把它重新加入可用线路集合后续时间段的调度策略也会自动调整。我在仿真中对比过滚动时域和非滚动时域两种模式结果滚动时域方案的失负荷量更低恢复速度也更快。4.4 韧性指标计算与结果可视化结果输出部分除了常规的负荷-时间曲线和节点电压时间曲线之外我最常画的是“不同时刻系统未恢复负荷的百分比”和“移动储能位置演变图”。前者直接反映韧性恢复的速度后者帮助判断储能调度路径是否合理。MATLAB里我用plot和bar画基础图用geoplot画地图分布图如果算例带地理坐标平时写得最多的还是节点级别的对比图。在结果验证上我给自己定了三条硬性检查。第一对比正常工况下的潮流结果与标准IEEE 33节点潮流参考值误差应在1%以内。第二故障场景下系统总失负荷量不应高于完全停电的极端值。第三增加储能数量后失负荷量应单调不增。任何一条不满足都说明代码有逻辑问题需要回头排查。这三条检查看起来简单但实际上能过滤掉大部分常见错误是我整个调试过程中最核心的验证手段。5. 常见问题与排查技巧实录5.1 求解不收敛或结果不合理这是复现过程中最常遇到的问题。不收敛的原因通常有两种一是约束之间存在矛盾比如移动储能既要满足SOC动态方程又要满足某个节点每个时段都只能有一个储能接入两个约束叠加之后可行域变成空集二是整数变量太多导致分支定界搜索空间过大。排查方法第一步把目标函数改成常数只求可行性看看模型是否有可行解第二步逐条注释约束用二分法找到问题约束第三步检查变量上下限是否设置合理比如某个参数把SOC上限定成0.5但约束里又要求储能必须放出额定能量自然就无解了。我记得有一次怎么都无解最后发现是移动时间约束里写错了节点距离导致储能永远无法在规定时间内到达目标节点这类问题光看公式根本发现不了只能靠逐步删约束来定位。5.2 线路方向和节点编号错误IEEE 33节点系统第1条支路是从节点1到节点2这是标准定义但我在复现时把线路编号对应错了导致潮流结果电压偏差很大。排查了一晚上才发现问题。这里给一个经验不管用哪个算例系统第一步务必写个独立的潮流校验脚本和标准的牛顿-拉夫逊法或前推回代法结果对比。如果不做这一步后面所有动态调度的结果都可能是错的。具体做法是把YALMIP模型里的潮流约束单独提取出来用一组固定的负荷值求解然后把结果和用MATPOWER算出来的标准潮流结果对比。如果节点电压幅值差异超过0.001 p.u.就说明线路参数或编号有问题。这一步虽然多花半天时间但能省下后面几周的调试时间。5.3 时间尺度不一致预布局模型的时间分辨率可能和动态调度模型不一样。我一开始预布局用小时级动态调度也用小时级但移动储能的行驶时间是用分钟表示的算出来总出现“转移半途而废”的状态。后来我统一把时间步长做成离散索引行驶时间向上取整为整数个时间步确保任何移动动作都能落在一个完整的时间步上。这里还有一个容易踩的坑如果移动时间不足一个时间步就按零处理模型可能会让储能“瞬移”。这在数学上可行但物理上不合理。我的做法是加一个最小移动时间约束比如只要储能离开当前节点至少经过一个完整时间步才能到达目标节点。这样可以避免瞬移现象也让调度结果更贴合实际情况。5.4 韧性指标对比不公平复现论文时还要特别注意基线设置。很多韧性提升论文会拿“无移动储能”“固定储能”和“移动储能”三个方案做对比。如果基线方案本身设置不合理对比结果的结论就不够扎实。我的做法是基线方案使用与原方案完全相同的网络参数和故障场景只改变储能的可移动属性其他完全保持一致。这样对比出来的差异才能归因于“移动性”本身。比如固定储能方案里储能容量和移动储能方案保持一致但安装位置固定在某几个节点。如果为了突出移动储能优势故意把固定储能安装在最差的节点那对比就不公平。反过来说如果固定储能安装在最优节点移动储能的优势可能又不明显。所以必须用同一个优化框架去求解固定储能的最佳安装位置再来做对比结论才有说服力。5.5 整数变量导致的内存膨胀当储能数量、节点数、时间步长同时增加时YALMIP的模型矩阵会迅速膨胀容易出现内存不足的情况。我在复现时遇到过一次时间步长从1小时改成半小时后求解器直接报内存错误。后来我改用稀疏矩阵存储YALMIP生成的约束同时把不必要的大循环改成向量化操作内存占用降了下来。如果你想跑更大的算例还有一个进阶做法不用YALMIP直接手写约束矩阵传给Gurobi。虽然建模过程痛苦但求解效率会显著提升。YALMIP在建模时会引入很多中间变量这些中间变量会拖慢求解速度。对于生产级代码我倾向于用MATLAB调用Gurobi的原生接口但复现论文阶段YALMIP更合适开发效率高不容易出错。6. 复现完成后的验证与扩展思路6.1 如何验证代码的准确性验证阶段我最推荐的做法是先用一个极小的案例做“手工验算”。比如简化成3节点系统、1台移动储能、2个时段手算出期望的最优解再和程序的输出对比。如果两者一致说明模型和代码逻辑基本可靠。之后再用IEEE 33节点系统做完整仿真结果合理性符合预期才真正可以交付。我复现这篇论文的时候额外做了一组对照实验在同一个故障场景下把移动储能数量设为0、在固定位置安装同等容量的储能、以及按论文方法做预布局和动态调度三种方案对比下来移动储能方案的恢复时间明显优于其他方案。这个结果也给了我信心模型本身的思路是站得住的代码实现也没有偏离原始论文的核心设计。这个对照实验的代码其实很简单就是改一个参数把储能可移动标志位从1改成0其他都不用动。6.2 可以继续扩展的方向这个项目做完之后我还有几个想继续尝试的扩展方向。一是把移动储能和配网重构联合优化在故障后用联络开关改变网络拓扑进一步减少失负荷。二是引入修复团队调度让抢修人员和移动储能的调度协同优化整体恢复效果可能更好。三是把一天前的预布局问题改成多阶段提前24小时、12小时、6小时各决策一次逐级修正预布局位置更贴合实际应急流程。还有一个值得探索的方向是考虑交通网络约束。现有模型大多假设移动储能走最短路径但实际灾害可能导致部分道路中断移动储能可能需要绕行。把交通网络模型和配电网模型耦合起来会是一个更有工程价值的问题当然复杂度也更高。如果你已经熟练复现了这篇论文的代码从这个方向切入会是比较自然的延伸。我个人在实际操作中的体会是这套代码从初版到最终版迭代了差不多五轮最大的认知是移动储能预布局与动态调度这个问题难点不完全在模型和算法而在工程实现中对约束细节的把控。比如SOC的时空耦合、移动时间离散化、预布局决策与调度的一致性任何一个环节处理不到位结果都会有偏差。如果你也在复现类似的论文不要急着跑大数据量先把小算例吃透再逐步扩展。另外求解器的选择对效率影响非常大如果条件允许直接用Gurobi或CPLEX这类商业求解器能省下大量等待时间。希望这篇复盘对你有用。本文还有配套的精品资源点击获取
返回列表