ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

微分博弈与鞍点求解:从纳什均衡到防侧翻控制器的工程实践

微分博弈与鞍点求解:从纳什均衡到防侧翻控制器的工程实践 简介微分博弈理论PPT课件是一份围绕博弈论与微分对策的专业教学课件适合运筹学、控制科学、应用数学等方向的学生和研究者学习参考。内容从《孙子兵法》等早期博弈思想讲起涵盖1944年博弈论正式建立、贝尔曼与埃萨克的重要发展系统梳理局中人、策略、得失等基本要素并重点讲解两人零和对策、纳什均衡点、囚徒困境经典案例以及鞍点与鞍点规划等核心概念。课件还引入基于微分博弈的防侧翻控制器设计实例展示如何构建非合作零和二人微分博弈模型并通过进化遗传算法求取纳什均衡解帮助读者理解理论到工程应用的完整路径。资源共1个pptx文件容量约1.27MB结构紧凑、页面组织清晰共19页。已有182人浏览学习适合作为课堂讲义或自学入门参考。1. 微分博弈不是石头里蹦出来的从囚徒困境到连续时间动态对策囚徒困境里两个嫌犯都选择招供结果双双获刑两年——这个结论第一次听的人几乎都怀疑人生。明明两人都不招供就能各判半年为什么理性的人反而选了更差的结局答案在于每个人都在对方不可控的情况下做决策博弈论的纳什均衡正是描述这种互相牵制的状态。而微分博弈把这种互相牵制的决策过程搬到连续时间动态系统里一边在变化另一边同步在反应。这份《微分博弈理论PPT课件》是典型的专业资料.pptx文件里19页内容从博弈论的基本要素、纳什均衡、鞍点一路推到防侧翻控制器设计中间还夹着囚徒困境和鞍点规划。对做控制、决策、策略规划的工程师来说真正值得拆的不是那些定理名字而是“把对抗关系写进状态方程”这件事。2. 把“同时决策”变成“状态演化”微分博弈的基本要素与数学模型2.1 静态博弈的三个基本要素局中人、策略与得失课件在第三页开门见山博弈论由三个基本要素构成局中人、策略、一局对策的得失。局中人就是竞争的双方可以是一个驾驶员和一个控制器也可以是两支军队策略是每个局中人可供选择的行动方案注意这里是“方案集合”不是单一固定动作得失是一局对策结束后的支付也就是谁赢了谁输了。在基本的两人零和对策中甲方所得恰好等于乙方所失所以双方的目标完全相反。这个“零和”假设在工程上非常常见因为它给出一个清晰的对抗下界控制方想压制的量正是扰动方想放大的量。把这三个要素固化成表格方便后续建模时逐一对应基本要素博弈论符号在防侧翻案例中的对应物建模时要回答的问题局中人N驾驶员转向角输入扰动方、主动防侧倾杆控制方谁参与决策策略u, w控制力矩序列、转向角序列每方能选什么得失J侧翻角峰值L双方各自优化什么这张表看起来简单却是把实际问题翻译成博弈模型的骨架。很多初学者的误区是只看“得失”却忽略了策略集合的约束比如控制力矩有上下限转向角有速率限制这些都必须写进模型否则后面算出来的纳什均衡解在真车上根本实现不了。2.2 从静态到动态状态方程与目标函数的引入静态博弈里双方各选一次策略就结束微分博弈则把选择放到连续时间轴上。常见做法是引入系统状态变量x(t)用一阶微分方程描述状态如何受控制输入u(t)和扰动输入w(t)影响也就是状态方程。同时在目标函数里把整个时间段内的性能指标积分起来形成一个泛函。这样双方不再只做“一次决策”而是在每个时刻根据当前状态不断调整策略。课件在第十四页给出了汽车系统的状态方程1和博弈目标函数2并把式3写成最小最大值优化问题。这里的数学结构是控制方u试图使L最小扰动方w试图使L最大。对比静态博弈你会发现动态版本多了“状态演化”这个维度每一时刻的控制动作会改变下一时刻的状态而扰动方也可以利用状态反馈做针对性攻击。因此微分博弈的解往往是一个反馈策略而不是一组固定常值。这也解释了为什么工程上很少直接套用静态纳什均衡公式而是通过数值迭代或仿真搜索来逼近最优策略。2.3 带约束的鞍点规划模型写出第一个可算的微分博弈理解了状态方程和支付函数就可以把课件里的防侧翻问题抽象成一个约束鞍点规划。仿照课件第十二页的模型x和y分别对应控制变量和扰动变量再加上约束条件。下面给出一个最小可复现的Python数学模型先把状态方程和支付函数写出来后续再套求解器import numpy as np # 车辆侧翻模型的状态矩阵示例值需根据实际车型标定 A np.array([[0, 1], [0, 0]]) # 状态系数矩阵 B np.array([[0], [1]]) # 控制输入矩阵主动防侧倾杆 C np.array([[0.1], [0.2]]) # 扰动输入矩阵驾驶员转向角 def dxdt(x, u, w, t): # 状态方程: dx/dt A x B u C w return A x B * u C * w def payoff(x, u, w, t, Q1.0, R0.1, S0.5): # 拉格朗日型支付函数 # 控制方希望 Q*x0^2 R*u^2 小扰动方希望 S*w^2 大因此这里对扰动项取负 return Q * x[0]**2 R * u**2 - S * w**2这段代码里A矩阵表示系统自身动力学比如侧倾角对侧倾角速度的积分关系B和C分别表示控制输入和扰动输入进入系统的通道函数dxdt就是状态方程右侧payoff则是用于后续积分的瞬时支付。注意payoff里扰动项用了负号这样当评估“控制方最小化总支付”时扰动方最大化同一个总支付正好生成零和对抗。S这个参数很关键调大表示扰动方攻击能力更强控制方需要更保守。这里还没有加入状态约束和控制饱和但实际车辆模型里这些约束往往比微分方程本身更影响解的性质后续可以在优化器中直接限制搜索边界。3. 鞍点与纳什均衡极小极大问题的最优条件与数值求解3.1 鞍点的四种定义与“极大中的极小”课件从微分方程、泛函、矩阵、物理四个角度各给了一条定义看起来很散但共同点是鞍点是沿着一个方向取极值、沿着另一个方向取相反极值的点。在微分方程里它是一条特征方向上稳定、另一条方向上不稳定的奇点在矩阵里它是“行中最大、列中最小”的那个元素在物理上它是一个方向极大、另一个方向极小的点。把这几条定义放到动态对策语境里就形成了“极大中的极小”思想股民想在最小风险下获得最大收益厂商想以最小投入获得最大产出。数学上这不再是单纯的极大或极小问题而是“极大中的极小”或“极小中的极大”。课件里的马鞍面图很直观从x方向看是谷底从y方向看是峰顶。你在鞍点处无论往哪个方向单边偏移都会让目标函数下降或上升却不可能同时改善两个方向。这个“方向”对应到博弈里就是两个局中人的策略轴所以鞍点天然适合作为双人零和博弈的解。3.2 纳什均衡点与鞍点不等式的关系纳什均衡点说的是在某情况下没有任何一个局中人可以通过独自改变行动来增加收益。把这句话映射到双人零和博弈里就得到一个鞍点不等式。设控制策略为u扰动策略为w最优策略组合为(u*, w*)那么对任意u和w应满足L(u*, w) ≤ L(u*, w*) ≤ L(u, w*)左边说当控制方采用u时扰动方无论换什么w都不能让支付超过L(u, w*)右边说当扰动方采用w时控制方无论换什么u都不能让支付低于L(u, w*)。也就是说u是对付最坏扰动的最优应对w是让控制方最难受的最优攻击。这个不等式是后面所有验证工作的基石。注意它要求支付函数在鞍点处同时满足“关于u取极小、关于w取极大”一旦支付函数不是凸-凹结构鞍点就可能不存在纳什均衡也可能退化到混合策略去。3.3 数值求解鞍点网格搜索与scipy.optimize实战实际工程中支付函数往往不是解析的需要靠仿真或黑箱评估。为了让你看清鞍点的数值结构这里用一个解析函数做演示f(x, w) (x - 1)^2 - 0.5(w 2)^2它关于x凸、关于w凹理论鞍点在(1, -2)。我们先用固定w对x最小化再对w最大化用网格搜索加scipy优化来逼近这个点import numpy as np from scipy.optimize import minimize def f(z): x, w z return (x - 1)**2 - 0.5 * (w 2)**2 def inner_min(w): # 固定 w对 x 做最小化返回最优 x 和最小函数值 res minimize(lambda z: f([z[0], w]), x0[0.5], methodBFGS) return res.x[0], res.fun # 在 w 方向上做网格扫描找使 inner_min 结果最大的 w ws np.linspace(-5, 5, 400) vals [inner_min(w)[1] for w in ws] w_star ws[np.argmax(vals)] x_star, f_center inner_min(w_star) # 用相邻点验证鞍点不等式 eps 1e-3 left f([x_star, w_star eps]) # 扰动方离开最优解 right f([x_star eps, w_star]) # 控制方离开最优解 print(f鞍点近似: x*{x_star:.4f}, w*{w_star:.4f}) print(ff(x*,w*eps){left:.6f}, f(x*,w*){f_center:.6f}, f(x*eps,w*){right:.6f})这段代码先对每一个固定的w求出让f最小的x然后在w轴上找出让这些最小值最大的w也就是求解 min_x max_w f(x,w) 的鞍点。打印出的三个值应该满足左边等于右边且中间值介于两者之间。inner_min返回的x_star和f_center在网格分辨率有限时会有小误差因此最后要再做一次局部优化。如果你有自己的支付函数把f替换成你的Carsim仿真返回值即可结构完全不变。需要注意如果支付函数对其中一个方向不是凸的网格扫描会漏掉局部鞍点这时建议改用多起点局部优化加上进化算法的外层搜索。4. 一辆车和扰动方的博弈防侧翻控制器的微分博弈建模与遗传算法求解4.1 把防侧翻问题描述成二人零和微分博弈防侧翻控制器设计为什么够格成为一个微分博弈案例因为车辆在极限工况下驾驶员踩踏板、打方向盘的意图对控制器来说是不可预测的外部输入而主动防侧倾杆又必须实时输出力矩来抑制车身侧倾。把驾驶员转向角w视为扰动方把主动防侧倾杆力矩u视为控制方这一对输入恰好形成对抗扰动方想把侧翻角做大控制方想把它压小。课件第十三页的前视图和第十四页的方程12就是这么来的。建模时要先定义车辆状态。常见做法是取侧倾角、侧倾角速度作为状态x用线性二自由度车辆模型加侧倾自由度来构造状态方程。状态矩阵A、控制矩阵B、扰动矩阵C可以从车辆动力学参数中估计也可以通过Carsim辨识。目标函数L被设为仿真周期内侧翻角绝对值的最大值这个定义让问题变成L∞性能优化而且对扰动方来说只要能让侧翻角在某一个时刻溢出就赢了。表格把变量角色梳理清楚变量物理含义博弈角色优化方向u主动防侧倾杆力矩序列控制方策略使L最小w驾驶员转向角序列扰动方策略使L最大x车辆侧倾状态角度、角速度状态变量由状态方程约束L仿真周期内侧翻角绝对值最大值支付函数鞍点处取得均衡4.2 目标函数L的离散化与最坏扰动工况既然L是“一个周期内的最大值”它天然是离散时间采样上的max函数。设仿真步长为Δt采样点t_k则L max_k |x侧倾(t_k)|。控制方和扰动方分别控制u(t)和w(t)的整个时间轨迹。在数值上我们一般把控制序列和扰动序列都参数化为有限维向量比如每0.1秒一个分段常值然后用优化算法搜索这个向量空间。注意“最坏扰动工况”并不是凭空想象的一个正弦波。它是通过内层优化得到的、让控制器最难受的转向角输入序列。课件第十六页的进化遗传算法流程图里适应性估计是在Carsim上完成的意思就是每一代参数都要在车辆仿真里跑完整个工况取侧翻角峰值返回给优化器。这个过程计算量大但模型可以是非光滑的、非线性的这也是为什么选择进化算法而不是梯度法。4.3 用进化遗传算法逼近纳什均衡解遗传算法的好处是不需要支付函数可微只要能从黑箱里拿到数值。常规解法是双层优化外层进化控制参数u内层针对当前u去寻找最坏扰动w。下面用scipy的differential_evolution写一个结构示意注意这里用近似函数代替Carsim仿真方便你直接运行理解流程import numpy as np from scipy.optimize import differential_evolution # 近似仿真根据控制参数u和扰动参数w生成侧翻角序列返回峰值 def rollover_peak(u, w): t np.linspace(0, 5, 200) # 用三角函数近似侧翻角响应实际中替换为Carsim仿真输出即可 roll np.sin(t * w[0]) u[0] * np.cos(t * u[1]) return np.max(np.abs(roll)) # 内层优化给定控制参数 u找到使侧翻角峰值最大的扰动 w def worst_rollover(u): res differential_evolution( lambda w: -rollover_peak(u, w), bounds[(0.5, 3.0), (0.2, 2.0)], seed1 ) return res.x, -res.fun # 外层优化最小化最坏情况下的侧翻角峰值 def control_cost(u): _, roll_max worst_rollover(u) return roll_max # 搜索控制器参数 u 的最优值 res differential_evolution( control_cost, bounds[(-2.0, 2.0), (-1.0, 1.0)], seed42 ) print(最优控制器参数:, res.x) print(最坏扰动下的侧翻角峰值:, res.fun)这里的rollover_peak代表一次Carsim仿真u和w分别是控制参数向量和扰动参数向量。内层的differential_evolution在w的边界范围内寻找让侧翻峰值最大的扰动外层再优化u让这个最坏峰值最小。两层优化叠在一起实际就是在求minmax问题。注意两个differential_evolution的bounds要分别根据执行器饱和限制和驾驶员转向极限来设定比如转向角最大值一般不超过方向盘物理限位控制力矩则受电机峰值扭矩约束。这个双层结构非常通用即使把rollover_peak替换成任何复杂仿真器求解框架都不用改。实际使用进化遗传算法时种群规模一般设30到50交叉概率0.8左右变异概率0.1迭代代数按仿真耗时来定Carsim单次仿真2秒的情况下跑完200代大约需要一个晚上。5. 把鞍点规划落到工程验证从伯德图到最坏扰动工况测试5.1 在Carsim里做适应性估计的常见流程在仿真环境里验证一个微分博弈控制器我一般按三个步骤走先在Carsim里搭好整车模型把悬挂、轮胎、转向系统参数标定到目标车型然后把控制器编译成Simulink模块接入Carsim的输入输出接口最后设置一组包含典型稳态回转和紧急变线的转向扰动输入跑完仿真正提取侧翻角时间序列。这里的适应性估计指的是每一组进化算法参数都要在相同的仿真工况下运行保证相互之间可比较。注意每次仿真结束后要重置车辆初始状态否则上一次遗留的侧倾角动态会污染下一轮评估。5.2 用伯德图判断控制器是否守住边界伯德图在这里不是为了看稳定性而是看从转向角输入w到侧翻角输出x的闭环传递函数幅值是否被压住。若在车身侧倾固有频率附近出现一个明显峰值说明扰动方只需要在那个频段注入能量就能把侧翻角打高。你可以用控制工具箱里的linearize命令把闭环模型线性化画出从w到侧翻角的伯德图然后观察幅频曲线在哪个频率超过你设定的阈值。如果峰值频率落在1到2赫兹附近说明悬架侧倾刚度或主动力矩响应速度还需要调整。5.3 快速验证鞍点不等式的调试技巧最实用的一招是直接扫描验证鞍点不等式。固定控制器参数为u*在扰动参数空间里随机采样w计算每个样本下的L(u*, w)确认最大值出现在w附近且不超过L(u, w*)再固定扰动参数为w*扫描控制参数u确认最小值出现在u附近且不低于L(u, w*)。把这两条扫描曲线画在同一张图上就能直观看到鞍点是否成立。实际调试中如果左边条件不满足说明控制方还有隐藏的脆弱扰动没有找到需要扩展扰动参数维度如果右边条件不满足说明控制器参数还没有优化到位需要继续迭代遗传算法或调整适应度函数。最后把这两条曲线的交点以及对应的侧翻角峰值记录进测试报告作为最坏工况的量化证据。本文还有配套的精品资源点击获取
返回列表