5D Library › 行动的经典与统计力学 · English
第三章 双势阱与克莱默斯逃逸率
两个山谷
想象一条起伏的地形线,有两个山谷,中间隔着一道山脊。一颗小球停在左边山谷底部,周围不断有随机的晃动。大多数晃动只让小球在谷底附近抖动;偶尔,一连串恰好同方向的晃动把它推上山脊,它就滚进右边的山谷。化学反应、蛋白质折叠、磁畴翻转、种群在两种状态之间的切换,都可以用这种图景描述。
本章把它借来描述习惯:左边的山谷是一个熟悉、省力的旧习惯,右边的山谷是一个更好的新习惯,山脊是从旧到新必须付出的「活化能」。这仍然是简化模型:人的行为状态不是一维坐标,也没有可以测量的「势能」。模型的价值在于它给出一个定量的、可以讨论的关系:等待时间如何依赖于山脊的高度和晃动的强度。
双势阱与过阻尼朗之万方程
推导
最简单的双势阱是
两个极小值在 ,中间的极大值(势垒顶)在 ,势垒高度 。若运动受强摩擦支配(过阻尼),状态随时间的变化由过阻尼朗之万方程描述:
右边第一项是势能的「下坡力」,第二项是强度为 的随机扰动(在物理中 对应温度 )。
证据
阿伦尼乌斯在 1889 年从实验总结出反应速率随温度呈指数变化 (Arrhenius 1889)。克莱默斯在 1940 年从布朗运动出发推导出越过势垒的速率;在过阻尼极限下,
平均等待时间约为 (Kramers 1940)。这一结果在势垒远高于噪声()时成立,五十年间被大量实验和数值研究检验和推广 (Hänggi et al. 1990)。
模拟与公式对照
推导
取 、,两个谷底在 ,势垒高度 0.25。程序让小球从左谷底出发,记录它到达右谷底所需的时间,每种噪声强度重复 100 次,与克莱默斯公式比较。
# Overdamped Langevin motion in the double well U(x) = a x^4 - b x^2 (a = 1/4, b = 1/2):
# dx = -U'(x) dt + sqrt(2 D) dW
# Wells at x = -1 and x = +1, barrier at x = 0 of height dU = b^2 / (4a) = 0.25.
# Kramers (1940), overdamped limit: escape rate r = sqrt(U''(well) |U''(barrier)|) / (2 pi) * exp(-dU / D).
# Simplified model; "noise" D stands for the everyday fluctuations that occasionally push a state over.
import math, random
random.seed(7)
A, B = 0.25, 0.5
DU = B * B / (4 * A)
U2_WELL, U2_TOP = 4 * B, 2 * B # U'' at the wells and |U''| at the barrier: 2 and 1
DT = 0.01
def force(x):
return -(4 * A * x ** 3 - 2 * B * x)
def mean_escape_time(D, n=100):
s = math.sqrt(2 * D * DT)
total = 0.0
for _ in range(n):
x, t = -1.0, 0.0
while x < 1.0: # from the bottom of one well to the bottom of the other
x += force(x) * DT + s * random.gauss(0, 1)
t += DT
total += t
return total / n
print("noise D dU/D simulated mean time Kramers 1/r ratio")
for D in (1 / 16, 1 / 20, 1 / 24):
sim = mean_escape_time(D)
kr = 2 * math.pi / math.sqrt(U2_WELL * U2_TOP) * math.exp(DU / D)
print(f"{D:7.4f} {DU / D:4.1f} {sim:19.0f} {kr:11.0f} {sim / kr:5.2f}")
print("Kramers is the leading term for large dU/D; the simulation also includes the slide into the far well")
print("each +1 in dU/D multiplies the waiting time by e = 2.7")
# noise D dU/D simulated mean time Kramers 1/r ratio
# 0.0625 4.0 274 243 1.13
# 0.0500 5.0 752 659 1.14
# 0.0417 6.0 2080 1792 1.16
# Kramers is the leading term for large dU/D; the simulation also includes the slide into the far well
# each +1 in dU/D multiplies the waiting time by e = 2.7模拟得到的平均时间比克莱默斯公式高约 15%,这在预料之中:公式是 很大时的首项近似,而模拟还包括了越过山脊后滑进右谷底的时间。重要的是比例关系: 每增加 1,等待时间就乘以约 2.7(自然常数 )。从 4 到 6,等待时间增加了七倍以上。等待时间对势垒高度与噪声之比极其敏感,这是本章其余部分的出发点。
两种缩短等待的办法
等待时间 给出两条路:降低势垒 ,或者给整个地形施加一个倾斜。
- 降低势垒对应把改变拆成很小的步骤:每一步需要的「活化能」都很小。
- 施加倾斜对应一个持续的外部拉力:。同伴的期待、与他人的约定、固定的展示日期,都可以看作把地形朝新习惯一侧倾斜的力。
推导
让旧习惯(左谷)略深一些,取噪声 ,使基线的 约为 11。程序计算各种干预下离开旧谷的等待时间,以及到达新谷之后「复发」回旧谷的等待时间。
# Two ways to shorten the Kramers waiting time tau ~ exp(dU / D) for leaving the old well:
# (1) lower the barrier (break the change into small steps that each need little activation);
# (2) tilt the landscape with a steady outside pull F (a partner, a commitment), U(x) - F x.
# Old habit = left well (made slightly deeper by c), new habit = right well. Simplified model.
import math
A, B, C, D = 0.25, 0.5, 0.03, 0.025
def landscape(b, F):
U = lambda x: A * x ** 4 - b * x ** 2 + (C - F) * x
dU = lambda x: 4 * A * x ** 3 - 2 * b * x + (C - F)
d2U = lambda x: 12 * A * x ** 2 - 2 * b
roots = []
for x0 in (-1.5, 0.0, 1.5): # Newton from three starting points
x = x0
for _ in range(60):
x -= dU(x) / d2U(x)
roots.append(x)
left, top, right = sorted(roots)
if abs(top - left) < 1e-6 or abs(right - top) < 1e-6:
return None # the barrier has vanished: no waiting at all
pref = lambda w: 2 * math.pi / math.sqrt(d2U(w) * abs(d2U(top)))
tau_go = pref(left) * math.exp((U(top) - U(left)) / D)
tau_back = pref(right) * math.exp((U(top) - U(right)) / D)
return U(top) - U(left), tau_go, tau_back
base = landscape(B, 0.0)
print(f"baseline: barrier {base[0]:.3f}, dU/D = {base[0] / D:.1f}, waiting time {base[1]:.2e}, relapse time {base[2]:.1e}")
cases = [("barrier lowered by a quarter", B * math.sqrt(0.75), 0.0),
("barrier halved", B * math.sqrt(0.5), 0.0),
("steady pull F = 0.05", B, 0.05),
("steady pull F = 0.10", B, 0.10),
("barrier halved + pull F = 0.05", B * math.sqrt(0.5), 0.05)]
for label, b, F in cases:
r = landscape(b, F)
print(f"{label:31s} barrier {r[0]:.3f} waiting time {r[1]:.2e} ({base[1] / r[1]:8.0f}x shorter)"
f" relapse time {r[2]:.1e}")
print(f"pull removed after the switch: relapse time back to {base[2]:.1e} (the tilt must persist to hold)")
# baseline: barrier 0.281, dU/D = 11.2, waiting time 3.27e+05, relapse time 3.1e+04
# barrier lowered by a quarter barrier 0.216 waiting time 2.85e+04 ( 11x shorter) relapse time 3.2e+03
# barrier halved barrier 0.151 waiting time 2.57e+03 ( 127x shorter) relapse time 3.7e+02
# steady pull F = 0.05 barrier 0.230 waiting time 4.52e+04 ( 7x shorter) relapse time 2.2e+05
# steady pull F = 0.10 barrier 0.184 waiting time 7.37e+03 ( 44x shorter) relapse time 1.8e+06
# barrier halved + pull F = 0.05 barrier 0.109 waiting time 4.98e+02 ( 657x shorter) relapse time 1.8e+03
# pull removed after the switch: relapse time back to 3.1e+04 (the tilt must persist to hold)结果有三点值得注意。
第一,在这个参数下,把势垒减半使等待时间缩短约 127 倍,减半加上一个小的持续拉力缩短约 657 倍,也就是两到三个数量级。原先的设想说干预能使逃逸时间「缩短数个数量级」,在模型中是成立的,但前提是 很大;在人身上,我们无法测量 ,所以「几个数量级」只是模型的说法,不是对任何人的预测。
第二,只降低势垒,复发也同样变容易了。势垒是双向的:把山脊削低,从新谷回到旧谷的路也变短了。表中「势垒减半」一行,复发时间从约 3 万降到几百。拆小步能帮人开始,但不能帮人留住。
第三,倾斜同时缩短出发时间、延长复发时间:持续拉力 F = 0.10 使复发时间增加到约 180 万。但最后一行说明,一旦把拉力撤掉,复发时间就回到基线水平。在这个模型里,外部拉力必须持续存在,新状态才稳得住,除非地形本身发生了改变(第四章)。
证据怎么说
证据
「降低启动门槛」一类的干预有较好的证据。执行意图(「当情境 X 出现时,我就做 Y」)的元分析显示,它对目标达成有中到大的效应,d 约为 0.65 (Gollwitzer and Sheeran 2006)。习惯研究则显示,在稳定情境中反复执行一个简单行为,自动化程度随练习次数逐渐上升并趋于平台;一项在真实生活中追踪 96 名志愿者的研究里,曲线拟合良好的 39 人达到平台 95% 所需的时间中位数为 66 天,个体之间从 18 天到 254 天不等 (Lally et al. 2010; Wood and Rünger 2016)。
证据
「外部拉力」一类的证据更复杂。一项同时比较 54 种提升健身房到访次数干预的大型研究发现,许多干预在干预期内有小到中等的效果,但效果大多不大,而且干预结束后能否持续,证据很弱 (Milkman et al. 2021)。这与模型第三点的提示一致:拉力撤掉后,复发的速度会回到原来的水平。
注
「微习惯」「两分钟法则」这类流行做法,目前缺少直接比较不同步长的随机对照试验。本书把它们视为「降低势垒」的一种实现,并在下面写成假说。
假说 · 尚未验证
尚未确立。 模型预测,「只降低势垒」与「降低势垒加持续外部拉力」两种方案,在启动阶段的差别不大,但在撤掉支持之后的复发率上差别明显:只降低势垒的一组复发更快。可以在一项三臂随机试验中检验:A 组常规目标设定;B 组把目标拆成两分钟以内的小步;C 组在 B 的基础上每周向一位同伴报告。主要结局为干预结束后第 4 至 8 周仍维持该行为的比例。如果 C 组与 B 组在干预后的维持率上没有差别,或 B 组的维持率不低于 A 组,模型的这一预测就被推翻。
类比的限度
物理中的噪声是没有方向的热运动;人的生活中的「扰动」——一次旅行、一场病、一位新朋友——常常有方向,也会改变地形本身。物理中的势垒高度是确定的;人的「势垒」受情绪、疲劳、环境的影响,每天都不同。最重要的是,物理中的小球不会自己决定去哪个山谷,而人会:意图、价值与计划都是这个一维模型没有包含的变量。这个模型的用处是提醒一种关系:等待时间对势垒与扰动之比是指数敏感的,所以小的结构性改变可能比加倍的意志努力更有效;它不能告诉任何人他的势垒有多高。
参考文献
Fan, Y. (2026). Classical and Statistical Mechanics of Human Action: Psychological Inertia, Static Friction Thresholds, Kramers Escape Rate in Double-Well Potentials and Habit Phase Transitions, Read Beside East Asian Philosophy of Practice [行动的经典与统计力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23738774 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).