做综合能源系统调度有一段时间的人,大概都遇到过这样的追问:运行人员拿着你的调度方案问,“你说这个方案的置信度是95%,那到底是什么意思?是100次里有95次不会出事?那剩下5次怎么办?为什么不是99%?”再往后,又有人问“你模型里的安全裕量系数取1.2还是1.5,依据是什么?拍脑袋定的吗?”
这两个问题其实指向同一个核心——机会约束置信度参数和安全裕量系数,它们在综合能源系统调度里的作用,远比表面看起来复杂。我刚接触这类模型时也犯过迷糊,以为置信度设得越高越好,安全裕量系数越大越稳,结果优化出来的方案成本高得离谱,运行人员根本不敢用。后来把这两个参数的数学本质、工程含义和配合逻辑彻底捋清楚,才明白它们到底该怎么设、该怎么解释。
这篇内容,我会从问题产生的根源讲起,把机会约束的数学推导一步步写清楚,再结合Matlab代码实例,完整走一遍场景生成、约束转换、求解和后验校验的流程,最后聊一些我在实际调参中踩过的坑。内容偏干货,适合正在做综合能源系统优化调度、或者打算用机会约束处理风光不确定性的同学。
1. 不确定性从哪来,为什么确定性模型在综合能源调度里不够用
很多人一开始不理解,为什么综合能源系统调度要搞得这么复杂,直接按预测值做优化不就行了?实际跑过几次你就知道,问题出在“预测值”这三个字上。
1.1 风光出力、电热负荷波动,误差是怎么被放大的
先说风电。风机的出力与风速的三次方近似成正比,这意味着风速预测误差哪怕只有10%,风机出力预测误差可能被放大到30%。尤其是切入风速附近,风速小幅变化,出力可能从几十千瓦掉到接近零。光伏相对温和一些,但受云层遮挡影响,分钟级出力波动也非常剧烈。
负荷侧同样不省心。电负荷受天气、生产计划、人的行为影响,误差通常在2%到5%之间,虽然比例不大,但乘以一个大系统的基数就是几十上百兆瓦的量级。热负荷更特殊,它跟建筑热惯性、管网延迟有关,响应慢、波动持久,预测误差的“形状”跟电负荷完全不一样。
这些不确定性一旦叠加到同一个优化模型里,问题就变得很现实:你按风电80 MW、光伏30 MW、负荷250 MW去安排机组出力,等到实际运行时,风电只有60 MW,负荷却涨到270 MW,谁来填这个缺口?
1.2 确定性调度和鲁棒调度的局限
传统确定性调度模型把随机变量全部用预测值替代,约束写成:
[ P_g + P_w^{fc} + P_{buy} = P_L^{fc} ]
这种等式约束在日常运行中几乎不可能严格成立,所以工程师们在模型外加了很多“手动保护”——比如在负荷预测值上乘1.05,或者给机组留50 MW备用。问题是,这些手动加的裕量没有概率依据,多了浪费,少了不够,而且不同人拍出来的脑袋不一样,方案风格完全不同。
鲁棒优化则是另一个极端。它要求所有随机变量在给定不确定集合内取值时,约束都必须满足。这个方法安全是安全,但如果不确定集合描述得过大,优化结果会极端保守。我见过一个算例,风电波动范围取±30%的时候,燃气轮机几乎被顶到满发,经济性一塌糊涂,运行人员看完直接摇头:“按你这方案,风电白装了。”
1.3 机会约束给出的是第三种思路
机会约束(Chance Constraint)的核心思想可以用一句话概括:我不要求所有随机场景下约束都成立,只要求约束成立的概率不低于一个给定值β。
写成数学形式就是:
[ P{ g(x, \xi) \leq 0 } \geq \beta ]
其中( x )是决策变量(机组出力、储能充放电功率等),( \xi )是随机变量(风电实际出力、负荷实际值等),( \beta )就是置信度参数。β = 0.95意味着:允许有5%的场景下约束不满足——对应到工程语言,就是允许有5%的概率出现电力不足、热力不足或线路越限。
这个思路很符合实际工程直觉:我用经济性最好的方案,换取一个可量化的、可承受的小概率风险。至于这个“小概率风险”怎么控制、怎么让运行人员接受,就是置信度参数和安全裕量系数要解决的问题。
2. 置信度参数如何从概率语言变成可求解的确定性约束
机会约束听起来很合理,但直接扔给求解器是解不了的。算法不认识“概率大于等于β”这种约束,必须把概率约束转化成确定性的数学表达式,或者用离散场景去逼近。这个转化过程是整个建模的核心。
2.1 单条机会约束的基本形式
先看综合能源调度中最常见的一类约束——功率平衡备用约束。系统需要保证实际运行中,总可调出力加上备用容量能够覆盖负荷和风电的随机波动:
[ P{ P_g + P_{buy} + P_w^{act} - P_{eb} \geq P_L^{act} } \geq \beta ]
这个约束的物理含义是:燃气轮机出力、网购电、风电实际出力之和,减去电锅炉消耗的电功率,能够满足实际负荷的概率不低于β。
2.2 正态分布假设下的解析转换过程
假设负荷实际值( P_L^{act} )和风电实际值( P_w^{act} )都是随机变量,且预测误差服从正态分布:
[ P_L^{act} \sim N(\mu_L, \sigma_L^2), \quad P_w^{act} \sim N(\mu_w, \sigma_w^2) ]
这里的( \mu_L )、( \mu_w )就是预测值,( \sigma_L )、( \sigma_w )是预测误差的标准差。两个随机变量的线性组合仍然服从正态分布,所以:
[ P_w^{act} - P_L^{act} \sim N(\mu_w - \mu_L, \sigma_w^2 + \sigma_L^2) ]
把机会约束重新整理一下:
[ P{ P_g + P_{buy} - P_{eb} + P_w^{act} \geq P_L^{act} } \geq \beta ]
等价于:
[ P{ P_w^{act} - P_L^{act} \geq -(P_g + P_{buy} - P_{eb}) } \geq \beta ]
令随机变量( Z = P_w^{act} - P_L^{act} ),则上式可以写成:
[ P{ Z \geq -M } \geq \beta ]
其中( M = P_g + P_{buy} - P_{eb} )。由于( Z )服从正态分布,( Z )的标准正态化形式为( (Z - \mu_Z)/\sigma_Z )。查标准正态分布表,得到:
[ M + \mu_Z \geq \Phi^{-1}(\beta) \cdot \sigma_Z ]
带回原变量:
[ P_g + P_{buy} - P_{eb} + \mu_w - \mu_L \geq \Phi^{-1}(\beta) \cdot \sqrt{\sigma_w^2 + \sigma_L^2} ]
最终确定性约束为:
[ P_g + P_{buy} - P_{eb} \geq \mu_L - \mu_w + \Phi^{-1}(\beta) \cdot \sqrt{\sigma_w^2 + \sigma_L^2} ]
这个变换的工程含义非常清楚:机会约束转换后,相当于在负荷与风电预测值之差的基础上,再加上一个“风险附加项”( \Phi^{-1}(\beta) \cdot \sqrt{\sigma_w^2 + \sigma_L^2} )。这个附加项就是为了应对随机波动而预留的功率空间。
2.3 不同置信度对应的分位数
( \Phi^{-1}(\beta) )是标准正态分布的分位数,也是置信度参数进入优化模型的通道。几个常用取值大家记一下:
| 置信度β | 分位数( \Phi^{-1}(\beta) ) | 对应的物理含义 |
|---|---|---|
| 0.85 | 1.036 | 预留约1.04倍标准差 |
| 0.90 | 1.282 | 预留约1.28倍标准差 |
| 0.95 | 1.645 | 预留约1.65倍标准差 |
| 0.99 | 2.326 | 预留约2.33倍标准差 |
看到这个表,你应该能直观感受到:置信度从0.95提高到0.99,分位数从1.645跳到2.326,附加的功率空间增加了41%。这就是“置信度不是越高越好”的数学根源——越往极端走,每提高一点置信度需要付出的代价越大。
2.4 不用解析形式,场景法怎么处理
如果随机变量不服从正态分布,或者多个随机变量之间存在复杂耦合(比如风电和负荷不是独立的),解析转换就不好做了。这时候可以用场景法:从历史数据中抽样生成大量离散场景,然后把机会约束转成排序分位数形式。
在Matlab里用经验分位数函数可以直接搞:
% 假设有历史误差样本 error_hist % 将机会约束转成确定性约束 % P{ sum(P_res) >= error } >= beta 等价于 % sum(P_res) >= quantile(error_hist, beta) required_reserve = quantile(error_hist, beta); Cons = [Cons, sum(P_res) >= required_reserve];这种做法不依赖正态分布假设,直接用历史数据的经验分布说话,工程上非常实用。代价是样本量要够大,不然尾部分位数估不准。如果历史数据只有一两年,每天96个点,算下来也就几万个样本,尾部还是不够稳,建议用核密度估计或者极值理论补一下。
3. 安全裕量系数和置信度参数什么关系,怎么配合用
聊完置信度参数,另一个绕不开的东西就是安全裕量系数。它在综合能源调度模型里几乎无处不在,但很多人没仔细想过它和置信度参数之间的内在联系。
3.1 安全裕量系数到底在控制什么
安全裕量系数通常以乘子的形式出现在约束里,常见的有这么几类:
| 应用场景 | 典型形式 | 常见取值范围 |
|---|---|---|
| 机组备用容量 | ( R = k \cdot P_{rated} ) | 0.05 ~ 0.15 |
| 联络线传输极限 | ( P_{line}^{max} = k \cdot P_{line}^{rated} ) | 0.80 ~ 0.95 |
| 储能SOC边界 | ( SOC \in [k_{min}, k_{max}] ) | 0.05 ~ 0.95 |
| 热网供水温度上限 | ( T_{sup}^{max} = T_{rated}^{max} - \Delta T ) | 下降2~5°C |
以联络线为例,明明线路额定极限是100 MW,调度模型里却只允许用到80 MW,那20%的裕量就是为了应对线路参数误差、潮流计算误差、N-1校验以及负荷波动等一系列说不清道不明的因素。
从数学形式上看,安全裕量系数可以写成约束右侧的一个缩放因子:
[ f(x) \leq k \cdot f_{max} ]
但在机会约束的框架里,如果随机变量的波动范围用标准差(\sigma)来描述,那么约束可以写成:
[ f(x) \leq f_{max} - k \cdot \sigma ]
这里的( k )本质上就是一个“多少个标准差”的表述。到这里你应该发现了——安全裕量系数和置信度参数,在数学上是可以打通的。
3.2 一个关键等价关系:安全裕量系数就是正态分位数
回到上一节的推导结果。机会约束转换后得到的确定性约束形式是:
[ M \geq \mu + \Phi^{-1}(\beta) \cdot \sigma ]
如果把( \Phi^{-1}(\beta) )看成一个系数( k ),那么这条约束就变成了:
[ M \geq \mu + k \cdot \sigma ]
这跟工程上常用的“均值加k倍标准差作为安全值”完全相同。换句话说,在正态分布假设下,安全裕量系数就是标准正态分布的分位数,两者是同一件事的两种表述。置信度β=0.95对应( k ) = 1.645,β=0.99对应( k ) = 2.326。
但这个等价关系有个前提——随机变量的分布已知,且假设正态。实际工程里,很多随机变量的分布并不清晰,或者只能用区间描述,这时候工程师更倾向于直接给定安全裕量系数,不去纠结概率解释。两种做法没有绝对的优劣,关键是别混用。
3.3 配合使用的正确逻辑:误差分摊
我见过不少建模的人,既在功率平衡约束里加了机会约束,又在备用约束里设置了很大的安全裕量系数,最后整个系统冗余得不得了。问题出在哪?同一个预测误差被前后两个环节各预留了一遍。
正确的做法,是把总预测误差在“概率预留”和“工程裕量”之间做一个分摊。比如,风电功率平衡环节用机会约束处理,置信度取0.90,预留1.28倍标准差;备用容量环节的安全裕量系数就可以取小一些,比如0.08,只应对极端情况。反过来也一样,如果备用环节已经用安全裕量系数留了很大的空间,功率平衡环节的置信度就不该设得太高。
我自己的习惯是:先用机会约束处理主要随机变量(风电、光伏),再用较小的安全裕量系数处理次要的、难以建模的不确定性(设备参数误差、模型失配)。这种分工清晰,也容易向别人解释。
4. Matlab实现中必须把握的四个核心环节
理论讲透了,接下来是实际操作。我按照自己跑通这类模型的顺序,把Matlab实现中最重要的四个环节拆开讲。环境是Matlab + Yalmip + Gurobi(没有Gurobi也可以先用Cplex,或者干脆用Matlab自带的linprog跑小算例)。
4.1 环节一:场景生成——用历史数据描述随机变量
场景生成是机会约束建模的第一步。Correlation matrix、均值、标准差,这些参数通常从历史预测数据和实际运行数据的差值中统计得到。
% 场景生成示例:风、光、负荷三个随机变量,考虑相关性 % 参数设置 mu = [80; 30; 250]; % 风电、光伏、负荷的预测均值,MW Sigma = [36, 4, 10; ... % 协方差矩阵 4, 9, 6; 10, 6, 64]; % 对角元是预测误差方差,MW^2 ns = 1000; % 场景数 rng(42); % 直接用多维正态分布函数生成场景 xi = mvnrnd(mu, Sigma, ns); P_w_scn = xi(:, 1); % 风电场景 P_pv_scn = xi(:, 2); % 光伏场景 P_L_scn = xi(:, 3); % 负荷场景 % 也可以使用拉丁超立方采样,小样本下覆盖效果更好 ns_lhs = 500; z = zeros(ns_lhs, 3); for j = 1:3 p = ((1:ns_lhs)' - 1 + rand(ns_lhs, 1)) / ns_lhs; z(:, j) = norminv(p, mu(j), sqrt(Sigma(j, j))); end L = chol(Sigma, 'lower'); xi_lhs = z * L' + repmat(mu, ns_lhs, 1);注意这里chol(Sigma, 'lower')的使用。Sigma必须是对称正定矩阵,如果统计出来的协方差矩阵不正定(实际中经常发生,因为数据量不足),需要先做特征值修正:
[V, D] = eig(Sigma); D(D < 1e-6) = 1e-6; % 将微小特征值修正到合理下限 Sigma_fixed = V * D * V';这个坑我踩过好几回,跑着跑着chol报错说矩阵不是正定的,花了半天才定位到是协方差矩阵的问题。
4.2 环节二:机会约束的确定性转化
场景生成之后,建模就进入核心环节。如果采用解析转换,直接用norminv函数计算分位数,把概率约束替换成线性约束。
以电-热联供系统单时段为例,系统包含燃气轮机、网购电、风电、燃气锅炉、电锅炉。燃气轮机通过余热回收同时供热,电锅炉消耗电功率供热。
% 参数定义 P_L = 280; % 电负荷预测值,kW Q_L = 200; % 热负荷预测值,kW P_w_fc = 80; % 风电预测值,kW sigma_w = 10; % 风电预测误差标准差,kW sigma_L = 15; % 负荷预测误差标准差,kW beta = 0.95; % 机会约束置信度 c_g = 0.6; % 燃气轮机发电成本,元/kWh c_buy = 0.8; % 网购电成本,元/kWh c_w = 0.1; % 风电运维成本,元/kWh c_gb = 0.5; % 燃气锅炉供热成本,元/kWh c_eb = 0.3; % 电锅炉供热成本,元/kWh eta_g = 0.35; % 燃气轮机发电效率 eta_h = 0.80; % 余热回收效率 eta_eb = 0.95; % 电锅炉热效率 P_g_max = 150; % 燃气轮机最大电出力,kW P_buy_max = 100; % 网购电最大功率,kW Q_gb_max = 150; % 燃气锅炉最大热出力,kW Q_eb_max = 100; % 电锅炉最大热出力,kW % 机会约束转换 % P{ P_g + P_buy + P_w_actual - P_eb >= P_L_actual } >= beta % 等价于: % P_g + P_buy - P_eb >= mu_L - mu_w + norminv(beta) * sqrt(sigma_w^2 + sigma_L^2) required_level = P_L - P_w_fc + norminv(beta, 0, 1) * sqrt(sigma_w^2 + sigma_L^2);注意norminv(beta, 0, 1)和norminv(beta)是等价的,后者默认就是标准正态。很多人容易忽略的是:这里必须把电锅炉消耗的功率( P_{eb} )也纳入平衡约束,因为电锅炉电转热的过程本身会改变电功率平衡。
4.3 环节三:Yalmip建模与求解器调用
接下来定义决策变量,写入约束、目标函数,调用求解器求解。完整的Yalmip建模代码如下:
% 定义决策变量 P_g = sdpvar(1, 1); % 燃气轮机发电出力 P_buy = sdpvar(1, 1); % 网购电功率 P_w = sdpvar(1, 1); % 风电调度出力 Q_gb = sdpvar(1, 1); % 燃气锅炉热出力 Q_eb = sdpvar(1, 1); % 电锅炉热出力 % 电锅炉消耗的电功率 P_eb = Q_eb / eta_eb; % 构建约束集合 Cons = []; % 机会约束转换后的电功率平衡 % P_g + P_buy + P_w - P_eb >= required_level Cons = [Cons, P_g + P_buy + P_w - P_eb >= required_level]; % 热功率平衡 Cons = [Cons, Q_gb + Q_eb >= Q_L]; % 燃气轮机余热回收供热(简化模型) Q_gt = eta_h / eta_g * P_g; Cons = [Cons, Q_gt >= 0]; % 可进一步约束Q_gt与热负荷的关系 % 设备出力上下限 Cons = [Cons, 0 <= P_g <= P_g_max]; Cons = [Cons, 0 <= P_buy <= P_buy_max]; Cons = [Cons, 0 <= P_w <= P_w_fc]; % 风电调度出力不能超过预测值 Cons = [Cons, 0 <= Q_gb <= Q_gb_max]; Cons = [Cons, 0 <= Q_eb <= Q_eb_max]; % 目标函数:最小化总运行成本 Objective = c_g * P_g + c_buy * P_buy + c_w * P_w + c_gb * Q_gb + c_eb * Q_eb; % 求解 ops = sdpsettings('solver', 'gurobi', 'verbose', 2); sol = optimize(Cons, Objective, ops); % 输出结果 if sol.problem == 0 fprintf('P_g = %.2f kW\n', value(P_g)); fprintf('P_buy = %.2f kW\n', value(P_buy)); fprintf('P_w = %.2f kW\n', value(P_w)); fprintf('Q_eb = %.2f kW\n', value(Q_eb)); fprintf('Q_gb = %.2f kW\n', value(Q_gb)); fprintf('总运行成本 = %.2f 元\n', value(Objective)); else disp('求解失败'); disp(sol.info); end这段代码求解的是一个线性规划问题,速度非常快。实际综合能源调度通常是多时段、多设备、含0-1变量的混合整数线性规划(MILP),但核心的机会约束转化完全一致,区别只是把单时段变量扩展成按时间索引的变量矩阵。
4.4 环节四:后验校验——求解完不算完,必须验证
模型求解完之后,最关键的一步往往被忽略——后验校验。用求解出来的决策变量,重新生成大量随机场景,统计约束违反率是否真的在允许范围内。这一步不是可选项,而是必须做的验证环节。
% 求解出的决策变量值 P_g_opt = value(P_g); P_buy_opt = value(P_buy); P_w_opt = value(P_w); Q_eb_opt = value(Q_eb); P_eb_opt = Q_eb_opt / eta_eb; % 蒙特卡洛后验校验 N_sim = 10000; % 模拟场景数 P_w_sim = normrnd(P_w_fc, sigma_w, N_sim, 1); P_L_sim = normrnd(P_L, sigma_L, N_sim, 1); % 电功率平衡越限判断 short_power = P_g_opt + P_buy_opt + P_w_sim - P_eb_opt - P_L_sim; viol_rate = mean(short_power < 0); fprintf('电功率缺额越限概率 = %.4f%%\n', viol_rate * 100); fprintf('设置置信度 = %.2f%%\n', beta * 100); if viol_rate <= 1 - beta + 0.005 disp('后验校验通过:实际越限率在允许范围内'); else disp('后验校验不通过:请检查分布假设或约束转换过程'); end我见过不少人求解完拿到方案就结束了,根本不验证。直到有一次,一个用场景法建模的学生跑来问我,为什么后验越限率接近10%,而设置的置信度明明是0.95。排查半天发现,他在场景法里用的是mean(g(x, xi) > 0)来统计,但机会约束是P{g(x, xi) <= 0} >= beta,方向搞反了,后验统计的“违反率”和模型里的“违反率”定义不一致。所以后验校验的统计口径必须和模型定义严格对齐。
5. 参数调试中的实际经验与常见误区
理论方法都讲完了,最后聊点实际的调试经验。这些经验来自我在不同算例上反复调参的总结,基本都是踩坑踩出来的。
5.1 误区一:置信度越大越好
这是最常见的误解。有人觉得置信度代表系统可靠性,那当然越大越好,直接设0.999。但他忽略了鲁棒性是有成本的。置信度从0.90提高到0.99,分位数从1.282提高到2.326,需要的额外备用功率增加了一倍左右。这些备用不是免费的,最终会体现在燃料费用、设备容量投资上。
我在一个电热联供算例上做过一组参数扫描,趋势非常典型:
| 置信度β | 分位数( \Phi^{-1}(\beta) ) | 相对运行成本 | 实际越限率 |
|---|---|---|---|
| 0.85 | 1.036 | 1.000 | 约8.0% |
| 0.90 | 1.282 | 1.018 | 约4.8% |
| 0.95 | 1.645 | 1.052 | 约1.6% |
| 0.99 | 2.326 | 1.115 | 约0.2% |
注意这个边际效应:经济性损失随置信度提高而加速恶化,而可靠性改善却越来越不明显。β从0.95提高到0.99,运行成本增加了6.3%,越限率只降低了1.4个百分点。在实际应用中,要根据系统的重要程度和运行要求来选,一般取0.90~0.95是比较合理的区间,很少需要到0.99以上。
5.2 误区二:正态分布假设不分场合硬套
机会约束解析转换的强大之处在于正态分布假设下可以转成线性约束,但这不代表所有随机变量都适合用正态分布描述。风电功率预测误差的分布接近正态但尾部更厚,光伏在某些时段可能是偏态分布,负荷在极端天气下的预测误差甚至可能是双峰分布。
如果强行套正态假设,转换出的“置信度”可能就是假的。我在实际项目里遇到过一次,风电预测误差的峰度非常高,用正态分位数0.95去建模,实际后验越限率达到了7%——比模型声称的5%高出不少。后来改用历史误差的经验分布分位数,情况就好多了:
% 用历史样本的经验分位数替代理论分位数 % 假设 error_wind 是历史风电预测误差样本 k_experience = quantile(error_wind, beta) / std(error_wind); required_level = P_L - P_w_fc + k_experience * sqrt(sigma_w^2 + sigma_L^2);建议在建模前先做一步统计检验,画一下历史误差的QQ图,看看数据是否真的服从正态分布。若不是,优先用场景法或经验分位数。
5.3 误区三:安全裕量系数和置信度参数双重叠加
前面章节专门讲过,这两个参数本质上是相通的。但有些模型会把两者同时设得非常大——平衡约束里用了0.99的置信度,设备备用系数也取到1.5,最后整个系统冗余度爆表,成本高到没人接受。
正确的分工建议是:
- 机会约束处理“有明确概率分布”的随机量,比如风电、光伏、负荷预测误差;
- 安全裕量系数处理“难以建模的工程不确定性”,比如设备老化导致的效率下降、模型误差、量测误差。
具体操作上,可以把总不确定度拆成两部分:80%的不确定性通过机会约束来考虑,20%的“兜底”部分通过安全裕量系数来考虑。这样既保证了模型的概率含义清晰,又给工程上留了余地。
5.4 模型规模膨胀时的求解加速技巧
综合能源系统如果建模到多能源站、多时段、含储能和管网,再加机会约束后变量规模会非常可观。有没有求解加速的技巧?根据我的经验,有几个方法优先级最高:
第一,能用解析转换的优先用解析转换,不要一上来就搞场景法。解析转换后大概率是线性规划或混合整数线性规划,求解速度快几个数量级。
第二,如果必须要用场景法,场景数量不用贪多。用500~1000个场景往往已经足够稳定,再多只是让后验校验时间变长。优先用拉丁超立方采样代替纯蒙特卡洛,同样的样本量下覆盖率明显更好。
第三,对于MILP模型,用sdpsettings设置合理的求解容忍度:
ops = sdpsettings('solver', 'gurobi', 'verbose', 1, ... 'gurobi.MIPGap', 0.01, ... % 1%的gap就能省大量时间 'gurobi.TimeLimit', 600); % 设置时间上限很多情况下,把MIPGap从默认的1e-4放宽到1e-2,求解时间能减少一半以上,而目标函数偏差几乎可以忽略。这种精度损失在实际调度中完全可接受。
5.5 最后一点个人体会:要能向运行人员解释清楚
做这一行久了,我最深的体会是:调度方案的数学性质再漂亮,如果运行人员听不懂,方案就很难落地。每次给调度方案,最好附上一句大白话解释——“这个方案允许在极端天气下出现不超过N个小时的供电不足,概率约等于每年发生几次,对应需要购买多少备用容量。”把置信度参数和安全裕量系数的数学语言翻译成运行人员能理解的工程语言,这才是机会约束方法真正发挥作用的关键一步。
参数取多少、模型怎么建,这些都是可以算出来、调出来的,但能不能让方案在系统中真正跑起来、让运行人员接受它,往往决定了你的研究成果是停在论文里,还是走进调度大厅。