双渠道闭环供应链的Stackelberg博弈定价与Python实现
发布时间:2026/10/2 4:57:20来源:尧图网络
简介在数字经济背景下供应链管理面临线上线下渠道深度融合带来的复杂决策挑战。博弈论作为研究多方利益冲突与协调的数学工具为定价与利润分配提供了严谨框架。Stackelberg博弈刻画制造商与零售商的主从决策顺序Nash均衡则解决合作剩余分配问题二者共同构成双渠道闭环供应链的定价核心。借助Python与符号计算可快速实现逆向归纳求解与数值验证量化集中与分散决策的利润差异。该方法适用于电商大促后的跨渠道退货处理、回收再制造及渠道协调等真实业务场景帮助企业在双重边际效应下找到最优定价与稳定合作机制。这一建模思路已在跨渠道退货下的双渠道闭环供应链问题中形成完整的工程实践路径。1. 跨渠道退货不是小问题为什么双渠道闭环供应链需要博弈论定价每年大促结束后的三周是供应链计划团队最不愿意面对的时间段线上订单销量很好看但退货也跟着来而且大量“线上下单、线下门店退货”的跨渠道退货会把渠道成本、残值归属、回收排产全搅在一起。这种场景做不好决策优化轻则渠道间互相甩账重则制造商的再制造计划被不稳定的退货流打断。解决这类问题的主流建模工具就是标题里这对组合Stackelberg博弈负责回答“制造商和零售商谁先定价、谁跟价”Nash均衡负责回答“集中决策多出来的利润怎么分才不散伙”。这篇笔记会用一套线性需求模型加上可复跑的Python代码把双渠道闭环供应链从建模、求解到利润分配完整走一遍适合正在做供应链决策优化或准备用博弈论建模的从业者参考按章节顺序读从模型假设开始最后落在参数敏感性和扩展方向上。2. 先立模型再谈求解跨渠道退货下双渠道闭环供应链的利润结构与决策变量双渠道闭环供应链一旦加入跨渠道退货问题规模会立刻膨胀制造商要同时管直销价、批发价、回收再制造零售商要管零售价还要替线上渠道承接退货。建模最怕的是把所有成本混在一锅里。我的习惯是先画一张“谁付钱给谁”的流程表再写利润函数。2.1 需求怎么拆价格交叉影响、退货敏感性与渠道差异需求函数是整个模型的骨架。双渠道里线上直销渠道和线下零售渠道不是割裂的消费者会在两个渠道之间比价、迁移。用线性需求函数来表达这种替代关系是供应链文献里最常见、也最容易求解析解的形式$$D_d \alpha_d - \beta_d p_d \gamma (p_r - p_d) - \eta_d \rho_d$$$$D_r \alpha_r - \beta_r p_r \gamma (p_d - p_r) - \eta_r \rho_r$$其中下标 $d$ 是直销渠道$r$ 是零售渠道。$\alpha$ 是渠道基础市场规模$\beta$ 是自身价格敏感系数$\gamma$ 是渠道间交叉价格影响系数$\rho$ 是各渠道退货率$\eta$ 衡量退货率对需求的杀伤力也就是消费者预期“这家线上店退货麻烦”之后减少的需求量。这里最容易被忽略的是交叉项 $\gamma(p_r - p_d)$。它描述的是当线下零售价比线上直销价高一个单位会有 $\gamma$ 比例的销量从零售渠道流向直销渠道。直观理解就是消费者在线下门店看了实物转头在线上下了单。反过来如果线上价格高了流量会回流到线下。$\gamma$ 越大渠道替代性越强两个渠道的定价互相牵制就越明显。这个函数还要满足一个基本约束各渠道自身价格敏感系数加上交叉系数后必须大于交叉系数也就是 $\beta_d \gamma \gamma$ 且 $\beta_r \gamma \gamma$。这个条件保证了需求随着自身价格上升而下降否则整个模型会在收益递增的不稳定区间里打转后面的博弈求解全部作废。2.2 退货与闭环资金流谁收残值、谁付处理费、谁拿补偿跨渠道退货的核心问题不是“货怎么退”而是“钱怎么算”。消费者在线上下单、线下退货时线下门店做了收件、质检、扫码入库的工作这笔人工和场地成本不能由零售商白扛否则零售商没有动力配合。反过来说退回的货最终回到制造商手里翻新或再制造残值收益也不能全归零售商。我沿用一个直接的成本归属结构。线上渠道自有退货中比例 $t$ 的部分被消费者退回线下门店剩下 $1-t$ 退回线上仓。线下退货处理成本 $k_r$ 由零售商承担制造商对每件跨渠道退货给零售商补偿 $h$。线上仓的退货拆包、质检成本 $k_d$ 由制造商承担。所有退货最终归制造商处置每件产生残值 $v$。闭环回收单独算一条线制造商从市场回收旧品回收率 $\tau$单位回收成本 $q$回收品全部进入再制造单位再制造比新材料节约 $s c_m - c_r$。回收率与回收价的关系这里先外生给定也就是直接固定 $\tau$ 和 $q$到第6章再讨论把它内生化的事。整个资金流的归属可以浓缩成一张表建利润函数时对照着写基本不会漏项项目承担方说明$k_r$零售商线下处理跨渠道退货的初检、入库成本$h$制造商 → 零售商每件跨渠道退货的处理补偿$k_d$制造商线上仓退货的拆包与质检成本$v$制造商每件退货翻新再销售的残值收入$q$制造商每单位回收品的回收成本$s c_m - c_r$制造商每件再制造品相对新品的成本节约2.3 决策变量与博弈顺序为什么把Stackelberg摆在Nash前面供应链里的定价天然不是同时发生的。制造商作为上游拥有生产能力和再制造技术通常先公布批发价 $w$ 和直销价 $p_d$零售商看到这两个价格后再决定自己的零售价 $p_r$。这是一种典型的主从递阶决策用Stackelberg博弈来描述是顺理成章的制造商是领导者零售商是跟随者。求解方法就是逆向归纳先解零售商对给定 $(w, p_d)$ 的最优反应再把这个反应函数代入制造商的利润求领导者的最优定价。Nash均衡在这个模型里的角色不是替代Stackelberg而是处理第二层问题当制造商和零售商通过集中决策把供应链总利润做大之后这笔多出来的利润怎么分。供应链成员都是独立利益主体分不匀就会回到分散决策的老路上。这里用Nash讨价还价博弈来求解分配比例以分散决策下的利润作为谈判破裂点以集中决策总利润作为分配总额双方按谈判力 $\theta$ 分享合作剩余。2.4 参数初始化代码直接可跑的默认算例我常用的参数基准如下全部数值化方便后面每一步复算。需要说明的是这些参数的量纲保持一致价格为元需求量为千件利润为千元。线上渠道基础规模比线下大线上退货率也比线下高这符合常见的3C、服饰品类特征。import numpy as np # 基础市场参数 alpha_d 100.0 # 直销渠道基础市场规模 alpha_r 80.0 # 零售渠道基础市场规模 beta_d 2.0 # 直销渠道自价格敏感系数 beta_r 1.8 # 零售渠道自价格敏感系数 gamma 0.5 # 渠道间交叉价格影响系数 # 退货参数 rho_d 0.12 # 线上渠道退货率 rho_r 0.06 # 线下渠道退货率 eta_d 30.0 # 线上退货率对线上需求的敏感系数 eta_r 20.0 # 线下退货率对线下需求的敏感系数 t 0.5 # 线上退货中退回线下的比例 # 退货处理成本与残值 k_r 2.0 # 零售商处理一件跨渠道退货的成本 h 3.0 # 制造商给零售商的处理补偿 k_d 4.0 # 制造商线上仓处理成本 v 5.0 # 每件退货的残值收入 # 生产与再制造参数 c_m 20.0 # 新材料单位生产成本 c_r 12.0 # 再制造单位生产成本 s c_m - c_r # 再制造节约8.0 q 2.0 # 单位回收成本 tau 0.3 # 回收率 # 由退货率修正后的需求基线 a_d alpha_d - eta_d * rho_d # 96.4 a_r alpha_r - eta_r * rho_r # 78.8 # 包含交叉价格影响后的自价格系数 bd beta_d gamma # 2.5 br beta_r gamma # 2.3这段初始化代码把两个渠道的有效需求基线和自价格系数重新算了一遍后面所有公式都基于a_d, a_r, bd, br这组简化符号。参数初始化时最容易犯的错是直接拿原始 $\alpha$ 和 $\beta$ 代入包含交叉项的利润函数导致一阶条件求出来的价格偏离实际最优值用修正后的基线推导过程能少一半的代数错误。3. 逆向归纳解主从博弈零售商反应函数与制造商全局优化Stackelberg博弈能不能算下去取决于跟随者的最优反应函数是否干净。这个模型里零售商的决策变量只有一个 $p_r$利润函数关于 $p_r$ 是二次函数因此最优反应可以写成闭式解。先把这一步推扎实后面的数值优化才有意义。3.1 跟随者先动嘴零售商对批发价的最优定价反应把零售商的利润写完整。零售商的收入来自零售渠道毛利 $p_r - w$ 和制造商给的跨渠道退货补偿成本包括零售渠道自身退货处理成本 $k_r \rho_r$ 以及处理跨渠道退货付出的 $k_r$。整理后$$\Pi_R (p_r - w - k_r \rho_r) D_r (h - k_r) t \rho_d D_d$$注意这里的第二项不是常数因为 $D_d$ 里含有 $p_r$线上价格相对线下价格变贵时线上需求会减少相应的跨渠道退货量也会变化。零售商可以通过调整 $p_r$ 微妙地影响线上销量从而影响自己拿到的退货补偿总额。这是跨渠道退货放进双渠道模型后最重要的联动效应。对 $p_r$ 求一阶偏导并令其为零$$\frac{\partial \Pi_R}{\partial p_r} (a_r \gamma p_d - 2 b_r p_r) b_r (w k_r \rho_r) \gamma (h - k_r) t \rho_d 0$$解出零售商的最优反应函数$$p_r^*(w, p_d) \frac{a_r \gamma p_d b_r(w k_r \rho_r) \gamma(h - k_r)t \rho_d}{2 b_r}$$这个反应函数的经济学含义很直接零售商的定价随着批发价上涨而上涨随着直销价上涨而上涨因为直销价高了零售渠道的竞争压力变小零售商可以放心加价。跨渠道退货补偿 $h$ 出现在分子里也不奇怪补偿越高零售商越愿意配合线上渠道的退货服务这部分收入会鼓励它维持一个相对较高的零售价。3.2 领导者再动手Stackelberg均衡的一阶条件与数值验证制造商利润里零售渠道的单位净收益是批发价减去一系列调整项包括残值收益和再制造节约直销渠道的单位净收益则是直销价减去线上退货处理成本、跨渠道补偿以及残值和再制造节约。写成$$\Pi_M (w - MC_w) D_r (p_d - MC_{pd}) D_d$$其中$$MC_w c_m - v \rho_r - (s - q)\tau$$$$MC_{pd} c_m k_d(1-t)\rho_d h t \rho_d - v \rho_d - (s - q)\tau$$$MC_w$ 和 $MC_{pd}$ 不是真正的边际成本而是考虑退货残值与再制造节约后的“有效成本”。做这一步整理的目的是把制造商利润化成和普通双渠道模型同构的形式唯一区别是有效成本在两个渠道上不同。这个差异本身就能说明问题线下渠道退货率低残值收益相对高所以 $MC_w$ 通常小于 $MC_{pd}$制造商会更愿意让利给零售渠道。把 $p_r^*(w, p_d)$ 代入 $\Pi_M$ 后利润函数是关于 $w$ 和 $p_d$ 的二次型一阶条件可以手推但代数式很长。我用SymPy做符号验算避免自己抄错正负号import sympy as sp # 定义符号 w, p_d, p_r sp.symbols(w p_d p_r, positiveTrue) a_r_sym sp.symbols(a_r, positiveTrue) a_d_sym sp.symbols(a_d, positiveTrue) br_sym, bd_sym, gamma_sym sp.symbols(br bd gamma, positiveTrue) k_r_sym, rho_r_sym sp.symbols(k_r rho_r, positiveTrue) h_sym, t_sym, rho_d_sym sp.symbols(h t rho_d, positiveTrue) MC_w_sym, MC_pd_sym sp.symbols(MC_w MC_pd, positiveTrue) D_d a_d_sym - bd_sym * p_d gamma_sym * p_r D_r a_r_sym - br_sym * p_r gamma_sym * p_d Pi_R (p_r - w - k_r_sym * rho_r_sym) * D_r (h_sym - k_r_sym) * t_sym * rho_d_sym * D_d foc_pr sp.diff(Pi_R, p_r) # 解零售商反应函数 p_r_star_sym sp.solve(sp.Eq(foc_pr, 0), p_r)[0] print(零售商最优反应函数, sp.simplify(p_r_star_sym)) # 代入制造商利润再对 w 和 p_d 求驻点 Pi_M (w - MC_w_sym) * D_r.subs(p_r, p_r_star_sym) (p_d - MC_pd_sym) * D_d.subs(p_r, p_r_star_sym) foc_w sp.simplify(sp.diff(Pi_M, w)) foc_pd sp.simplify(sp.diff(Pi_M, p_d)) print(制造商关于w的一阶条件, foc_w)这段代码前两行验证零售商的反应函数后两行导出制造商的一阶条件表达式。实际运行后foc_w和foc_pd是两个关于 $w, p_d$ 的线性方程联立就能解出Stackelberg均衡的闭式解。SymPy在表达式很长时看起来像一团乱麻但它最大的价值是让正负号错误无处可藏。手推时我有一个血泪经验$MC_{pd}$ 里退货补偿 $h$ 前面的符号特别容易抄错它是从 $p_d$ 里减掉的不是加上的因为每卖出一件线上产品制造商都要预留一笔跨渠道退货补偿的支出。3.3 集中决策基准为什么“分散决策”会让供应链总利润缩水Stackelberg均衡解出来后另一个必要的对照基准是集中决策制造商和零售商合并成一个决策主体直接对所有渠道定价此时批发价 $w$ 作为内部转移价格会在总利润中抵消不进入目标函数。集中决策的目标是最大化 $\Pi_T \Pi_M \Pi_R$决策变量是 $p_d, p_r$。集中决策的价值在于它给出了供应链利润的理论上界。分散决策下零售商不会把制造商的利润纳入自己的定价考虑只会盯着自己的边际收益于是零售价定得比集中决策高销量被压缩出现双重边际效应。这个差距就是后续Nash讨价还价要分配的合作剩余。可以说没有集中决策这个基准利润分配分析就没有靶子。4. 跑通全流程代码Stackelberg定价、Nash利润分配与结果对比建模和推导都立住后就到了最能直接抄作业的部分完整Python实现。我把代码拆成四个步骤每一步都有独立函数方便替换参数和排查问题。4.1 主程序结构从参数到利润分配的四步流程下面的代码将上一章的所有公式落地。核心逻辑是先定义需求函数和利润函数再求解Stackelberg均衡再求解集中决策基准最后用Nash讨价还价规则分配利润。import numpy as np from scipy.optimize import minimize # ---------- 参数初始化沿用2.4节直接复制 ---------- alpha_d, alpha_r 100.0, 80.0 beta_d, beta_r 2.0, 1.8 gamma 0.5 rho_d, rho_r 0.12, 0.06 eta_d, eta_r 30.0, 20.0 t 0.5 k_r, h, k_d, v 2.0, 3.0, 4.0, 5.0 c_m, c_r, q, tau 20.0, 12.0, 2.0, 0.3 s c_m - c_r # 有效需求基线与自价格系数 a_d alpha_d - eta_d * rho_d a_r alpha_r - eta_r * rho_r bd beta_d gamma br beta_r gamma # 制造商各渠道有效成本 MC_w c_m - v * rho_r - (s - q) * tau MC_pd c_m k_d * (1 - t) * rho_d h * t * rho_d - v * rho_d - (s - q) * tau # 零售商维度常量 B_r (h - k_r) * t * rho_d # ---------- 基础函数 ---------- def demand(p_d, p_r): D_d a_d - bd * p_d gamma * p_r D_r a_r - br * p_r gamma * p_d return D_d, D_r def p_r_star(w, p_d): numerator a_r gamma * p_d br * (w k_r * rho_r) gamma * B_r return numerator / (2 * br) def profits(w, p_d, p_r): D_d, D_r demand(p_d, p_r) Pi_M (w - MC_w) * D_r (p_d - MC_pd) * D_d Pi_R (p_r - w - k_r * rho_r) * D_r B_r * D_d return Pi_M, Pi_R, Pi_M Pi_R # ---------- 步骤1求 Stackelberg 均衡 ---------- def stackelberg_objective(x): w, p_d x p_r p_r_star(w, p_d) Pi_M, _, _ profits(w, p_d, p_r) return -Pi_M # scipy 最小化取负 res_s minimize(stackelberg_objective, x0[25.0, 25.0], methodL-BFGS-B, bounds[(0, 100), (0, 100)]) w_star, pd_star res_s.x pr_star p_r_star(w_star, pd_star) Pi_M_s, Pi_R_s, Pi_T_s profits(w_star, pd_star, pr_star) # ---------- 步骤2求集中决策基准 ---------- def centralized_objective(x): p_d, p_r x _, _, Pi_T profits(0.0, p_d, p_r) # w 在总利润中抵消传0即可 return -Pi_T res_c minimize(centralized_objective, x0[30.0, 30.0], methodL-BFGS-B, bounds[(0, 100), (0, 100)]) pd_c, pr_c res_c.x _, _, Pi_T_c profits(0.0, pd_c, pr_c) # ---------- 步骤3Nash 讨价还价利润分配 ---------- theta_nash 0.5 # 制造商谈判力 S Pi_T_c - Pi_T_s # 合作剩余 phi_M Pi_M_s theta_nash * S phi_R Pi_R_s (1 - theta_nash) * S # ---------- 结果输出 ---------- print( Stackelberg 均衡 ) print(f批发价 w* {w_star:.2f}, 直销价 p_d* {pd_star:.2f}, 零售价 p_r* {pr_star:.2f}) print(f制造商利润 {Pi_M_s:.2f}, 零售商利润 {Pi_R_s:.2f}, 总利润 {Pi_T_s:.2f}) print(\n 集中决策 ) print(f直销价 {pd_c:.2f}, 零售价 {pr_c:.2f}, 总利润 {Pi_T_c:.2f}) print(\n Nash 分配 ) print(f制造商分配 {phi_M:.2f}, 零售商分配 {phi_R:.2f}, 总和 {phi_M phi_R:.2f}) # ---------- 断言语义检查 ---------- assert Pi_T_c Pi_T_s, 集中决策总利润应不低于分散决策 assert abs((phi_M phi_R) - Pi_T_c) 1e-6, Nash分配后利润总额应等于集中决策总利润 assert demand(pd_star, pr_star)[0] 0 and demand(pd_star, pr_star)[1] 0, 均衡处需求必须为正 print(\n全部断言通过模型结果满足利润非负、总利润守恒、需求为正三项基本约束。)这段代码里最关键的行为是profits函数同时返回制造商利润、零售商利润和总利润。第3步Nash分配处S是合作剩余分配规则是“以分散决策利润为底线剩余按谈判力比例切分”。theta_nash0.5表示双方谈判力对等如果制造商占据渠道强势地位可以加到0.7甚至0.8。Nash讨价还价给这个值提供了理论依据它在满足个体理性、帕累托最优、无关方案独立性等公理下是唯一的分配解。断言部分不是摆设。集中决策总利润小于分散决策时模型的参数必然有问题这里直接报错能在参数扫描时第一时间发现异常。4.2 三种决策模型对比集中、Stackelberg、Nash分配代码跑完能看到一个稳定出现的结构规律。集中决策的零售价低于Stackelberg分散决策的零售价总销量更高总利润更高。制造商在Stackelberg均衡里通过批发价赚走大部分利润零售商只能拿到零售环节的边际收益。Nash分配后双方利润都高于分散决策水平这是合作能够维持的基本前提。具体数字会随着参数变化而浮动我建议你跑完代码后不要只盯着绝对数值而是看三个比例关系零售价在集中与分散之间的差距、总利润的差距、以及Nash分配相对分散决策的提升幅度。这三个比例才是模型对业务有解释力的地方。比如零售价涨幅过高说明双重边际效应严重这时设计收益共享契约比单纯调批发价更有效。4.3 看什么指标来判定模型质量模型跑通不等于模型可信。我每次跑完这套代码都会依次检查三件事。第一需求在均衡点是否为正如果某个渠道需求为负说明参数设定超出了线性需求模型的有效域价格已经高到把客户全部赶走这种均衡没有业务意义。第二集中决策总利润必须大于分散决策否则整个供应链协调的故事不成立。第三Nash分配后双方利润都高于各自分散决策利润否则利益受损的一方没有任何动力参与合作。如果第三项检查失败问题通常出在参数上跨渠道退货补偿 $h$ 和零售商处理成本 $k_r$ 的关系不合理导致一方在合作中的贡献被高估或低估。把这三个断言写进代码里每次调参后第一个看到的就是它们。5. 常见问题与排查跑这个模型最容易翻车的5个地方这套模型我在不同参数组合下跑过很多轮翻车的点高度集中。下面这五条每一条都是实际遇到过的按“现象、原因、解决”的格式写方便直接对照排查。5.1 现象均衡处某个渠道需求为负这是最常见的翻车现场。把参数填进去demand()返回的 $D_r$ 或 $D_d$ 是负数利润虽然算得出来但完全不合理。原因$\alpha$ 基础市场规模太小或者 $\eta\rho$ 太大。线上退货率从0.05调高到0.3时$\eta_d \rho_d$ 可能吃掉三成以上的基础需求此时若价格还偏高需求直接归零。另外交叉价格系数 $\gamma$ 过大也会出问题一个渠道价格大幅波动会把另一个渠道需求“吸干”。解决先检查退货敏感系数 $\eta$ 的量纲。$\eta30$ 意味着退货率每增加1个百分点需求减少0.3个单位这在我的量纲下是合理的但如果你的市场规模是百万级而 $\eta$ 是几十需求为负就是必然。建模前把量纲一致性写好所有敏感系数乘以对应退货率后量级应远小于基础市场规模。5.2 现象零售商利润关于 $p_r$ 的二阶导数为正最优定价变成最低定价现象是优化器给出的零售价贴在下边界0上零售商利润反而随着价格升高而减少完全违背直觉。原因$\frac{\partial^2 \Pi_R}{\partial p_r^2} -2(\beta_r \gamma)$只要 $\beta_r \gamma 0$二阶导恒为负理论上不可能出现最小值。会出现这种状况几乎都是代码里把 $D_r$ 的符号写反了比如把 $a_r - b_r p_r \gamma p_d$ 写成了 $a_r b_r p_r - \gamma p_d$。这种错误在代数展开后非常隐蔽因为利润函数里各项正负互相抵消后形状看起来还算光滑。解决不用看二阶导的代数式直接做一次数值检验。在固定 $w, p_d$ 后把 $p_r$ 从0扫到50画出 $\Pi_R$ 曲线。曲线若开口向下一阶条件可靠开口向上说明需求函数里某个符号错了。画图这一步比任何代数检查都省时间。5.3 现象scipy优化器收敛到变量边界minimize返回的 $w$ 或 $p_d$ 贴着边界值比如 $w0$ 或 $p_d100$一看就不是内部均衡。原因线性需求模型下利润函数是二次的如果参数让最优点落在可行域外或者初始点选在了一个“平台区”梯度接近零而二阶信息不足L-BFGS-B容易提前停住。初始点 $x_0[25, 25]$ 对大多数参数有效但退货率或回收率极端时会失效。解决不要只跑一个初始点。写一个循环把 $w_0$ 和 $p_{d0}$ 分别从10、20、30、40扫描一遍每次从不同起点优化比较最终目标函数值。三个不同起点收敛到同一个利润值才说明找到的是全局最优而非局部平台。另外把bounds的上界从100放宽到1000如果最优解在100附近放宽后解会明显变化说明之前是边界伪解。5.4 现象集中决策总利润小于分散决策总利润这是个会让整个分析失效的异常。Nash分配的前提是合作剩余 $S 0$一旦集中利润比分散利润还低后面所有分配都失去意义。原因最常见的是代码中没有把内部转移价格 $w$ 消干净。集中决策的目标函数如果还带着 $wD_r$ 项而 $w$ 被固定成某个数那么目标函数就不是真正的一体化决策。我在第4章代码里把profits(0.0, p_d, p_r)的 $w$ 传0就是为了让 $w D_r$ 和 $-w D_r$ 相互抵消只剩真实生产与退货成本。解决检查集中决策目标函数是否包含 $w$。如果包含说明利润没有被正确合并。另一个不太常见的原因是退货处理成本在渠道间重复计算同一个 $k_r$ 既作为零售商的成本又被当作制造商补偿的依据造成总利润虚高。5.5 现象跨渠道退货补偿 $h$ 小于零售商处理成本 $k_r$现象是零售商利润里第二项 $(h-k_r)t\rho_d D_d$ 为负零售商处理跨渠道退货等于亏钱均衡时它会想尽办法减少线上客流的退货——实际业务里就是门店拒收、刁难退货消费者。原因参数设定时只考虑了线上仓成本没有检查跨渠道补偿与线下处理成本的关系。这不是代码问题是合同设计问题。解决参数初始化时加一条硬约束assert h k_r。然后做敏感性分析在 $h$ 从 $k_r$ 到 $2k_r$ 之间扫描观察零售价和零售商利润的变化。你会看到 $h$ 调高后零售商愿意接受的退货量增加但它也会把这个补偿收益的一部分通过降低零售价反哺给消费者最终利益有一部分转移给了消费者。6. 从复现到扩展敏感性分析、均衡唯一性验证与下一步方向代码跑通只是起点真正的决策优化价值在参数敏感性分析和均衡稳健性验证上。这里给出两个最实用的扩展方向以及一个更进一步的研究建议。第一是单参数扫描。把线上退货率 $\rho_d$ 从0.05按0.01步长扫到0.25每步重新求解Stackelberg均衡记录 $w^, p_d^, p_r^*$ 和双方利润画出趋势线。通常能看到两个规律线上退货率上升时制造商会降低直销价来补偿消费者的退货风险同时压低批发价以避免零售商因需求萎缩退出零售商利润下降的幅度会小于制造商因为跨渠道退货补偿给零售商提供了一层缓冲。这个结果可以直接用来谈线上渠道的退货运费险该由谁出。第二是随机参数验证均衡唯一性。由于利润函数是二次型理论上有唯一内部均衡但数值求解时仍需防范多极值。用numpy.random.uniform生成300组参数每组固定决策变量外随机跑不同初始点断言各组解收敛到同一利润值。这个批量验证跑完后模型的可信度会比单次求解高一个量级。再往深走一步可以把外生回收率 $\tau$ 变成内生决策设 $\tau(q) \tau_{\max} \cdot q / q_{\max}$回收价 $q$ 由制造商在三阶段Stackelberg决策中决定。此时模型会多一层嵌套制造商同时决策回收价、批发价和直销价博弈的层级和复杂度都会上升Nash讨价还价的谈判破裂点也会随之改变。我自己跑这套模型最大的教训是“先写断言再谈结果”。没有断言保护的模型参数一改就有可能在错误的方向上得出漂亮的曲线。把这个习惯留在这套代码里未来不管你把模型扩展成三渠道、多周期还是加入库存决策它都能在第一时间拦住低级错误。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网