做配电网方向这些年,隔一阵子就能看到有人在问:分布式光伏、储能大量接入之后,配网到底怎么调度?固定电价收电、固定电价卖电的做法越来越不适用了,因为用户既是消费者又是生产者,也就是产消者。最近我把一篇关于“基于主从博弈的新型城镇配电系统产消者竞价策略”的EI论文完整复现了一遍,用的就是经典的IEEE33节点系统,全程Matlab实现。这篇内容解决的核心问题是:配网运营商和多个产消者之间,如何通过“先定价格、再定电量”的先后决策机制,形成一个双方都能接受的竞价均衡,而不是靠行政指令一刀切。
这篇文章适合正在做新型配电系统、分布式交易、需求响应方向的研究生和工程师。如果你对博弈论在电力系统中的应用还比较陌生,或者刚拿到一份主从博弈公式但不知道怎么落到代码上,那这篇复盘应该能帮你省下一两周的摸索时间。我会把模型拆解、数学转化、Matlab实现细节、求解器配置、踩坑记录都讲清楚,代码框架也会放出来供参考。
1. 项目核心思路拆解
1.1 为什么是“主从博弈”而不是“多代理完全竞争”
先说一个最基本的问题:分布式能源大量接入后,配网到底发生了什么变化?
传统配网是单向的:变电站往下送电,用户只管接电、用电。但现在不一样了,屋顶光伏、小区储能、电动车充电桩都接进来了,很多节点既用电又发电,而且发电量可能超过本地负荷,需要往网上送。这种节点在文献里叫“产消者”,英文就是prosumer。
这时候如果还用“固定上网电价”去收购光伏电量,会出现两个矛盾:一是用户发电高峰和用电高峰不匹配,中午光伏大发时没人用电,电价却还是那个价,产消者没有激励去自发自用或者配储能;二是配网运营商手里没有价格杠杆,没法引导用户错峰,高峰负荷压力只能靠扩容解决,很不经济。
于是大家想到了市场化的思路:让配网运营商作为价格的制定者,产消者作为电量的响应者,两者形成先后决策的关系。这个结构恰好就是经济博弈论里的Stackelberg博弈,翻译成中文常叫主从博弈。
为什么不用完全竞争的纳什均衡模型?我个人的理解是:纳什均衡假设所有参与者地位对等、同时决策、各自优化。但在配网这个场景里,线路阻塞、电压约束、容量限制这些信息只有配网运营商掌握,产消者拿不到,博弈双方的信息地位天然不对等。而且如果让所有产消者完全自由竞价,需要大量的通信和计算交互,收敛性很难保证。主从博弈的好处是它契合实际业务逻辑:你先公布一个价格曲线,我再根据这个价格优化我的用电和发电行为,双方在各自约束下达到均衡。这个“先后”不是人为规定,而是信息结构和决策权不对称的必然结果。
1.2 “竞价策略”到底在竞什么
很多刚接触这个方向的同学会误以为竞价策略就是像电力现货市场那样在交易所里报量报价。在配网侧的主从博弈框架里,竞价策略的含义更接近“价格型需求响应”加“分布式资源自调度”的结合体。
配网运营商要决策的是各时段向产消者发布的购电价格和售电价格。产消者拿到这个价格曲线后,会调整自己的行为:光伏是全部上网还是部分自用,储能是充电还是放电,可平移负荷是安排在中午还是深夜。产消者的这些响应行为反过来又会影响配网的实际潮流分布和运营商的收益。所以整个竞价过程不是一次性求解,而是一个反复迭代、最终稳定的过程。
这里的关键点是:产消者不是被动的价格接受者,他有自己的利益目标。他会计算“这个时段卖电给我划不划算”“储能现在放电压低谷期充电,综合起来能省多少钱”。配网运营商也不能随意定价,因为定价太高产消者就少买电甚至多卖电,定价太低产消者不愿意响应,最终运营商的收益反而不高。这种互相制约的关系,就是博弈的味道。
1.3 为什么测试系统选IEEE33节点
IEEE33节点是配电网领域用得最多的辐射状测试系统,33个节点、32条支路,包含5条联络开关支路,基准电压12.66kV,总负荷大约3.7MW。很多经典文献关于配网重构、分布式电源选址定容、潮流分析都是在这个系统上做的,结果对照起来非常方便。
从博弈计算的角度看,33节点规模的复杂度也非常合适。节点太少,比如3节点或6节点,产消者数量不够,博弈的互动效果不明显;节点太多,比如几百节点的实际馈线,下层产消者的优化模型叠加潮流约束后,计算量会成倍增长,不利于算法验证。IEEE33节点的产消者数量、线路阻抗参数、负荷分布的多样性,刚好可以展示主从博弈在“规模适中、约束完整”情况下的表现。而且Matlab生态下有现成的Matpower和各类潮流工具包,读入IEEE33节点数据基本就是一行命令的事,所以我最终也选了它作为复现平台。
2. 核心模型与数学细节
2.1 上层:配网运营商的定价决策模型
上层模型的决策者是配网运营商(DSO)。他的目标函数通常写成最大化自身净收益的形式:向产消者售电的收入,减去向产消者购电的支出,再减去从大电网买电的成本,必要时还要加上网络损耗的成本或惩罚项。
目标函数大致可以写成:
[ \max \sum_{t}\sum_{i} \left( \pi_{s,t} P_{s,i,t} - \pi_{b,t} P_{b,i,t} \right) - \sum_{t} c_{grid,t} P_{grid,t} ]
其中 (P_{s,i,t}) 是t时段配网向节点i产消者出售的电量, (\pi_{s,t}) 是售电价;(P_{b,i,t}) 是t时段从产消者收购的电量,(\pi_{b,t}) 是购电价;(P_{grid,t}) 是从上级电网购买的电量,(c_{grid,t}) 是分时上网电价。
约束条件主要包括三块。第一,潮流约束,最常见的写法是DistFlow支路潮流方程,用来计算各节点电压和支路功率。第二,运行安全约束,节点电压不能越限、支路电流或功率不能越限。第三,价格约束,购电价和售电价通常有上限下限,防止配网运营商乱定价。另外,由于购售价是发到所有产消者的公共信号,一般还会要求购电价和售电价满足某种联动关系,比如售电价不低于购电价,否则配网运营商可以低买高卖做无风险套利,这在工程上不合理。
DistFlow方程是配网优化里绕不开的东西,长这样:
[ P_{j} = P_{ij} - r_{ij} \frac{P_{ij}^2+Q_{ij}^2}{V_i^2} - \sum_{k \in c(j)} P_{jk} ]
[ Q_{j} = Q_{ij} - x_{ij} \frac{P_{ij}^2+Q_{ij}^2}{V_i^2} - \sum_{k \in c(j)} Q_{jk} ]
[ V_j^2 = V_i^2 - 2(r_{ij}P_{ij} + x_{ij}Q_{ij}) + (r_{ij}^2+x_{ij}^2)\frac{P_{ij}^2+Q_{ij}^2}{V_i^2} ]
很多论文在博弈模型里会把DistFlow做线性化处理,忽略损耗项里的二次项,这就是著名的LinDistFlow近似。好处是下层模型变成线性或二次规划,后续做KKT转化方便很多。代价是网损计算有少量误差,但因为IEEE33节点线路不算太长,电压降落主要受有功无功影响,误差在可接受范围内。我在复现时是先跑精确潮流,再对比线性化之后的电压结果,两者误差基本在1%以内,这才放心用线性化模型去做博弈。
2.2 下层:产消者的经济响应模型
下层的决策者是每个节点上的产消者。一个典型的新城镇产消者包含三部分:屋顶光伏、小型储能、部分可平移负荷。
产消者的目标函数是成本最小化:
[ \min \sum_{t} \left( \pi_{s,t} P_{load,t} - \pi_{b,t} P_{pv,self,t} \right) + C_{storage} + C_{comfort} ]
其中第一项是向配网购电的费用,第二项是光伏卖给配网的收益,储能损耗项用来刻画电池充放电的退化成本,舒适度惩罚项用来刻画可平移负荷偏离用户期望时段带来的不舒适。
产消者的约束条件就更多了。功率平衡约束要求光伏出力、储能放电、购电量之和等于负荷、储能充电、售电量之和。储能模型里有SOC递推方程,也就是当前剩余电量等于上一时段剩余电量加上充电效率转换后的充电量,再减去放电量除以放电效率。储能还有容量上下限、充放电功率上下限,注意同一时段不能同时充电和放电,这个需要引入二进制变量处理。可平移负荷也有窗口约束,比如热水器、洗衣机这类负荷只能在某个时间段启动,且启动时长固定。
一个容易被忽略的细节是:产消者向配网卖电的功率不是随意定的,它受限于该节点的接入容量和线路载流能力。如果模型里不补这个约束,博弈求出来的电价会导致产消者把大量光伏功率倒送,结果节点电压严重越限,整个结果在工程上不可用。我复现时在这个地方吃过亏,后面在参数设置部分会细说。
2.3 从博弈到单层优化的转化逻辑
主从博弈最麻烦的地方在于它是一个双层优化问题:上层先定价格,下层再据此优化。不能用求解器直接解,因为目标函数里嵌着另一个优化问题。
标准解法是“下层用KKT条件替换”。也就是说,把下层产消者优化问题的Karush-Kuhn-Tucker条件全部写成等式和不等式约束,等价替代掉下层优化问题。这样双层问题就变成了一个带KKT约束的单层数学规划,简称为MPCC。
KKT条件里有三类东西:一是原问题的拉格朗日函数对各变量的偏导等于零,二是原问题的约束条件本身,三是互补松弛条件。互补松弛条件是麻烦的来源,因为它包含“乘子乘以约束取值等于零”这种非线性项。处理互补松弛条件的通用办法是大M法:乘子小于等于M乘二元变量,约束取值也小于等于M乘(1减二元变量),通过一组二进制变量把互补关系拆开。
这样整个模型就变成了一个混合整数线性规划或混合整数二次规划,可以直接交给商业MILP求解器求解。这个转化过程看着简单,实际操作里坑很多,尤其是乘子的符号、互补松弛的方向、大M的取值这三个地方,一旦出错就各种异常结果。这些细节我等下在常见问题部分单独展开。
3. 求解方法对比与Matlab实现
3.1 三种常见的求解思路
主从博弈落到代码上,不同人习惯的路径不太一样。我复现时对比过三种方案,也分别踩过坑。
第一种是KKT单层化。下层用KKT条件替换,配合大M法处理互补松弛,整个问题变成一个MILP/MIQP,一次求解得到博弈均衡。这个方案的优点是求解稳定、结果精度高;缺点是模型规模大,产消者数量多、时段长的时候,二进制变量和约束数量增长很快。建议用成熟的MILP商业求解器求解,Matlab下通过YALMIP建模非常方便。
第二种是双层迭代嵌套。外层用智能优化算法(比如粒子群、遗传算法)优化配网运营商的电价,内层用求解器求解产消者优化问题,把下层目标函数值返回给外层作为适应度。这个方案写起来直观,但缺点也很明显:内外嵌套,一层粒子群要迭代几百次,每次都要调用求解器解一个优化问题,计算时间成倍增加。而且智能算法的全局收敛性没法保证,同一个参数跑两次解可能都不一样。
第三种是迭代电价法。先给定一组初始电价,求解所有产消者优化问题,然后根据产消者的总购电量修正电价,反复迭代直到收敛。这个思路最贴近“拍卖”过程,代码也最简单,但收敛条件受初始值影响很大,容易出现震荡。我在实际复现时把三种方案都试着跑了一遍,最终提交的结果用的是第一种KKT单层化方案,第三种迭代电价法只用来做结果佐证和画收敛曲线。
三种方案的特点整理成下表:
| 求解方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| KKT单层化 | 求解稳定、可直接用MILP求解器 | 模型规模大,二进制变量多 | 小中规模配网、论文复现 |
| 智能算法嵌套 | 思路直观、容易扩展约束 | 计算慢、结果不稳定 | 教学演示、小规模验证 |
| 迭代电价法 | 编程简单、贴近拍卖机制 | 收敛依赖初值、可能震荡 | 快速原型、辅助验证 |
3.2 Matlab代码框架与核心变量
我的Matlab实现分四个文件:主程序、数据初始化、模型构建、结果输出。核心建模用的是YALMIP,求解器用的商业MILP求解器,这里就不点名了,大家常用的那几款都支持。
数据初始化部分要读入IEEE33节点的拓扑和负荷参数,这部分我直接用了Matpower的数据格式,稍作修改补充光伏出力和储能参数。产消者设置在节点8、节点18、节点22、节点25、节点33这几个位置,每个节点配一组光伏加储能。
核心变量定义如下:
% 时段定义,24小时 T = 24; % 配网运营商决策变量:分时购电价、售电价 pi_buy = sdpvar(1, T, 'full'); pi_sell = sdpvar(1, T, 'full'); % 产消者决策变量 P_pv = sdpvar(N_prosumer, T, 'full'); % 光伏出力 P_load = sdpvar(N_prosumer, T, 'full'); % 负荷用电 P_ch = sdpvar(N_prosumer, T, 'full'); % 储能充电 P_dis = sdpvar(N_prosumer, T, 'full'); % 储能放电 SOC = sdpvar(N_prosumer, T, 'full'); % 储能SOC u_ch = binvar(N_prosumer, T); % 充电状态 u_dis = binvar(N_prosumer, T); % 放电状态下层产消者的优化问题建模部分,可以用一个函数封装:
function constraints = prosumer_opt_constraints(...) % 功率平衡约束 constraints = [constraints, P_pv + P_dis + P_buy == P_load + P_ch + P_sell]; % SOC递推方程 for i = 1:N_prosumer for t = 2:T constraints = [constraints, ... SOC(i,t) == SOC(i,t-1) + eta_ch * P_ch(i,t) - P_dis(i,t) / eta_dis]; end end % 充放电互斥约束 constraints = [constraints, P_ch <= M * u_ch]; constraints = [constraints, P_dis <= M * u_dis]; constraints = [constraints, u_ch + u_dis <= 1]; end实际代码里还需要把配网潮流约束、电压上下限约束、以及KKT条件生成的互补松弛约束都加进去。我建模型时是分块构建的,这样调试时能快速定位哪一块约束出了问题。
3.3 求解配置与参数设置
主从博弈模型单层化之后,问题规模取决于产消者数量、时段数和节点数。我复现的这个配置大概有500多个连续变量、400多个二进制变量、3000多个约束,求解时间在几十秒到几分钟之间,主要压力来自二进制变量对应的分支定界。
求解器参数建议重点关注三个。
首先是MIP Gap设置。默认的1%或者0.01都行,论文复现建议设到0.1%,也就是相对对偶间隙小于千分之一才停止。太严格的0.0001%会导致求解时间翻几倍,没有必要。
其次是时间限制。我一般设600秒上限,让求解器在时间到的时候给出当前最优可行解。这样即使模型遇到难解的极端情况,也不会让实验卡死。
最后是大M参数的取值。大M不能拍脑袋定,要根据变量的物理边界估算。比如购电量上限是2MW,电价上限是0.8元/kWh,那对应的乘积项上限就是1.6,大M取到20基本够了。取值偏大,求解器数值稳定性差;取值偏小,可能把可行解错误排除掉。我调大M的经验是:先跑一次不加互补松弛约束的松弛模型,统计各变量实际取值范围,再反推大M对应的尺度,这样定出来最稳。
4. 实测结果分析与典型曲线
4.1 竞价机制下配网电压的改善
我复现时最关心的一个指标是电压质量。在固定电价模式下,晚上19点到22点的晚高峰时段,IEEE33节点末端节点电压会明显跌落,特别是节点18和节点33这种线路末端,电压水平比较难看。
引入主从博弈竞价机制之后,配网运营商会把这个时段的价格抬高,产消者收到价格信号后的反应是:储能转向放电,可平移负荷从晚高峰挪到中午,光伏出力大的时段尽量多自用。这样一来,晚高峰时段的线路输送功率下降,末端电压跌落幅度明显收窄。
以原EI论文里的一个典型场景为例,固定电价下节点33在晚间最低电压大约是0.93p.u.左右,而竞价均衡后可以恢复到0.96p.u.以上。我这里不方便把原文的数据参数全部列出,但这组趋势和我复现的结果是一致的:电压改善主要发生在末端节点和光伏接入节点,越靠近主变电站的区域变化越小。这说明博弈模型的电压改善效果在空间上是非均匀的,需要结合具体的DG分布来看。
4.2 产消者的响应行为与收益变化
产消者行为的变化是另一个值得分析的点。在固定电价模式下,光伏出力只受天气影响,储能基本是“光伏多了就充,晚上满了就放”的被动控制。竞价之后,产消者的决策明显带上了“价格响应”的味道。
一个典型的场景:午间光伏大发时段,固定电价下产消者会把多余电量低价卖给配网;竞价机制下配网运营商把午间购电价定得更高,或者把售电价定得更低,引导产消者少卖电、多自用。对于装有储能的产消者,模型计算出来的最优策略往往是午间光伏充电、晚间高峰放电,这样既减少从配网购电,又能在高峰时段把电卖给配网赚差价。
从收益角度看,产消者参与竞价后的平均购电成本有明显下降,配网运营商的净收益也高于固定电价模式。这个“双赢”结果其实是主从博弈均衡的典型特征:如果不是双赢,博弈根本不可能达到稳定。产消者之间的收益差异也比较大,光伏容量大、储能配置足的产消者收益改善更明显,这会在后续扩展上引出一个问题:怎么防止收益分配过于不均衡。原论文里讨论了收益分配系数设计,代码包里也有对应模块,但那个属于进阶部分,这里先不展开。
4.3 复现结果与原EI论文的对照方法
很多同学拿到EI复现代码后最想问的是:怎么判断我复现对了?我的建议是分三层对照。
第一层对照目标函数值。原论文会给出配网运营商的最优收益和产消者的总成本,你用自己的代码跑同一个参数工况,数值在合理误差范围内就算通过。MILP求解器的容差会带来少许差异,但一般不会超过2%。
第二层对照策略曲线。把购电价曲线、储能充放电曲线、节点电压曲线画出来,逐条和原文的图对比趋势。如果趋势大致一致、个别时段有偏移,多半是负荷曲线参数或光伏出力的随机生成方式不同造成的。比如原论文可能用的是夏季典型日负荷,而你用的是冬季数据,峰值时段自然不一样。
第三层对照灵敏度分析。原论文通常会对某些关键参数做灵敏度分析,比如可调负荷比例从10%变到30%时均衡结果怎么变。你复现的模型如果能复现出同样的单调趋势,说明模型逻辑是通了,而不是参数恰好调对了。
这一层对照很重要,因为它能发现“隐藏的错误”:有些情况下你的模型是错的,但因为先验参数凑巧,结果曲线看起来仍然合理。灵敏度分析是检验模型鲁棒性的试金石。我复现过的多数主从博弈模型,最后发现结果对不上,都不是大方向错了,而是某个成本系数或者SOC上下限的设置与原文不一致。
5. 常见问题与排查技巧实录
5.1 KKT条件转换后的对偶问题报错
最常见的报错是求解器提示“infeasible”或者“unbounded”,排除参数问题后,十有八九是KKT乘子符号写反了。
我踩过的一个具体坑是:把不等式约束 (g(x) \le 0) 对应的拉格朗日乘子写成了大于等于0,而正确写法里,取“不大于”方向的约束,其乘子应该满足非正条件。还有一个坑是等式约束的乘子写漏了。拉格朗日函数里,每一个等式约束都要引入一个自由乘子,少一个就会导致对偶问题与原问题配不上,KKT条件无法成立。
排查技巧:先把所有互补松弛约束直接删掉,只保留平稳性条件和原始约束,看这个问题能不能解出来。如果能解出来,说明建模主体没问题,再去检查互补松弛部分。如果连松弛后的模型都不可行,那就是原始约束之间的矛盾,比如潮流约束和储能约束打架,需要重新检查拓扑数据。
KKT方向有没有写错的另一个快速验证方法是:手动给一个很小的场景,比如2个节点、2个时段,把下层优化用穷举法验证一遍。穷举得到的最优解应该和KKT模型的解一致。我用这个方法抓到过两次乘子符号错误,比直接看公式有效率得多。
5.2 大M参数引起的数值病态
大M法把互补松弛条件线性化之后,求解器性能对M的取值非常敏感。M取太小,解被限制在错误区域;M取太大,矩阵条件数变差,容易出现“收敛到违反约束的解”这种诡异情况。
症状表现为:求解器报告“Optimal”但产消者的购电量为负,或者储能同时出现充放电但状态变量显示不允许。这类问题通常不是模型逻辑错,而是数值问题。
解决方法有两个方向。一是根据变量物理边界动态计算M,比如购电量上限乘以电价上限再乘裕度系数。二是可以考虑用强对偶定理替代部分互补松弛条件。由于上下层都是凸优化,可以把下层最优值函数写进上层目标,用强对偶等式 (f(x) = d(\lambda)) 来等价替代所有互补松弛条件,然后利用 (x\cdot\lambda) 的强对偶形式把双线性项消掉。这种方法可以去掉一部分二进制变量,虽然不能完全消除互补松弛项,但能明显减轻大M的负担。
5.3 产消者数量增加后计算时间爆炸
当产消者从几个扩展到二十几个时,二进制变量会从几十个涨到上千个,MILP求解时间可能从几十秒涨到几十分钟。这是主从博弈模型的一个通用瓶颈。
在复现原论文时,我用了“同类产消者聚合”的技巧:把光伏容量、储能配置相近的多个产消者聚合成一个“代表产消者”,其输出电量按比例放大。求解完之后再把结果按系数分摊回每个节点。对IEEE33节点这个场景,聚合后的产消者从十几个降到五个,计算时间能缩短到原来的四分之一,结果误差在3%以内。
如果你不想聚合,也可以给原问题加一个时间限制,让求解器在300秒内返回一个可行解,再检查这个解的目标函数值与文献报道值是否吻合。这种“限时可行解”做法在论文复现里是可以接受的,因为主从博弈模型的均衡解通常不止一个严格最优点,只要有可行的均衡解就足以验证机制的有效性。
另一个有效的技巧是:先固定整数变量求解一次LP松弛,得到连续变量的初值,作为热启动传给MILP求解器。热启动能显著减少分支定界树的搜索数量,在我实测里大概能缩短30%到50%的求解时间。
5.4 价格曲线出现剧烈震荡如何处理
有同学跑出来的竞价模型,得到的电价曲线不是在合理的范围内波动,而是像震荡一样在上下边界之间来回跳,这通常是模型缺少价格平滑约束导致的。
配网运营商虽然可以分时定价,但实际市场里电价曲线不能跳变太剧烈,否则用户没法响应。解决办法是在模型中加入价格变化率约束,比如相邻时段电价差的绝对值不超过某个阈值,或者直接加入价格曲线的凸性约束。原论文里也有一处对价格曲线平滑性的处理,常见手段是限制相邻时段电价差的百分比。
价格震荡的另一个来源是购电价与售电价脱钩。如果模型允许购电价和售电价各自独立优化,那求解器很容易通过“购电价极低、售电价极高”的组合来人为抬高配网收益。记得一定要加购售价联动约束,常见的写法是售电价减去购电价的差值保持在一个给定区间内,或者直接要求购电价按某个系数打折后等于售电价。这个约束不加,你的均衡解在真实场景里根本没有实用性。
6. 个人经验与扩展建议
复现完这个项目后,我最大的体会是:主从博弈模型真正难的不是公式推导,而是把数学条件和工程实际对不上的地方逐一定位清楚。比如互补松弛条件在数学上是干干净净的,但落到具体代码里就是二进制变量和M参数的博弈;DistFlow方程在论文里是完美的凸约束,但放到混合整数模型里就变成了求解时间的隐形杀手。所以我的建议是,拿到代码后先不要急着看结果,先把模型分块跑通:先跑上层不动下层的纯电价优化,再跑下层不动上层的纯产消者响应,最后合到一起做博弈。这样一旦结果不对,你能马上定位是哪一层的问题。
再分享一个实用小技巧:所有价格变量和功率变量都要统一单位。有的论文里电价用“元/kWh”,电量用“kWh”,目标函数直接相乘没问题;但如果你从不同来源的数据文件里混用了“MW”和“kW”,目标函数数值会差三个数量级,轻则求解慢,重则直接不可行。我复现时在数据预处理阶段专门写了一个单位检查函数,把不同单位的数据统一到同一量纲下,这个习惯后来帮我少走了很多弯路。
这个项目后续可以扩展的方向也挺多。比较自然的第一步是把IEEE33节点换成有更多DG接入的实际馈线拓扑,比如某个园区或某条城郊馈线的简化模型,再把单时段主从博弈扩展到多时段耦合的鲁棒优化,考虑光伏出力的不确定性。另一个方向是引入多个配网运营商,变成多领导者多跟随者的博弈结构,但这已经不是标准Stackelberg博弈了,求解难度会显著上升。如果只是入门,还是建议先把单领导者多跟随者的框架吃透,在这个基础上叠加更多工程约束。总之主从博弈框架本身不复杂,复杂的是如何让模型贴近真实物理系统,又保持可解性。这个度,需要你亲手跑几遍代码才能找到感觉。