調(diào)度與利益分配中的Matlab實(shí)現(xiàn))
做綜合能源系統(tǒng)調(diào)度的朋友應(yīng)該都有體會(huì)模型本身難的不是數(shù)學(xué)推導(dǎo)而是“一群利益不一致的主體為什么愿意坐到一起把能量湖打通”。這個(gè)標(biāo)題里的“合作博弈”說(shuō)到底就是在回答這個(gè)問(wèn)題——先證明合作比單干劃算再把合作產(chǎn)生的額外收益公平分掉。這篇博文我基于自己跑過(guò)的一個(gè)三主體園區(qū)算例把建模、求解、利益分配到Matlab實(shí)現(xiàn)串起來(lái)講清楚文末還有我實(shí)際調(diào)試中踩過(guò)的幾個(gè)坑希望幫你少走彎路。適合正在做IES方向研究、或想用合作博弈寫(xiě)調(diào)度/分配代碼的同學(xué)參考。1. 先拆清楚合作博弈在綜合能源系統(tǒng)里到底解決什么問(wèn)題1.1 多能互補(bǔ)背后藏著的是“多主體的利益博弈”綜合能源系統(tǒng)IES表面上是一個(gè)能量系統(tǒng)電、熱、氣耦合在一起有熱電聯(lián)產(chǎn)、熱泵、儲(chǔ)能、燃?xì)忮仩t這些設(shè)備。但你往運(yùn)營(yíng)層面看它其實(shí)是一個(gè)“多人利益場(chǎng)”。比如一個(gè)園區(qū)里熱電聯(lián)產(chǎn)機(jī)組可能屬于能源服務(wù)公司儲(chǔ)能站可能是第三方投資運(yùn)營(yíng)熱泵和用戶(hù)負(fù)荷則是用戶(hù)側(cè)資產(chǎn)各主體之間并沒(méi)有一個(gè)“上帝視角”的統(tǒng)一指揮中心。傳統(tǒng)優(yōu)化調(diào)度默認(rèn)有一個(gè)集中調(diào)度者可以全局安排每臺(tái)設(shè)備的出力目標(biāo)是系統(tǒng)總成本最小。這在理論上是漂亮的現(xiàn)實(shí)卻經(jīng)常推不動(dòng)某個(gè)主體覺(jué)得自己出力了、設(shè)備被占用了、風(fēng)險(xiǎn)被拉高了最終卻只分到很少的收益那下次它就不配合。合作博弈的價(jià)值正在于此它不是站在“上帝視角”做調(diào)度而是承認(rèn)每個(gè)主體都是理性決策者通過(guò)公平的分配機(jī)制讓各方自愿參與合作。1.2 什么時(shí)候該用合作博弈什么時(shí)候不該用需要先說(shuō)清楚合作博弈不是替代優(yōu)化調(diào)度而是覆蓋在優(yōu)化調(diào)度之上的“利益分配層”。底層調(diào)度問(wèn)題依然要解只不過(guò)要對(duì)所有可能的聯(lián)盟組合分別求解一遍得到每個(gè)聯(lián)盟的收益然后拿這套收益表去算分配。什么情況下適合用合作博弈我的判斷標(biāo)準(zhǔn)有三條系統(tǒng)里存在多個(gè)獨(dú)立利益主體且它們有能力選擇“不合作”主體之間聯(lián)動(dòng)后能產(chǎn)生明顯的協(xié)同收益最常見(jiàn)的就是余熱利用、互供電、共享儲(chǔ)能需要一個(gè)讓各方都認(rèn)可的分配結(jié)果而不是簡(jiǎn)單的按比例分錢(qián)。反過(guò)來(lái)如果整個(gè)系統(tǒng)就是一個(gè)運(yùn)營(yíng)主體內(nèi)部完全是成本中心管理那就沒(méi)必要上合作博弈集中優(yōu)化就夠了。合作博弈的本質(zhì)是為“分蛋糕”提供一套令人信服的規(guī)則。對(duì)比維度集中式優(yōu)化調(diào)度合作博弈調(diào)度決策假設(shè)一個(gè)中心決策者多主體自愿協(xié)作目標(biāo)函數(shù)系統(tǒng)總成本最小/收益最大聯(lián)盟收益最大分配公平關(guān)鍵輸出各設(shè)備出力計(jì)劃分配給各主體的收益值落地痛點(diǎn)主體可能不配合需要枚舉/篩選聯(lián)盟典型場(chǎng)景一個(gè)電網(wǎng)公司管整個(gè)片區(qū)園區(qū)多投資方協(xié)同、微網(wǎng)群互濟(jì)2. 建立這個(gè)模型需要哪幾塊“積木”2.1 多能流系統(tǒng)的物理模型要算聯(lián)盟收益第一步是把每個(gè)主體的物理模型建出來(lái)。學(xué)術(shù)界最常用的框架是能量樞紐Energy Hub模型核心是一個(gè)輸入-輸出的轉(zhuǎn)換矩陣。比如一個(gè)簡(jiǎn)單的電-熱-氣耦合系統(tǒng)輸入是天然氣、電網(wǎng)購(gòu)電輸出是電負(fù)荷、熱負(fù)荷中間設(shè)備包括CHP、燃?xì)忮仩t、熱泵、儲(chǔ)能。我在實(shí)際項(xiàng)目中更喜歡把設(shè)備模型寫(xiě)成“通用單元”形式每個(gè)設(shè)備至少包含輸入功率、輸出功率、轉(zhuǎn)換效率、爬坡約束、啟停狀態(tài)等結(jié)構(gòu)這樣后續(xù)算聯(lián)盟時(shí)只需要在集合層面增刪設(shè)備非常省事。2.2 調(diào)度模型的目標(biāo)與約束調(diào)度模型是聯(lián)盟收益的計(jì)算引擎。目標(biāo)函數(shù)通常寫(xiě)為[ \min \sum_{t1}^{T} \left( C_{\text{grid},t} P_{\text{grid},t} C_{\text{gas}} F_{\text{gas},t} - C_{\text{sell}} P_{\text{sell},t} \right) ]其中第一項(xiàng)是購(gòu)電成本第二項(xiàng)是天然氣成本第三項(xiàng)是向電網(wǎng)售電的收益。常見(jiàn)約束包括電功率平衡發(fā)電購(gòu)電放電 電負(fù)荷用電設(shè)備充電售電熱功率平衡產(chǎn)熱蓄熱放熱 熱負(fù)荷設(shè)備出力上下限與爬坡約束儲(chǔ)能SOC遞推關(guān)系與容量約束聯(lián)絡(luò)線(xiàn)功率、燃?xì)赓?gòu)買(mǎi)上下限。需要提一句對(duì)于多主體聯(lián)盟每個(gè)聯(lián)盟的最優(yōu)調(diào)度是在“該聯(lián)盟內(nèi)部設(shè)備可用、且只能通過(guò)公共聯(lián)絡(luò)線(xiàn)對(duì)外交易”的假設(shè)下求解的。不同聯(lián)盟的設(shè)備集合不同所以需要為每個(gè)聯(lián)盟單獨(dú)建一次調(diào)度優(yōu)化問(wèn)題。這也是特征函數(shù)計(jì)算成本高的根源。2.3 特征函數(shù)所有聯(lián)盟收益的集合合作博弈的核心數(shù)據(jù)是特征函數(shù) (v(S))表示聯(lián)盟 (S \subseteq N) 內(nèi)部成員合作時(shí)能獲得的最大總收益。這里的 (v(S)) 不一定是“收益”也可以是負(fù)值即最小運(yùn)行成本。實(shí)際操作中我會(huì)統(tǒng)一轉(zhuǎn)成收益口徑[ v(S) - \min \sum_{t} C ]這樣所有聯(lián)盟的 (v) 都是“越大越好”。算例中我取了三個(gè)主體CHP熱電聯(lián)產(chǎn)、HP熱泵、BESS儲(chǔ)能。獨(dú)立運(yùn)行時(shí)各自收益分別是 30、18、22 萬(wàn)元兩兩聯(lián)盟的收益分別是 CHPHP 61 萬(wàn)元、CHPBESS 63 萬(wàn)元、HPBESS 58 萬(wàn)元三家全部合作收益是 101 萬(wàn)元??梢钥吹胶献魇找婷黠@大于個(gè)體簡(jiǎn)單加總這超額部分就是協(xié)同紅利。3. 利益分配不患寡而患不均3.1 Shapley值的核心思想和計(jì)算Shapley值是目前用得最多的分配規(guī)則之一。它的思想非常直觀某個(gè)主體應(yīng)得的分配等于它對(duì)所有可能聯(lián)盟順序的邊際貢獻(xiàn)的平均值。[ \phi_i(v) \sum_{S \subseteq N \setminus {i}} \frac{|S|!(n - |S| - 1)!}{n!} \left[ v(S \cup {i}) - v(S) \right] ]用生活類(lèi)比解釋一個(gè)團(tuán)隊(duì)里每個(gè)人的“功勞”應(yīng)該通過(guò)他在不同入場(chǎng)順序下給團(tuán)隊(duì)帶來(lái)的增量收益來(lái)評(píng)估。你加入之前團(tuán)隊(duì)收益 50 萬(wàn)加入之后變成 61 萬(wàn)那你單次的邊際貢獻(xiàn)就是 11 萬(wàn)在所有可能的加入順序下取平均就是你最終的分配值。繼續(xù)用上面的數(shù)字計(jì)算三個(gè)主體的Shapley值。先看CHP的邊際貢獻(xiàn)加入空集(v({CHP}) - v(\emptyset) 30)加入HP所在聯(lián)盟(v({CHP,HP}) - v({HP}) 61 - 18 43)加入BESS所在聯(lián)盟(v({CHP,BESS}) - v({BESS}) 63 - 22 41)加入HP和BESS已結(jié)成的聯(lián)盟(v({CHP,HP,BESS}) - v({HP,BESS}) 101 - 58 43)注意Shapley值需要對(duì)每一種可能的加入順序取平均。三個(gè)主體共有 6 種順序我這邊直接按公式權(quán)重計(jì)算[ \phi_{CHP} \frac{2!}{6} \cdot 30 \frac{1!1!}{6}(4341) \frac{2!}{6} \cdot 43 10 14 14.33 38.33 ]同理可得 HP 約 30.67BESS 約 32。三者加起來(lái)為 101正好等于大聯(lián)盟總收益。這個(gè)“總和等于大聯(lián)盟收益”的性質(zhì)非常重要在代碼里可以作為校驗(yàn)條件。3.2 其他分配方法和選型依據(jù)除了Shapley值還有幾種常見(jiàn)方法。核仁法Nucleolus最關(guān)注穩(wěn)定性它通過(guò)求解一系列線(xiàn)性規(guī)劃問(wèn)題最小化聯(lián)盟中“最不滿(mǎn)的人”的不滿(mǎn)程度。好處是分配結(jié)果一定處于核心Core里不會(huì)出現(xiàn)任何子聯(lián)盟想脫離團(tuán)隊(duì)單干的情況壞處是實(shí)現(xiàn)復(fù)雜度高而且可能把超額收益全部分配給少數(shù)關(guān)鍵主體導(dǎo)致某些主體分到的收益反而比Shapley值低。按比例分配是最容易實(shí)現(xiàn)的??梢园闯跏纪顿Y比例、最大出力比例或獨(dú)立運(yùn)行收益比例來(lái)分。優(yōu)點(diǎn)是簡(jiǎn)單透明缺點(diǎn)是沒(méi)有反映真實(shí)的邊際貢獻(xiàn)合作中出力大、協(xié)同價(jià)值高的主體容易感到不公平。我的建議是工程項(xiàng)目要落地優(yōu)先用Shapley值如果希望合作結(jié)構(gòu)特別穩(wěn)定、不能有“分裂傾向”可以考慮核仁法。在做對(duì)比分析時(shí)可以同時(shí)算兩種把差異作為一個(gè)靈敏度分析維度呈現(xiàn)給決策者。3.3 大聯(lián)盟收益是否一定大于子聯(lián)盟之和答案是不一定。我?guī)н^(guò)的算例里就出現(xiàn)過(guò)儲(chǔ)能與熱泵合作后熱泵選擇在自己電制熱最優(yōu)的時(shí)段大量用電導(dǎo)致儲(chǔ)能原本想做的低谷充電高峰放電空間被壓縮兩主體聯(lián)盟收益反而低于各自獨(dú)立收益之和。這種情況下合作博弈的正收益可能不成立。所以在代碼流程里我建議先做一個(gè)“合作收益非負(fù)性”檢查% 檢查特征函數(shù)的超可加性 superadditive true; for i 1:n for j i1:n if v([i,j]) v(i) v(j) superadditive false; end end end如果發(fā)現(xiàn)某些組合不滿(mǎn)足超可加性就需要檢查模型參數(shù)是否合理比如是否缺少了熱網(wǎng)、儲(chǔ)熱等互補(bǔ)設(shè)備或者中間產(chǎn)品計(jì)價(jià)方式是否存在扭曲。不是所有系統(tǒng)天生適合合作博弈這也是選型前要先算一次的原因。4. 調(diào)度與分配的聯(lián)動(dòng)Matlab代碼實(shí)現(xiàn)的核心流程4.1 整體代碼架構(gòu)我習(xí)慣把整個(gè)項(xiàng)目拆成三層設(shè)備參數(shù)層、調(diào)度求解層、分配計(jì)算層。設(shè)備參數(shù)層用 struct 存好所有設(shè)備參數(shù)調(diào)度求解層針對(duì)每一個(gè)聯(lián)盟分別建模型并調(diào)用求解器分配計(jì)算層負(fù)責(zé)枚舉聯(lián)盟、匯總收益、計(jì)算Shapley值。整體流程是這樣的定義N個(gè)主體的設(shè)備參數(shù)枚舉所有非空聯(lián)盟子集共 (2^N -1) 個(gè)對(duì)每個(gè)聯(lián)盟構(gòu)建優(yōu)化調(diào)度模型并求解得到聯(lián)盟總收益把所有聯(lián)盟收益填入特征函數(shù)表用Shapley公式或核仁法求解分配輸出分配結(jié)果并校驗(yàn)“總和大聯(lián)盟收益”。4.2 聯(lián)盟枚舉與特征函數(shù)計(jì)算聯(lián)盟枚舉我用循環(huán)生成二進(jìn)制掩碼實(shí)現(xiàn)N10以?xún)?nèi)都很輕松。N 3; v zeros(1, 2^N-1); % 存儲(chǔ)所有非空聯(lián)盟收益 for k 1:(2^N-1) mask bitget(k, 1:N); % 二進(jìn)制掩碼標(biāo)記哪些主體參與 member find(mask 1); v(k) solve_alliance(member, params); endsolve_alliance會(huì)讀取當(dāng)前聯(lián)盟包含的設(shè)備集合動(dòng)態(tài)拼裝約束矩陣并調(diào)用求解器。這里有個(gè)容易疏忽的地方聯(lián)盟的收益必須扣掉聯(lián)盟內(nèi)部交易的結(jié)算成本嗎不需要。特征函數(shù)定義的是聯(lián)盟作為一個(gè)整體對(duì)外的凈收益內(nèi)部資金流轉(zhuǎn)是分配階段的事情在計(jì)算特征函數(shù)時(shí)不要做內(nèi)部結(jié)算否則會(huì)重復(fù)計(jì)算。4.3 調(diào)度模型的Matlab實(shí)現(xiàn)我一般用Yalmip建模調(diào)用gurobi或cplex求解因?yàn)檫@類(lèi)調(diào)度問(wèn)題大多帶0-1變量設(shè)備啟停純linprog不夠用。一個(gè)典型的聯(lián)盟調(diào)度代碼如下function val solve_alliance(members, params) T params.T; yalmip(clear); % 決策變量定義 P_chp sdpvar(1, T); P_hp sdpvar(1, T); P_bess_in sdpvar(1, T); P_bess_out sdpvar(1, T); P_grid sdpvar(1, T); P_sell sdpvar(1, T); SOC sdpvar(1, T1); % 目標(biāo)函數(shù) Cost sum(params.c_buy .* P_grid) params.gas_price * sum(P_chp / params.chp.eta_p) ... - sum(params.c_sell .* P_sell); Constraints []; % 電平衡聯(lián)盟內(nèi)部更復(fù)雜省略 Constraints [Constraints, P_grid P_chp P_bess_out params.e_load P_hp P_bess_in P_sell]; % 熱平衡 Constraints [Constraints, params.chp.eta_h * P_chp params.hp.cop * P_hp params.h_load]; % 儲(chǔ)能SOC Constraints [Constraints, SOC(2:end) SOC(1:end-1) ... P_bess_in * params.bess.eta - P_bess_out / params.bess.eta]; optimize(Constraints, Cost, sdpsettings(solver, gurobi)); val -value(Cost); end這里我故意把電平衡寫(xiě)簡(jiǎn)化了實(shí)際工程里還要考慮CHP和熱泵是否屬于當(dāng)前聯(lián)盟。如果某個(gè)主體沒(méi)參與對(duì)應(yīng)設(shè)備的決策變量要置零或不存在而不是讓它免費(fèi)服務(wù)于聯(lián)盟。這也是初學(xué)者最容易出錯(cuò)的地方。4.4 Shapley值的代碼實(shí)現(xiàn)我提供兩種實(shí)現(xiàn)。第一種是精確版N較小或聯(lián)盟數(shù)可枚舉時(shí)使用function phi shapley_exact(v, N) phi zeros(1, N); n N; for i 1:N sum_value 0; for S_all 0:(2^n - 1) mask_i bitget(S_all, i); if mask_i 1 continue; end member_ids find(bitget(S_all, 1:n) 1); S_size length(member_ids); S_index S_all 1; % 注意空集對(duì)應(yīng) index?需要修正 if S_size 0 vS 0; else vS get_v(S_all 1); % 特征函數(shù)查表 end S_with_i bitor(S_all, bitshift(1, i-1)); vS_i get_v(S_with_i 1); weight factorial(S_size) * factorial(n - S_size - 1) / factorial(n); sum_value sum_value weight * (vS_i - vS); end phi(i) sum_value; end end第二種是蒙特卡洛近似版N較大沒(méi)辦法枚舉所有聯(lián)盟時(shí)用。核心思想是隨機(jī)生成大量加入順序按順序逐個(gè)計(jì)算邊際貢獻(xiàn)后取平均。實(shí)測(cè)下來(lái)聯(lián)盟數(shù)在百萬(wàn)級(jí)時(shí)抽樣 5000 次就能得到相當(dāng)穩(wěn)定的結(jié)果。function phi shapley_mc(v_func, N, n_samples) phi zeros(1, N); for r 1:n_samples order randperm(N); v_prev 0; for k 1:N member order(1:k); v_cur v_func(member); % 特征函數(shù)查詢(xún) phi(order(k)) phi(order(k)) (v_cur - v_prev); v_prev v_cur; end end phi phi / n_samples; end注意蒙特卡洛版必須保證每次抽樣用的加入順序是均勻隨機(jī)的否則邊際貢獻(xiàn)估計(jì)會(huì)有偏。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 明明合作了收益卻變低了我之前調(diào)試一個(gè)包含儲(chǔ)熱系統(tǒng)的案例分析時(shí)就遇到過(guò)三主體聯(lián)盟總收益低于兩兩聯(lián)盟的情況。排查后發(fā)現(xiàn)是兩個(gè)設(shè)備之間存在強(qiáng)耦合CHP需要在夜間低負(fù)荷運(yùn)行來(lái)配合儲(chǔ)能充電導(dǎo)致它的熱出力嚴(yán)重偏離熱負(fù)荷被迫消耗更多天然氣。解決方案是在調(diào)度模型里加入“熱負(fù)荷靈活區(qū)間”約束并讓熱儲(chǔ)能承擔(dān)解耦任務(wù)。做了之后大聯(lián)盟收益明顯回升。所以我建議如果發(fā)現(xiàn)特征函數(shù)不滿(mǎn)足超可加性先看模型里是否缺少靈活性設(shè)備而不是直接懷疑合作博弈方法。5.2 枚舉聯(lián)盟組合爆炸怎么辦主體數(shù)量到10個(gè)以后枚舉 (2^{10}-11023) 個(gè)聯(lián)盟還勉強(qiáng)能接受到15個(gè)主體時(shí)32767個(gè)聯(lián)盟就需要一些計(jì)算時(shí)間了到20個(gè)主體時(shí)百萬(wàn)級(jí)聯(lián)盟基本不可能逐一精確求解。工程上我用了兩招第一招業(yè)務(wù)剪枝。很多聯(lián)盟在物理上就不成立比如某聯(lián)盟里只有負(fù)荷沒(méi)有電源這種聯(lián)盟特征函數(shù)收益很低且不參與Shapley值的主要貢獻(xiàn)可以直接跳過(guò)不精確求解用一個(gè)固定懲罰估計(jì)值。第二招蒙特卡洛Shapley采樣。先大量抽樣聯(lián)盟順序統(tǒng)計(jì)哪些主體間邊際貢獻(xiàn)近似相同把高度對(duì)稱(chēng)的主體合并成等價(jià)類(lèi)再用等價(jià)類(lèi)減少求解次數(shù)。實(shí)測(cè)在16個(gè)主體場(chǎng)景下求解次數(shù)從65535次降到約4000次誤差控制在2%以?xún)?nèi)。5.3 Shapley值出現(xiàn)負(fù)分配怎么辦嚴(yán)格來(lái)說(shuō)負(fù)分配的邊界值并不違反Shapley性質(zhì)的邏輯但在實(shí)際項(xiàng)目里沒(méi)法向決策者交代。我在某印刷廠能源托管項(xiàng)目中就遇到類(lèi)似情況某主體獨(dú)立運(yùn)轉(zhuǎn)時(shí)能耗極低一旦合作接入共享母線(xiàn)它的用電曲線(xiàn)被優(yōu)化到“高電價(jià)時(shí)段少用電”導(dǎo)致它在內(nèi)部結(jié)算中被分到了負(fù)收益。處理方式是在調(diào)度階段加入“個(gè)體理性約束”[ \phi_i \ge v({i}) ]即在分配層面強(qiáng)行保證每個(gè)主體分到的不少于獨(dú)立運(yùn)行收益。Shapley值本身不一定滿(mǎn)足這個(gè)性質(zhì)此時(shí)需要做修正分配比如做最小二乘調(diào)整或在分配約束下重新求解一個(gè)線(xiàn)性規(guī)劃目標(biāo)。從工程角度我更推薦后者因?yàn)闆Q策者要的不是數(shù)學(xué)最優(yōu)而是“比單干強(qiáng)”的心理底線(xiàn)。5.4 求解器選型與性能調(diào)優(yōu)綜合能源系統(tǒng)調(diào)度往往帶整數(shù)變量我優(yōu)先推薦Yalmipgurobi組合。沒(méi)有g(shù)urobi授權(quán)也可以用cplex或scip但性能上稍有差距。如果只有Matlab自帶工具純LP問(wèn)題用linprog含整數(shù)變量用intlinprog注意把變量范圍收窄能顯著加快求解速度。聯(lián)盟求解的耗時(shí)大頭往往在重新建約束矩陣。每次調(diào)用solve_alliance都要重新構(gòu)造約束這是很浪費(fèi)的。優(yōu)化思路是預(yù)先構(gòu)造一個(gè)“超集”模型包含所有主體和設(shè)備然后用0-1變量控制每個(gè)設(shè)備是否參與當(dāng)前聯(lián)盟。這樣只需要求解一次就得到所有聯(lián)盟的結(jié)果其實(shí)不是因?yàn)槊孔儎?dòng)一個(gè)設(shè)備集合最優(yōu)解都會(huì)變?nèi)孕枰匦聝?yōu)化但至少約束矩陣的結(jié)構(gòu)可以復(fù)用省掉重復(fù)建模的時(shí)間。5.5 數(shù)值問(wèn)題與敏感性分析特征函數(shù)收益如果量級(jí)相差太大比如一個(gè)幾百塊一個(gè)幾十萬(wàn)在Shapley值公式里會(huì)出現(xiàn)大數(shù)吃小數(shù)的問(wèn)題。我建議在分配前對(duì)特征函數(shù)做歸一化處理或至少做中心化先減去每個(gè)主體的獨(dú)立運(yùn)行收益 (v({i}))把超額收益單獨(dú)拿出來(lái)分配再回加獨(dú)立收益。這樣數(shù)字更穩(wěn)定解釋也更清楚。敏感性分析一定要做。項(xiàng)目匯報(bào)時(shí)決策者一定會(huì)問(wèn)如果天然氣價(jià)格漲10%分配結(jié)果怎么變?nèi)绻麅?chǔ)能容量降一半誰(shuí)受影響最大這類(lèi)分析其實(shí)不難把參數(shù)循環(huán)批量跑就行關(guān)鍵是最后要整理成一張“價(jià)格-分配”對(duì)照表比出一段文字更有說(shuō)服力。6. 最后分享一點(diǎn)實(shí)操體會(huì)這個(gè)項(xiàng)目真正讓我覺(jué)得值得分享的地方不在于Shapley值的數(shù)學(xué)有多深而是“把調(diào)度和分配串成一條線(xiàn)”的工程實(shí)現(xiàn)。我最早踩過(guò)的坑就是只做了調(diào)度優(yōu)化拿著總成本下降了10%的結(jié)論去匯報(bào)結(jié)果被追問(wèn)“這10%到底是誰(shuí)創(chuàng)造的、誰(shuí)來(lái)兌現(xiàn)”一時(shí)間答不上來(lái)。后來(lái)把合作博弈的分配層補(bǔ)上才發(fā)現(xiàn)一套完整的項(xiàng)目報(bào)告必須同時(shí)回答三個(gè)問(wèn)題合作能多賺多少、誰(shuí)貢獻(xiàn)大、分配方案大家認(rèn)不認(rèn)。MATLAB代碼實(shí)現(xiàn)本身不難難點(diǎn)在于把特征函數(shù)算準(zhǔn)、把分配結(jié)果解讀透。如果你也想在自己的項(xiàng)目中復(fù)現(xiàn)這套方法我建議從小規(guī)模三主體案例入手先按文中的流程跑通調(diào)度Shapley分配再逐步擴(kuò)展到更復(fù)雜的多能互補(bǔ)場(chǎng)景。等你習(xí)慣了特征函數(shù)那套思維再回頭看集中式調(diào)度就會(huì)覺(jué)得少了一層?xùn)|西——那層?xùn)|西就是「利益」。