前阵子做微电网调度的时候接了一个挺有意思的题目给冷电联供型微网里加一套冰蓄冷装置然后在 MATLAB 里做经济优化运行仿真。说白了就是让系统自己决定每一小时该买多少电、开多少制冷机、蓄多少冰、融多少冰最后一天运行下来总电费最低。今天把整个实践过程、建模思路和踩过的坑整理出来给正在做微网优化、蓄冷空调系统调度、或者 MATLAB 仿真课程设计的同学参考。这套东西听起来带点学术味但落到代码上其实不复杂。核心就三件事一是理解冰蓄冷的物理过程和分时电价下的套利逻辑二是把冷电耦合关系写成数学约束三是在 MATLAB 里用优化工具箱跑出 24 小时的调度结果。做完之后你会对“负荷平移”“削峰填谷”这些概念有特别直观的认识。配合的仿真代码框架我也会给出关键片段不想看理论可以直接跳去抄作业。1. 项目背景为什么要把冰蓄冷装进微网里1.1 冷电联供微网的运行痛点所谓冷电联供型微网最直接的场景就是商业综合体的能源站白天要供电还要给空调供冷。光伏板发的电可以直接自用电网的峰谷电价差是客观存在的问题在于制冷负荷恰恰又跟电价峰时段重叠太阳最毒、温度最高的时候电价最贵空调全开的电费让人头疼。如果微网里只有光伏和电网基本没法解决“峰时段用高价电制冷”的问题。光伏靠天吃饭中午出力高但傍晚电价高峰期反而掉下来电网购电则完全没有自主调节空间。这时候引入蓄冷装置思路就跟家用储能电池一模一样晚上谷电便宜的时候把冷量像“存钱”一样存起来白天峰电价的时候把冷拿出来用少从电网买高价电。冷电联供的本质是电力和冷力两种能量流在同一个系统里耦合而耦合点往往就是那一台或多台电驱动制冷机。制冷机吃电产冷冷负荷又可被蓄冰槽部分替代这就是整个优化问题的核心结构。1.2 冰蓄冷装置的调峰价值冰蓄冷跟水蓄冷相比单位体积蓄冷密度高得多工程上很常用。基本原理是利用制冷机组在夜间谷电时段满负荷运行通过乙二醇溶液把蓄冰槽里的水制成冰白天用电高峰期制冷机减少开机甚至停机蓄冰槽融冰释冷直接满足空调负荷。冰的相变潜热大约是 335 kJ/kg1 吨冰能提供的冷量足够普通办公室好几个小时空调用。对这个项目而言冰蓄冷带来的不是什么新能源消纳这种大词而是非常朴素的电费套利谷电 3 毛一度买进来制冰存起来峰电 1 块多一度的时候融冰供冷省下差价。只要峰谷价差大于制冷与蓄冷的综合损耗成本经济上就是划算的。在微网层面它同时承担着降低峰值购电功率、减少变压器容量的作用这属于附加收益在仿真里可以响应峰时段的电价信号体现出来。1.3 经济优化运行要解决的本质问题说白了优化运行就是回答两个问题每一时刻哪些设备出力、出力多少蓄冰槽什么时候充、什么时候放、充多少。目标函数是 24 小时总运行成本最低决策变量覆盖所有可控设备的逐时出力。难点在于制冷机既要供冷又要蓄冰二者之间存在“竞争关系”蓄冰槽有容量上限和动态变化充冰和融冰不能同时进行这是天然的 0-1 约束电价随时间变化导致时段耦合。这已经不是一个简单的功率分配问题而是一个带整数变量、含时序耦合的动态优化问题。第一次做这类项目的人很容易在建模阶段就把约束写拧了后面求解器一直报错还找不到原因。这一篇就是重点解决这类细节。2. 系统建模设备构成与能量流关系2.1 微网物理拓扑与能量耦合我做仿真时采用了一个不算复杂但足够有代表性的系统结构具体设备清单如下光伏阵列作为可再生能源电源出力曲线按夏季典型日给定。电网连接微网可从上级电网购电满足秒级功率平衡。电制冷机双工况冷水机组既是冷负荷的供给源也是蓄冰的“制冰机”。夜间谷段制冰白天可根据需要直接供冷或融冰供冷。蓄冰槽存储冷量动态状态量。冷负荷典型办公楼的夏季逐时冷负荷曲线。电负荷照明、插座、风机等非制冷用电。冷电耦合关系是制冷机本身是电负荷它消耗的电力从电网或光伏获取产出的冷量分配到两个目的地——直接供给冷负荷或者送进蓄冰槽。因此系统在全时段满足电功率平衡的基础上还必须在每个时刻保证冷功率平衡。这就是所谓“冷电联供型”微网的数学模型精髓。如果有燃气轮机还可以加一个换热和吸收式制冷环节形成真正的冷热电三联供但在这个课题里先不展开。先把电制冷加蓄冰这条主线跑通结构上已经能反映出冷电联供的耦合特性。2.2 分时电价与负荷曲线假设仿真首先需要给定边界条件。分时电价我采用的是国内不少城市通用的三段式结构单位统一换算成 元/kWh时段时间范围电价元/kWh谷段23:00 - 次日 8:000.30平段8:00 - 11:0018:00 - 23:000.70峰段11:00 - 18:001.20这个价差足够大能让蓄冷的经济效益明显显现。负荷曲线方面取夏季一个大晴天电负荷峰值在 800 kW冷负荷峰值在 1200 kW冷负荷从早上 7 点开始爬升下午 15 点前后达到顶峰晚上 21 点后逐步归零。光伏出力则在 12 点到 14 点达到峰值 500 kW。这三类数据用 1 小时分辨率、24 个点表示构成仿真的输入向量。负荷曲线是优化问题的“需求侧刚性约束”系统没有切除负荷的权利必须想办法在经济最优的前提下满足它。2.3 冰蓄冷系统的工作模式冰蓄冷系统在运行时主要有三种工作模式制冰蓄冷模式夜间谷电时段开启制冷机全功率运行冷量全部打入蓄冰槽槽内冰层逐渐增厚。制冷机直接供冷模式白天开机制冷机产冷直接送往冷负荷不经过蓄冰槽。融冰释冷模式制冷机停机或低负荷蓄冰槽内的冰融化通过板式换热器向负荷侧输出冷水。实际运行中更多是“主机优先”和“融冰优先”策略的混合主机负责基础冷负荷融冰负责峰值冷负荷。在优化模型里不需要预设策略优化算法会根据电价信号自行决定每一时刻选择哪种模式这正是经济调度的意义所在。需要特别注意充冰和融冰行为在物理上不允许同时发生。这一条必须显式建模为互斥条件否则模型可能会“作弊”既充又融没有实际意义还白赚目标函数的好处。2.4 设备模型与运行约束设备建模要尽量简单抓住主要矛盾即可。我把制冷机看作一个固定 COP 的转换装置COP 取 4.0即消耗 1 份电可产 4 份冷。额定耗电功率 300 kW对应额定制冷功率 1200 kW。蓄冰槽容量设定为 4000 kWh冷量考虑蓄冷损耗后充入效率为 0.9释冷效率为 1.0。初始蓄冰量为 0调度周期结束时也要求槽内恢复到接近 0方便做周期性对比。电网购电功率上限设置为 1000 kW不设下限。光伏出力按预测值处理不参与决策。这些约束加起来构成一个典型混合整数线性规划问题变量包含逐时的机组耗电功率、供冷功率、蓄冰速率、融冰速率、购电功率、蓄冰槽状态量以及一组表示充放互斥的 0-1 变量。3. 经济优化运行问题形式化数学模型3.1 目标函数的设计目标函数就是 24 小时总运行成本最小化包括三项从电网购电的费用、制冷机的运行维护成本、蓄冰槽释冷过程的维护成本。购电费用是主导项表达式为$$C_{total} \sum_{t1}^{24} [ c(t) \cdot P_{grid}(t) c_{om}^{ch} \cdot P_{ch}(t) c_{om}^{ice} \cdot Q_{ice,release}(t) ]$$其中 c(t) 是时变电价P_grid(t) 是购电功率P_ch(t) 是制冷机耗电功率Q_ice_release(t) 是融冰释冷功率。运维成本系数设得很小比如 0.01 元/kWh主要起惩罚过快启停的作用避免模型在相邻时段出现明显跳动。没把光伏的开发成本放进去因为光伏出力在给定场景下是“免费且必须优先消纳”的也没加碳成本虽然加一个碳交易机制并不难但会分散对冰蓄冷经济性的分析焦点。3.2 电功率平衡约束每个时刻必须有$$P_{grid}(t) P_{pv}(t) P_{elec,load}(t) P_{ch}(t)$$左侧电源右侧负荷。光伏出力视为负的负荷直接减去即可。这个约束必须对所有 24 个时段逐一满足且所有变量为非负实数其中只有 P_grid(t) 没有下限为 0 的限制不能用负值表示向电网反送电因为没装售电机制。这里的单位特别注意P_ch(t) 是制冷机的耗电功率不是制冷功率。很多新手把 COP 忘了导致电平衡写错整个约束全乱了。3.3 冷功率平衡约束冷侧平衡式如下$$Q_{ch,supply}(t) Q_{ice,release}(t) Q_{cool,load}(t)$$其中 Q_ch_supply(t) 是制冷机直接供给冷负荷的冷量Q_ice_release(t) 是蓄冰槽释放的冷量。制冷机的制冷功率由 COP 决定Q_ch_total(t) COP * P_ch(t)而这部分总制冷量又分成直接供冷和蓄冰两部分$$Q_{ch,total}(t) Q_{ch,supply}(t) Q_{ice,charge}(t)$$这里的 Q_ice_charge(t) 是充入蓄冰槽的冷量。整组等式必须同时成立。模型中冷负荷的单位默认是 kWh冷量也就是 1 小时平均功率。如果你想用冷吨 RT记得换算1 RT 等于 3.517 kW单位搞错结果会相差三倍多这一点在后面的结果分析里容易埋雷。3.4 蓄冰槽的动态约束与二进制变量引入蓄冰槽是唯一的时序耦合环节状态转移方程$$S_{ice}(t1) S_{ice}(t) \eta_{charge} \cdot Q_{ice,charge}(t) - \frac{Q_{ice,release}(t)}{\eta_{discharge}}$$其中 S_ice(t) 是 t 时段末的蓄冰量η_charge 取 0.9η_discharge 取 1.0。还要满足容量约束 0 ≤ S_ice(t) ≤ S_max。充放互斥是这个模型的关键点需要引入二进制变量 b(t)当 b(t) 1 时允许蓄冰禁止融冰当 b(t) 0 时允许融冰禁止蓄冰。用大 M 法写成线性约束$$Q_{ice,charge}(t) \le M \cdot b(t)$$$$Q_{ice,release}(t) \le M \cdot (1 - b(t))$$M 可取蓄冰槽最大充放冷功率值的 1.1 倍。写代码时大 M 不能取得过大否则数值稳定性会变差。这一组 0-1 变量正是问题被划分为混合整数线性规划MILP的原因。其他约束全部是线性的并且目标函数中的逐时乘积只有一个电价乘以购电功率那是常数乘变量天然线性所以整个模型不需要任何非线性求解器。4. MATLAB建模与求解MILP路线4.1 为什么选MILP而不是启发式算法微网优化调度常用的算法路线无非两种数学规划方法和启发式算法像粒子群PSO、遗传算法GA。它们各有应用场景但我个人强烈建议在这种线性化模型上用数学规划方法原因是它可以给出全局最优解并且求解速度快。启发式算法在学术论文里很常见但实际使用中你没法保证收敛到最优参数设置还特别依赖经验。粒子群要调种群大小、惯性权重、学习因子遗传算法要调交叉概率、变异概率。一堆参数调下来可能最优解还没找到而且每次跑出来的结果都不一样。MILP 的求解依赖分支定界算法以 CPLEX、Gurobi 这类商业求解器为典型代表MATLAB 自带的 intlinprog 也能处理中等规模的纯整数规划。在这个 24 时段、十个左右变量的模型里求解时间通常在一两秒以内质量和稳定性都是启发式算法没法比的。当然如果模型里出现非线性不可线性化的东西比如变 COP 导致的二次项、冷负荷的悲观随机性启发式或混合路线可能是更合适的方向但这不是本文讨论的范围。4.2 YALMIP工具箱与求解器配置MATLAB 里搭 MILP 模型我用的工具是 YALMIP——一个瑞典学者写的建模工具箱。它最大的好处是把建模和求解分离你用符号化的 sdpvar 定义变量写约束和目标函数最后一行命令调用底层求解器。换求解器只需要改一行 operator。安装 YALMIP 很简单去 GitHub 下载源码包把整个文件夹拷进 MATLAB 路径即可。底层求解器可选 intlinprog、CPLEX、Gurobi、SCIP。学术用户有条件的话建议装一个 IBM CPLEX 学术版免费且效果好装不上也没关系MATLAB 自带 intlinprog 能覆盖大部分 24 小时小规模仿真。配置求解器时推荐设置一个相对 MIP gap比如 0.01意思是找到的解跟最优解差距在 1% 以内就停止。这样能显著缩短求解时间同时保证结果稳定对输出曲线这种场景完全够用。4.3 代码实现的关键结构写代码时我把整个模型分成四个部分参数定义、变量定义、约束拼接、求解与输出。变量定义用 YALMIP 的 sdpvar 和 binvar%% 决策变量定义 P_grid sdpvar(1, 24, full); % 购电功率kW P_ch sdpvar(1, 24, full); % 制冷机耗电功率kW Q_sup sdpvar(1, 24, full); % 制冷机直接供冷量kWh Q_chg sdpvar(1, 24, full); % 蓄冰充冷量kWh Q_rel sdpvar(1, 24, full); % 融冰释冷量kWh S_ice sdpvar(1, 25, full); % 蓄冰槽状态25个点便于连接 b binvar(1, 24, full); % 充放互斥标志位然后逐条把目标函数和约束拼进一个 cell 数组里%% 目标函数 objective sum(price .* P_grid) ... sum(0.01 * P_ch) ... sum(0.01 * Q_rel); %% 约束集合 C []; C [C, P_grid P_pv P_elec P_ch]; % 电平衡 C [C, COP * P_ch Q_sup Q_chg]; % 制冷机能量分配 C [C, Q_sup Q_rel Q_cool]; % 冷平衡 C [C, S_ice(2:end) S_ice(1:end-1) ... 0.9 * Q_chg - Q_rel]; C [C, S_ice 0, S_ice S_max]; % 槽容量 C [C, Q_chg 1500 * b]; % 充放互斥 C [C, Q_rel 1500 * (1 - b)]; C [C, P_grid 0, P_grid 1000]; % 购电边界 C [C, P_ch 0, P_ch 300]; % 制冷机功率边界 C [C, S_ice(1) 0, S_ice(25) 0]; % 初始与最终状态最后调用求解器ops sdpsettings(solver, intlinprog, ... verbose, 0, intlinprog.MaxTime, 300); optimize(C, objective, ops);只要约束写对求解完直接从 value 函数提取结果即可。这里有个小细节S_ice 变量我定义了 25 个点为了把状态转移方程写成 S(t1) S(t) ... 的形式24 个时段正好需要 25 个状态节点这个在索引时容易出错调试时一定要用 size 检查维度。5. 仿真参数设置与场景设计5.1 基础参数汇总仿真参数全部列成一张表方便你复现时对照检查参数数值说明COP4.0制冷机能效比制冷机额定制冷量1200 kW对应耗电 300 kW蓄冰槽容量4000 kWh冷量计蓄冷效率0.9充入过程损耗释冷效率1.0融冰无损耗峰值电负荷800 kW非制冷用电峰值冷负荷1200 kW空调冷负荷光伏峰值出力500 kW正午时段购电上限1000 kW变压器容量限制谷段电价0.30 元/kWh23:00-8:00平段电价0.70 元/kWh8:00-11:0018:00-23:00峰段电价1.20 元/kWh11:00-18:00制冷机在仿真里默认始终在线运行不做启停整数优化这样能降低模型复杂度也符合实际制冷机低频调节的运行习惯。所有结果都以 1 小时为步长输出曲线。5.2 对比场景设定无蓄冰、有蓄冰、冷电联供为了把蓄冰的价值讲清楚我设计了三个递进式场景场景A无蓄冰装置制冷机完全按冷负荷需求出力相当于传统空调系统作为基准。场景B加入蓄冰槽系统可以做日内冷量平移体现分时电价下的套利能力。场景C在场景B基础上叠加光伏高渗透考察光伏与蓄冰的协同效应。三个场景的差别只在模型约束上本质是同一个求解框架。A 场景把蓄冰槽容量设为 0模型退化为实时平衡B 场景恢复全部蓄冰约束C 场景只是把光伏出力的数值抬高比如从 500 kW 提高到 900 kW。这种递进式场景对比是学术论文里最常用的分析手法也是你验证模型是否跑对的最佳方法。假如 B 场景的运行成本比 A 还高那基本可以断定代码里某个约束写反了。5.3 冰蓄冷比例的敏感性分析参数敏感性分析能让研究结论更扎实。我在做完全部基础场景后又做了一组蓄冰槽容量的敏感性测试把蓄冰容量从 1000 kWh 一直扫到 8000 kWh每挡跑一次优化记录总运行成本和峰时段购电量。这种扫描方法在 MATLAB 里非常好实现用一层 for 循环把 S_max 作为参数传进去逐次求解。正常情况下可以看到随着蓄冰容量增大运行成本先快速下降然后逐渐平缓最终不再下降。拐点对应的容量就是该电价结构和负荷特性下的经济最优蓄冰容量。需要提醒的是敏感性分析要跑很多次优化。如果每次求解时间 10 秒扫 10 个点就是 100 秒可以接受但如果容量增大后整数变量引起求解变慢建议把最大蓄放功率 M 也一起缩放否则会出现一段容量区间内结果异常不合理的现象。6. 结果分析与经济性解读6.1 运行时序曲线的解读方法第一次拿到求解结果时我建议先画几张曲线图购电功率、制冷机耗电、蓄冰槽状态、融冰释冷量全画在同一个时间轴上。你能看到非常清晰的“避峰填谷”特征夜间谷电时段购电功率冲到高位制冷机满负荷运行蓄冰量一路攀升早晨冷负荷起来后融冰释冷量逐渐释放制冷机只承担基础负荷购电功率在峰电价时段被压得很低。有一个值得关注的细节优化结果往往在谷段末期出现“充满即停”的行为。因为蓄冰槽容量有限如果晚上 2 点就满了后面几个小时制冷机会自然停掉购电功率也会相应回落。这是模型正常的表现说明约束在起作用而不是bug。冷负荷曲线如果被完全平滑成一条直线那要警惕是不是把冷负荷约束写成了固定值而非时变向量。真实的冷负荷曲线起伏明显融冰释冷量曲线会跟着冷负荷波动不应是平线。6.2 成本结构与节能率计算三个场景的典型结果可以对比如下场景总购电成本元峰时段购电量kWh相对基准成本降幅A 无蓄冰148206100-B 有蓄冰12680330014.4%C 蓄冰高光伏10850240026.8%B 场景成本降幅超过 14%主要来自两部分一部分是谷电替代峰电的电费套利另一部分是制冷机夜间满负荷运行效率提升带来的单位冷量成本降低。C 场景里光伏出力抬高后白天的购电进一步减少蓄冰和光伏形成互补——光伏高发的午间冷负荷也高但蓄冰在凌晨就已经备好转天的冷量。如果你在自己的结果里看到节能率超过 20%也不用惊讶因为峰谷价差设得越大、冷负荷峰值越尖蓄冰的经济价值就越突出。我见过把峰谷电价差设置到 1.5 元以上的论文成本降幅能做到 30% 以上但那是理想化边界条件实际工程中难以达到。6.3 蓄冰槽容量对削峰填谷的影响敏感性分析结果曲线呈典型的 S 形容量 1000 kWh 时谷段蓄冰量太少只能勉强覆盖上午的冷负荷峰值成本降幅有限容量扩大到 4000 kWh 时基本能覆盖全天所有峰段冷负荷降幅已经接近饱和再往上加多出来的蓄冰容量根本用不上成本曲线趋于平缓。从削峰角度看4000 kWh 的蓄冰槽可以将峰时段购电功率从 1000 kW 压到 600 kW 以下减少变压器视在功率需求。这就是为什么很多新建的大型商业楼宇宁可多花一笔初装费买蓄冰空调系统也不愿意为一年中只有几十个小时的极端负荷扩建配电房——扩容变压器的代价往往比蓄冰槽更高。做这个分析时需要注意一个陷阱蓄冰槽蓄放过程本身的损耗会带来能量损失如果容量设置过大可能导致谷时段过度蓄冰释冷不完造成浪费。所以在优化模型里蓄冰槽终态 S(25) 0 是很有必要加的约束。否则模型为了“占便宜”会在最后几小时持续蓄冰不融冰结果看着成本很低实际完全不可行。7. 常见问题与排查记录7.1 求解器报错Infeasible problem这是 MILP 模型最容易遇到的问题大概率是约束之间互相矛盾。我遇到过的典型案例是手滑把冷平衡约束等式写成了 Q_sup Q_rel Q_cool于是模型“选择”不满足冷负荷结果不可行或成本异常低。另一类是状态变量 S_ice 的索引错位S_ice(1)0 搭配转移方程时把 25 个节点的状态错放成了 24 个。排查方法讲究从简到繁。先把二进制约束和蓄冰槽动态约束注释掉只保留电平衡和冷平衡跑一遍——如果此时可解问题必然出在蓄冰部分再逐步把动态约束加回来每加一条跑一次直到复现不可行。另外一定要检查单位kW、kWh、RT 混用在冷负荷多的时候特别常见。大 M 参数如果取得太小会导致互斥约束实际不生效求解器也可能报不可行或给一个与物理不符的解。我习惯取该功率变量最大值的 1.1 倍比如最大充冷功率 1500 kWM 就用 1650。7.2 蓄冰槽从来不蓄冰如果结果里蓄冰量全是 0而成本又乐观得离谱先别急着怀疑模型。这个现象往往说明峰谷价差在目标函数中没有真正发挥引导作用。多数原因是目标函数里把电价向量顺序写错了或者价格计算时单位弄成了“元/万 kWh”导致谷电和峰电差距过小。还有一种隐蔽情况约束里把 S_ice(1) 设为 0、S_ice(25) 设为 0 后由于蓄冷效率只有 0.9系统会认为“蓄进去 100 度冷只放出来 90 度”如果峰谷价差乘以损耗后没有盈利空间模型自然选择全部直接供冷。这种情况不是 bug而是经济性边界条件的问题。你可以暂时把效率调成 1.0 验证模型逻辑是否正确再恢复真实效率。7.3 求解时间过长怎么加速模型规模其实很小但如果蓄冰槽离散间隔设成 15 分钟96 时段二进制变量数量翻四倍求解就明显变慢了。日常仿真用 1 小时分辨率足够看到趋势不需要过分追求精度。如果确实需要高频分辨率可以在保证精度的前提下设置 MIP gap 为 0.02 或者 0.05。再或者把互斥约束变体写法换成“big-M 指示变量”的紧凑形式。减少无效二进制变量对提升速度效果最明显这也是为什么我没给制冷机加启停状态变量的原因——24 个布尔变量和 48 个布尔变量的求解效率差距非常大。遇到 YALMIP 报 “No suitable solver” 或者 “Could not find a solver” 一类错误多半是安装了 YALMIP 但没安装 intlinprog 对应支持或者 YALMIP 默认调用 fmincon 去解 MILP。正确的做法是显式指定 sdpsettings(solver, intlinprog)并确认安装了 MATLAB Optimization Toolbox。7.4 结果曲线不平滑、频繁跳变有时解出来的购电功率曲线在相邻时段剧烈跳变比如上一小时 200 kW下一小时 900 kW然后第三小时又回到 250 kW。这种“锯齿”在纯经济优化里很常见因为没有加入设备爬坡约束。实际工程中制冷机功率调整速率有限电网购电也不允许频繁大幅波动。解决办法是在模型里加一个爬坡约束C [C, abs(P_ch(2:end) - P_ch(1:end-1)) 50];这个 50 kW/小时的爬坡限制会带来一定成本上升但换来的运行曲线可实施性大幅提高。做实际工程方案时一定要考虑这一点做纯学术分析则可以保持原始模型因为爬坡约束越少经济性越乐观。8. 几个容易忽视的细节与扩展方向8.1 蓄冰槽末端状态约束的必要性前面提到 S_ice(25) 0 这个约束很多人第一次建模会漏掉。它在数学上保证调度周期结束后蓄冰槽不带“余量”进入下一天让成本对比站在公平的起点上。但在实际工程里如果明天预估冷负荷很大蓄冰槽带着一部分余冰进入下一天反而是更优策略。文章想表述的是学术对比场景下加上这约束更规范工程应用时可改成一个允许范围比如末态大于等于初始态即可这一项可以通过最后的末期末态约束来控制。8.2 从仿真到工程落地的差距MATLAB 仿真做出来的调度曲线只是“纸上富贵”真到工程现场还要考虑很多仿真里没体现的东西。比如制冷机非额定工况下的 COP 会变化蓄冰槽融冰过程中由于冰水换热温差释冷速率沿时间会衰减又比如负荷预测总有误差计划做得再好执行时也要靠滚动优化来逼近真实。一个很实用的演进路径是先用这个静态 MILP 模型做日前调度分析得到基准计划然后用模型预测控制的思路每隔 1 小时重新滚动优化一次未来 24 小时计划实时修正预测误差带来的偏差。两者共用同一套 MATLAB 建模框架只是把静态问题变成循环求解的动态问题代码复用率很高。如果再把随机优化或鲁棒优化考虑进来研究方向就可以非常自然地延伸到考虑光伏和冷负荷不确定性的场景适合做课程设计进阶或硕士论文选题。到这一步数学模型本身的瓶颈不再是求解算法而是对不确定性建模的深度理解。8.3 与蓄电储能的对比思考做这个题目时我一直在想同样是转移负荷为什么不用蓄电池跟锂电储电相比冰蓄冷最大的优势是单位容量成本极低、寿命长、维护简单缺点是只能单向放冷电转冷再转冷不反向、能量密度低、只能服务冷负荷。所以在有大量空调负荷的建筑微网里冰蓄冷大概率比蓄电更划算而如果系统还有大量一般电负荷那就需要蓄冰与蓄电搭配使用。一个比较有意思的扩展是给模型同时加入蓄电池和蓄冰槽让优化算法自己决定“电存进电池还是制冷存进冰里”。两者在谷段存在竞争关系在峰段的释放目标不同耦合起来能得出更丰富的结果。这种多类型储能协同优化是当前综合能源系统研究的热点方向之一MATLAB 框架下无非是多加两组状态变量和一组互斥约束工作量不大但内容深度能上一个台阶。落到个人体会这套仿真做完最大的感触是优化调度模型是不是聪明完全取决于你对物理过程的理解是否到位。蓄冷效率、COP、峰谷电价这些参数的设定每一个都会影响优化结果哪怕只是把蓄冰效率从 0.8 调到 0.95调度曲线整个都会变形。做这个题目没有捷径先把物理搞清楚再写数学最后才轮到 MATLAB 代码。顺序反了往往陷入到处调 bug 的泥潭。最后分享一个调试小技巧每次改完约束后先跑一个 2 小时分辨率的降维版本验证模型确认逻辑没问题再换回 24 小时。很多看起来高级的报错其实都是索引错一位、单位不一致这些低级问题用小规模快速迭代排查效率比盯着完整模型硬想高得多。
阅读完成 · 觉得有帮助?