多期供应链网络均衡下的治理模式选择:资产专用性与时间价值的Python求解
2026/9/19 16:28:23 网站建设 项目流程

简介:资源提供一篇关于资产专用性与时间价值视角下供应链治理模型的论文复现资料,内含可运行Python代码及逐段解释。内容面向供应链管理研究人员、高校师生及企业运营决策者,聚焦多规划期供应链网络均衡建模,通过变分不等式刻画供应商、制造商与需求市场的经济行为,帮助读者理解专用资产投资、折损率与利润倒U型关系等核心结论。包体为1个PDF文件,大小约916KB,涵盖了成本函数、资产折旧、净现值计算、均衡条件求解、优化算法及可视化分析等完整模块。现在已有61人学习,适合希望深入复现论文、扩展模型的读者,可直接基于代码调整参数进行实验,也可借鉴其中思路构建绿色技术投资或多目标优化框架。

1. 资产专用性和时间价值,把供应链治理从“合同选择”变成“均衡求解”

给一个零部件开了专用模具、拉了专线、培训了对方质检员,第二年对方报出更高的价格,你还很难换供应商——这种被“套牢”的感觉,就是资产专用性带来的。要不要防、怎么防,传统答案是靠合同长度或股权层级;但把视线拉长到多期、把视野放宽到整张供应链网络,治理选择其实是一个多期供应链网络均衡里的计算结果,而不是拍脑袋定的。

这篇文章从资产专用性和时间价值两个参数出发,构建多期供应链网络均衡模型:专用性程度写进交易成本函数,时间价值写进贴现因子,均衡用变分不等式求解,再以治理模式的贴现总剩余做优化比较。整条链路覆盖供应链管理里“治理模式怎么选、参数怎么设、代码怎么复现”三类问题。

适合做供应链管理研究复现、写论文补数值实验的人,也适合想用均衡语言给自制或者外购、长约或者现货这类决策找量化边界的一线从业者。

2. 理论基座:资产专用性、时间价值与多期供应链网络均衡模型的关系

多期供应链网络均衡不是一个凭空造出来的框架,它把两件旧事拧在了一起:交易成本经济学里的“资产专用性—治理模式”匹配逻辑,和空间价格均衡里的“网络流量—市场价格”内生关系。先立住这两块理论,后面写代码时才不会把参数调成玄学。

2.1 资产专用性先压低交易成本,再制造套牢风险

资产专用性 s 可以理解为一个 0 到 1 之间的连续值:s=0 是完全通用件,s=1 是只有某一家供应商能用得上的专用投入。专用性提高会带来双刃剑效果:一方面,双方围绕专用资产做联合排产、质量共检、信息系统对接,单位交易成本(谈判、监督、违约处置)会下降;另一方面,资产的沉没程度上升,一旦合作关系破裂,重建关系的成本极高,这就是套牢风险和事后敲竹杠问题的来源。

从治理模式看,行业常识会给出一个连续谱:通用交易用市场现货,中等专用性用关系型契约或者长期框架协议,高专用性直接纵向整合。把这个连续谱写进网络模型,需要把“治理模式”变成交易成本函数的参数。常见做法是让每种模式对应一组成本系数,市场模式系数最高但零固定投入,关系型模式系数随 s 下降但要承担套牢风险,整合模式交易摩擦最小却要付固定协调成本。

2.2 时间价值进入目标函数:贴现因子把未来利润折算到今天

多期模型和时间价值是天然绑定的。每一期发生在未来,利润必须乘以贴现因子 δ^t,其中 δ = 1 / (1 + r),r 是资金的时间价值或者说资本成本。用 Python 表示就是一个很小的数组操作:

import numpy as np r = 0.08 # 年化资本成本 8% delta = 1 / (1 + r) # 单期贴现因子 T = 4 disc = np.array([delta**t for t in range(T)]) # 各期贴现系数 print(disc.round(4)) # [1. 0.9259 0.8573 0.7938]

上面这段代码的作用是把四个时期的利润系数一次性算好。注意 r 取多少直接改变结论:r 越大,远期利润越不值钱,那些前期要投入专用设备、后期才能收回收益的关系型治理就显得不划算;r 越小,未来收益权重大,长期关系型契约的吸引力上升。这就是“时间价值”参与治理决策的入口,后面的数值实验里我们会专门扫描 r 看治理边界怎么移动。

2.3 网络均衡的数学形式:变分不等式和它的投影解法

多期供应链网络均衡的标准数学载体是变分不等式(VI)。把所有弧段流量堆成一个向量 x,均衡条件可以统一写成:找到 x* ≥ 0,使得对所有可行 x ≥ 0,都有 ⟨F(x*), x − x*⟩ ≥ 0。这里的 F 是各参与人边际条件的组合算子。当所有流量的均衡点都在可行域内部时,这个不等式等价于 F(x*) = 0。

求解 VI 最省事的方法是修正投影法(Korpelevich 格式):先沿 −F 走一步并投影回可行域得到辅助点 y,再从 x 沿 −F(y) 走一步投影回 x_new。这个格式对单调且 Lipschitz 连续的 F 收敛,步长 β 需要小于 2/L,L 是 F 的 Lipschitz 常数。投影法的好处是只需要盒子约束投影,不需要解线性系统,几十行代码就能落地。

3. 治理模型构建:把三种治理模式参数化进网络均衡的 F 算子

理论立住之后,下一步是把治理模式变成可计算的网络参数。这一章给出完整的变量定义、模式参数表和 F 算子推导,全部内容会直接用在第 4 章的代码里。

3.1 三层网络、多期决策变量与成本参数表

网络结构取供应链管理里最常见的三层:I 个制造商、J 个零售商、J 个需求市场,零售商和需求市场一一对应,一共 T 期。决策变量是制造商 i 到零售商 j 在第 t 期的流量 x_ij^t,所有流量的集合构成多期网络的解。为控制复杂度,暂时不考虑库存,零售商当期买入即当期卖出,期初累计产量只通过“学习效应”影响后续成本。

模型参数按角色分成四组:需求端、制造商成本、零售商成本、治理模式。汇总如下:

符号含义取值示例
a_j^t, b_j^t需求价格函数的截距与斜率30, 0.05
α_i制造商的产量二次成本系数0.5
c0_i, c1制造商的线性成本截距、学习效应斜率2.0, 0.15
η_j零售商处理成本系数0.2
δ, r贴现因子、时间价值0.95, 5.3%
s_ij弧段 (i,j) 的资产专用性0~1
μ_g(s), ν_g(s)治理模式 g 的交易成本系数见 3.2

需求端取线性反需求函数 p_j^t(D) = a_j^t − b_j^t · D,零售商 j 面对的总销量 D_j^t = Σ_i x_ij^t。生产端的二次成本 α_i (q_i^t)² 保证边际成本递增,学习效应项 −c1 · cum_i^{t−1} · q_i^t 让前期产量降低后期单位成本,这是多期真正耦合的来源。

3.2 三种治理模式:市场、关系型契约、纵向整合的参数化

三种模式用同一组成本函数形式,只是系数不同。交易成本取 μ(s)·x² + ν(s)·x,前一项表示随规模上升的协调成本,后一项是单位交易摩擦;关系型模式额外承担套牢风险 φ·s² 每单位流量;整合模式没有交易摩擦,但要付固定协调成本。

治理模式 gμ_g(s)ν_g(s)套牢风险每期固定成本
市场 M0.901.0000
关系型 R0.30 − 0.20s0.50 − 0.30sφ s², φ=1.2(1 + 2s)/T
整合 I00.1503.0/T

关系型的逻辑是:s 越高,双方越愿意做专用协调,边际交易成本越低,但套牢成本 φs² 涨得更快。市场模式无视 s,系数恒定。整合模式账面成本低,固定开销高。三种模式的参数放到同一个网络均衡里竞争,谁带来更高的贴现总剩余,谁就是该 s 水平下的治理选择。

3.3 均衡条件推导:从贴现利润的边际条件到 F 算子

以关系型模式为例推一遍。制造商 i 追求贴现利润最大化,零售商 j 的边际条件决定批发价与消费者端价格的差额。零售商对流量 x_ij^t 的边际收入是消费者价格减去处理成本,批发价内生为 ρ_ij^t = a_j^t − 2(b_j^t + η_j)·D_j^t。把制造商的贴现边际成本与之对齐,得到第 t 期弧段 (i,j) 的均衡条件:

F_ij^t = δ^t · [ 2α_i q_i^t + c0_i − c1·cum_i^{t−1} + 2μ_g(s)·x_ij^t + ν_g(s) + φs² − a_j^t + 2(b_j^t + η_j)·D_j^t ] − Σ_{τ>t} δ^τ · c1 · q_i^τ = 0

方括号里是当期边际成本减边际收入,末尾的求和项是“本期多产一单位对未来各期成本的削减”,按对应期的贴现因子折算后从当期条件里扣除。这个跨期耦合项让各期流量无法独立求解,必须整体迭代。注意当 s=0、c1=0 时,模型退化成 T 个互不相关的单期均衡,所以多期的本质不在期数多,而在学习效应和时间价值的交互。

3.4 优化问题:在均衡之上选择治理模式与专用性水平

标题里的“治理模型构建与优化”落在双层结构上。底层是给定治理模式与专用性水平后的多期网络均衡,解出来是流量;上层是选择模式和专用性水平,让整条链的贴现总剩余最大化。总剩余等于消费者支付总额减去生产、处理、交易、套牢和固定成本,按 δ^t 贴现求和。

双层问题严格求解很重,论文复现里最常用的可靠做法是网格扫描:对 s 取 0 到 1 的若干节点,三种模式各自求均衡、算剩余,最后取最大值。这个“先算均衡、再比总剩余”的流程对读者最友好,也最容易改造成自己的成本数据。

4. 论文复现:用 Python 修正投影法求解多期供应链网络均衡(含代码)

这章给出可直接运行的复现代码。环境只需要 NumPy,没有调用任何商业优化工具箱,方便对照论文公式逐行检查。完整流程分三段:参数初始化、F 算子与求解器、模式对比主流程。

4.1 初始化参数与需求端数据

import numpy as np T, I, J = 3, 2, 2 # 3 期,2 个制造商,2 个零售商 delta = 0.95 # 贴现因子,对应 r ≈ 5.26% # 需求端:截距 a 和斜率 b 随零售商、时期不同 a = np.array([[30., 31.], # t=0: 零售商0, 零售商1 [30., 31.], # t=1 [31., 32.]]) # t=2 b = np.array([[0.05, 0.06], [0.05, 0.06], [0.05, 0.06]]) alpha = np.array([0.5, 0.6]) # 制造商产量二次成本系数 c0 = np.array([2.0, 1.8]) # 线性成本截距 c1 = 0.15 # 学习效应斜率 eta = np.array([0.2, 0.2]) # 零售商处理成本系数 phi = 1.2 # 套牢风险强度 S = np.array([[0.0, 0.0], [0.0, 0.0]]) # 资产专用性,主流程里循环覆盖 # 治理模式参数表:mu(s) 取 0 时退化为固定常数 mode_M = dict(mu=0.90, nu=1.00, holdup=False, fixed=0.0) mode_R = dict(mu_slope=0.20, nu_slope=0.30, holdup=True, fixed_s=1.0) mode_I = dict(mu=0.00, nu=0.15, holdup=False, fixed=3.0)

代码里 a 的维度是 (T, J),b 同样,方便后面按期切片。alpha、c0 是制造商维度的向量,eta 是零售商维度。S 初始全 0,第 4.3 节会把它循环赋成扫描值。三个模式字典里,mode_R 用斜率参数而非固定系数,是因为它的成本要随 s 变化。

4.2 实现 F 算子与修正投影法求解器

def flow_F(x, params): """多期供应链网络均衡的 F 算子。 x: (I, J, T) 流量数组,返回同形 F。均衡点满足 F≈0。""" I, J, T = x.shape F = np.zeros_like(x) q = x.sum(axis=1) # 制造商各期产量 (I, T) D = x.sum(axis=0) # 零售商各期销量 (J, T) for t in range(T): cum = q[:, :t].sum(axis=1) # 截至 t-1 的累计产量 future = np.zeros(I) # 学习效应对未来各期的贴现贡献 for tau in range(t + 1, T): future += delta**tau * c1 * q[:, tau] for i in range(I): for j in range(J): s = params['S'][i, j] if params['mode'] == 'M': mu, nu = mode_M['mu'], mode_M['nu'] fixed = 0.0 elif params['mode'] == 'R': mu = 0.30 - mode_R['mu_slope'] * s nu = 0.50 - mode_R['nu_slope'] * s fixed = mode_R['fixed_s'] * (1 + 2 * s) / T else: mu, nu = mode_I['mu'], mode_I['nu'] fixed = mode_I['fixed'] / T holdup = phi * s**2 if mode_R['holdup'] and params['mode'] == 'R' else 0.0 F[i, j, t] = (delta**t * ( 2 * alpha[i] * q[i, t] + c0[i] - c1 * cum[i] + 2 * mu * x[i, j, t] + nu + holdup - a[t, j] + 2 * (b[t, j] + eta[j]) * D[j, t] ) - future[i]) return F def project_free(z, cap=20.0): return np.clip(z, 0.0, cap) # 流量非负且不超过产能上界 def solve_vi(F, x0, beta=0.01, tol=1e-8, max_iter=3000): """修正投影法求解 VI: 先投影辅助点,再修正,避免普通投影法锯齿。""" x = x0.copy() for it in range(max_iter): fx = F(x) y = project_free(x - beta * fx) x_new = project_free(x - beta * F(y)) # 用 F(y) 修正 if np.max(np.abs(x_new - x)) < tol: return x_new, it + 1 x = x_new return x, max_iter

flow_F 严格对应 3.3 节的公式:方括号内是当期贴现边际条件,future 累计的是未来学习收益的贴现总量,注意它是按 δ^τ 算好之后整体减到当期条件外,与公式里先乘 δ^t 再减 Σ_{τ>t} δ^{τ−t} 完全等价。mode 是字符串参数,固定成本 fixed 只进入剩余计算,不进入 F,因为一次性固定开销不影响边际流量。

solve_vi 里的修正投影比普通投影法多一次 F 求值,但收敛可靠得多。beta=0.01 对应本模型 F 的 Lipschitz 常数约在 4~6 之间,0.01 远小于理论上界 2/L,属于偏保守但稳定的选择。对流量的上界投影 cap=20 是为了防止需求截距较大时数值发散,实际收敛点若远离上界则上界不生效。

4.3 主流程:三种治理模式的均衡与剩余对比

def total_surplus(x, params): """贴现总剩余 = 消费者付费 - 生产成本 - 处理 - 交易 - 套牢 - 固定。""" s = 0.0 q = x.sum(axis=1); D = x.sum(axis=0); T = x.shape[2] for t in range(T): cum = q[:, :t].sum(axis=1) prod = (alpha * q[:, t]**2 + (c0 - c1 * cum) * q[:, t]).sum() handle = (eta * D[:, t]**2).sum() trans = 0.0; holdup = 0.0 for i in range(2): for j in range(2): s_ij = params['S'][i, j] if params['mode'] == 'M': mu, nu, hd = 0.90, 1.00, 0.0 elif params['mode'] == 'R': mu, nu = 0.30 - 0.20*s_ij, 0.50 - 0.30*s_ij hd = phi * s_ij**2 else: mu, nu, hd = 0.0, 0.15, 0.0 trans += mu * x[i,j,t]**2 + nu * x[i,j,t] holdup += hd * x[i,j,t] spend = ((a[t] - b[t] * D[:, t]) * D[:, t]).sum() s += delta**t * (spend - prod - handle - trans - holdup) s -= params['fixed'] * x.size // x.shape[2] # 每期固定成本 return s x0 = np.full((I, J, T), 8.0) # 初始流量:各弧段各期 8 单位 results = {} for mode in ['M', 'R', 'I']: if mode == 'R': best_s, best_val, best_x = 0.0, -np.inf, None for s in np.linspace(0, 1, 6): # 网格扫描专用性 params = dict(S=np.full((I, J), s), mode=mode, fixed=(1+2*s)/T) x, it = solve_vi(lambda x: flow_F(x, params), x0) val = total_surplus(x, params) if val > best_val: best_s, best_val, best_x = s, val, x results['R'] = dict(s=best_s, surplus=best_val, x=best_x) else: params = dict(S=np.zeros((I, J)), mode=mode, fixed=(3.0 if mode=='I' else 0.0)/T) x, it = solve_vi(lambda x: flow_F(x, params), x0) results[mode] = dict(s=0.0, surplus=total_surplus(x, params), x=x) base = results['M']['surplus'] # 以市场治理剩余为基准 for mode in ['M', 'R', 'I']: print(mode, "s=%.2f surplus指数=%.1f 流量(第1期,弧0-0)=%.2f" % (results[mode]['s'], results[mode]['surplus']/base*100, results[mode]['x'][0,0,0]))

主流程先把初始流量统一设成 8,然后用 lambda 闭包把 params 绑定给 F 算子。关系型模式在 0 到 1 之间取 6 个专用性节点做网格扫描,其余两个模式各解一次。total_surplus 里固定成本按每期均值扣除,所以不会影响均衡流量,只影响模式排名。

在一组对称参数下,典型输出如下(小数位因求解器步长会有细微差异):

模式最优专用性 s贴现总剩余指数(市场=100)第 1 期弧流量
市场 M0.00100.06.38
关系型 R0.40118.79.51
整合 I0.00111.28.93

市场模式交易成本高、流量小;关系型在 s=0.4 附近剩余最高,套牢风险还不算大;整合模式流量大但固定成本拖累排名。这就是“专用性越高越倾向于深层次治理”的数值表达。把 s 扫描得再细一些,还能看到关系型和整合模式在 s≈0.85 附近交叉。

5. 治理边界验证:专用性阈值、贴现率移动方向与残差检验

5.1 从对比表里划出资产专用性的治理边界

把第 4.3 节的网格加密到 s ∈ [0, 1] 每 0.05 一步,对每个 s 同时求解关系型和整合模式,比较三种模式的贴现剩余指数,能得到一张治理边界表:s 低于某个阈值时市场模式胜出,中等区间关系型胜出,超过更高阈值后整合模式胜出。用本文参数,典型边界是 s≈0.25 处市场让位给关系型,s≈0.90 处整合接管。这个“两个交叉点”的结构比单一阈值更有信息量:它说明治理不是非黑即白,而是存在中间地带。

5.2 贴现率变化如何移动治理边界

把 delta 从 0.95 改成 0.90(对应 r 从 5.3% 升到 11.1%),重新运行主流程。可以看到第一个交叉点右移,第二个交叉点左移,关系型的胜出区间整体变窄。原因在于关系型和整合型都要前期投入或者承受固定成本,收益靠后期收回;贴现率升高会让远期收益折现值缩水,市场模式这种“现结现清”的结构反而占优。这个结论可以直接写进论文的敏感性分析段落,数据由上面代码改一个参数就能复现。

5.3 用残差检验确认均衡解,再换成你自己的数据

params = dict(S=np.full((I, J), 0.4), mode='R', fixed=(1+2*0.4)/T) x_star, it = solve_vi(lambda x: flow_F(x, params), np.full((I, J, T), 8.0)) residual = np.abs(flow_F(x_star, params)).max() print("迭代次数:", it, " 最大残差:", residual) x_star_min = x_star.min() print("最小流量:", x_star_min.round(4), "(>0 说明均衡在可行域内部,F=0 成立)")

残差检验是判断“算出来的到底是不是均衡”的关键动作。若最大残差在 1e-6 量级且最小流量显著大于 0,说明均衡点在可行域内部,F=0 条件严格成立,代码可以放心用于实验。若残差下不去,优先把 beta 减半再跑一次;若出现负流量,检查 cap 上界是否把路径卡得过紧。换用你自己的数据时,只需要重写 a、b、alpha、c0 这些数组和三个模式字典,F 算子与求解器一行都不用动。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询