|
|
JAMS 求解器Just Another Modeling System — GAMS EMP 求解器
引言JAMS (Just Another Modeling System) 是 GAMS 中 EMP (Extended Mathematical Programming) 框架的核心求解器,专门用于处理均衡问题(Equilibrium Problems)和互补性问题(Complementarity Problems)。与传统的 GAMS MCP 求解器不同,JAMS 能够将高层 EMP 模型自动转化为等效的标准数学规划形式,然后调用底层数值求解器进行求解。 JAMS 的主要作用是将 EMP 模型中的高级建模概念——如均衡条件、最优性条件、变分不等式、双层规划、软约束、析取约束等——转换为 GAMS 标准求解器能够识别的形式(MCP、NLP、MINLP 等),从而大大简化了复杂均衡问题的建模过程。 JAMS 广泛应用于经济均衡分析、能源市场建模、交通网络均衡、博弈论、机制设计、多目标优化等领域。
目录
1. Reformulation — 重构工具JAMS 作为 EMP 求解器的核心功能之一是将高级 EMP 模型自动重构(Reformulation)为标准数学规划形式。重构过程是 JAMS 求解流程的关键步骤:用户通过 JAMS 支持的重构类型包括:
重构示例:简单 Nash 均衡考虑两个厂商的产量博弈问题,每个厂商最大化自己的利润: $title Nash Equilibrium via JAMS Sets i /1*2/; Alias (i,j); Parameters a(i) /1 10, 2 10/, b /1/; Variables obj(i), q(i); Positive Variables q(i); Equations profit(i), demand; profit(i).. obj(i) =e= (a(i) - b * sum(j, q(j))) * q(i); * EMP 信息文件 file emp /'%emp.info%'/; put emp; * 每个主体最大化自己的利润 loop(i, put 'equilibrium' /; put ' max obj(i) q(i) profit(i)' /; ); putclose emp; * 设置 EMP 模型并求解 model nash /all/; solve nash using emp; JAMS 自动将该 Nash 均衡问题重构为 MCP 形式并求解。
2. Optimality Conditions — 最优性条件JAMS 可以将显式定义的优化问题自动转化为其最优性条件(KKT 条件),生成等效的互补性系统。这是 EMP 框架最强大的功能之一——用户只需要定义优化问题本身,而无需手动推导 KKT 条件。
最优性条件示例考虑一个简单的带约束优化问题,JAMS 自动将其转化为 KKT 条件系统: * 定义优化问题 Variables x, y, z; Equations f, g1, g2; f.. z =e= sqr(x-1) + sqr(y-2); g1.. x + y =l= 3; g2.. x - y =g= 0; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'dualvar lambda1 g1' /; put 'dualvar lambda2 g2' /; put 'min z x y f' /; putclose emp; model kktExample /all/; solve kktExample using emp; JAMS 内部重构过程:
3. Soft Constraints — 软约束软约束(Soft Constraints)允许用户在模型中定义可以适当违反的约束,违反程度通过惩罚项在目标函数中体现。JAMS 通过 EMP 信息文件支持软约束定义,自动将其转化为带有松弛变量的形式。
软约束示例* 定义变量和约束 Variables x, obj; Equations fobj, hard_con, soft_con; fobj.. obj =e= sqr(x-5); hard_con.. x =l= 10; soft_con.. x =g= 8; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'soft soft_con penalty 100' /; put 'min obj x fobj' /; putclose emp; model softExample /all/; solve softExample using emp; 在此示例中,约束 软约束的适用场景包括:
4. Bilevel Programs — 双层规划双层规划(Bilevel Programming)问题包含上层(领导者)和下层(跟随者)两个优化层次。下层优化问题作为上层问题的约束条件。JAMS 通过 EMP 框架将双层规划自动转化为单层 MPEC(带均衡约束的数学规划)问题。
双层规划示例以下示例展示了一个简单的 Stackelberg 博弈模型: * 上层变量和下层变量 Variables leader_obj, follower_obj; Variables x, y; * 上层目标函数 Equations leader_eq; leader_eq.. leader_obj =e= -sqr(x) - sqr(y-1); * 下层优化问题 Equations follower_eq, flim; follower_eq.. follower_obj =e= sqr(y) - x*y; flim.. y =l= 2; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'bilevel' /; put ' max leader_obj x leader_eq' /; put ' max follower_obj y flim' /; putclose emp; model bilevelExample /all/; solve bilevelExample using emp; JAMS 自动将下层优化问题替换为其 KKT 条件,生成等效的 MPEC 问题,然后调用 MPEC 求解器(如 NLPEC)或通过进一步重构求解。 双层规划的主要应用领域包括:
5. Variational Inequalities — 变分不等式变分不等式(Variational Inequality, VI)问题是均衡建模的重要工具。VI 问题的标准形式为:求向量 x ∈ K,使得 F(x)·(y − x) ≥ 0 对所有 y ∈ K 成立。JAMS 通过 EMP 框架支持直接定义 VI 问题。
变分不等式示例* 定义变量和函数 Variables x, y; Equations Fx, Fy, box_x, box_y; Fx.. x =e= 2*x + y - 1; Fy.. y =e= x + 3*y - 2; box_x.. x =l= 2; box_y.. y =l= 2; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'vi Fx x' /; put 'vi Fy y' /; putclose emp; model viExample /Fx.x, Fy.y, box_x, box_y/; solve viExample using emp; 在上例中,JAMS 将 VI 问题重构为等效的 MCP 形式,通过互补条件实现变分不等式逻辑。 VI 问题的典型应用:
6. Embedded Complementarity — 嵌入互补性嵌入互补性(Embedded Complementarity)允许在优化模型中直接嵌入互补性条件。这在建模包含"或"逻辑关系的决策问题或包含 KKT 条件的 MPEC 模型中尤为有用。
嵌入互补性示例* 变量定义 Positive Variables s, t; Variables x, obj; * 目标函数 Equations fobj; fobj.. obj =e= sqr(x-3) + sqr(s-1); * 互补条件 Equations comp1, comp2; comp1.. s + t =g= 1; comp2.. s - t =g= 0; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'complementary' /; put ' comp1 s' /; put ' comp2 t' /; put 'min obj x s fobj' /; putclose emp; model embCompExample /all/; solve embCompExample using emp; JAMS 将互补约束嵌入到优化问题中,生成一个带互补约束的数学规划(MPCC)问题,然后通过适当的重构策略求解。
7. MOPECs — 多目标均衡约束规划MOPEC(Multi-Objective Programming with Equilibrium Constraints)是多目标优化与均衡约束的结合体。JAMS 支持 MOPEC 问题的建模和求解,允许用户定义多个主体各自带有多个目标的优化问题,同时各主体之间通过均衡条件相互耦合。
MOPEC 示例* 两个主体的多目标问题 Sets agents /A,B/; Variables objA1, objA2, objB1; Variables xA, xB; Positive Variables xA, xB; Equations eA1, eA2, eB1, resource; * 主体 A 的两个目标 eA1.. objA1 =e= -sqr(xA) + xB; eA2.. objA2 =e= -sqr(xA-2); * 主体 B 的一个目标 eB1.. objB1 =e= -sqr(xB) + xA; * 公共资源约束 resource.. xA + xB =l= 10; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'equilibrium' /; put ' max objA1 xA eA1' /; put ' max objA2 xA eA2' /; put ' max objB1 xB eB1 resource' /; putclose emp; model mopecExample /all/; solve mopecExample using emp; JAMS 处理 MOPEC 时,对每个主体的多个目标进行处理(可通过加权或字典序方法),然后通过市场均衡条件将所有主体的决策联结起来,形成统一的 MCP 系统。 MOPEC 的应用领域:
8. Extended NLP — 扩展非线性规划扩展非线性规划(Extended NLP)是 JAMS 对标准 NLP 模型的扩展,允许在 NLP 模型中嵌入 EMP 特有的建模概念,如软约束和互补性条件。JAMS 会自动检测这些扩展特性并选择适当的求解策略。
扩展 NLP 示例* 扩展 NLP:在 NLP 中嵌入互补条件 Variables x, y, obj; Equations fobj, econ; fobj.. obj =e= sqr(x-1) + sqr(y); econ.. x + y =e= 1; * 嵌入互补条件 Equations comp; comp.. x * y =e= 0; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'extendednlp' /; put ' min obj x y fobj' /; put ' complementary comp .' /; putclose emp; model extNLP /all/; solve extNLP using emp; JAMS 的扩展 NLP 功能使得用户可以在一个统一的框架内混合使用标准 NLP 约束和 EMP 高级特性,极大提高了建模的灵活性。
9. Disjunctive Programs — 析取规划析取规划(Disjunctive Programming)是处理包含逻辑"或"约束的优化问题的有效方法。JAMS 通过 EMP 框架支持析取约束的建模,将逻辑条件自动转化为混合整数形式(Big-M 或凸包重构)。
析取规划示例* 变量定义 Variables x, y, obj; Equations fobj, disj1, disj2; fobj.. obj =e= x + y; * 析取条件:要么 x ≥ 5,要么 y ≥ 5 disj1.. x =g= 5; disj2.. y =g= 5; * EMP 信息文件 file emp /'%emp.info%'/; put emp; put 'disjunction' /; put ' disj1 * x' /; put ' disj2 * y' /; put 'min obj x y fobj' /; putclose emp; model disjExample /all/; solve disjExample using emp; JAMS 自动引入辅助二元变量,将析取约束转化为 Big-M 形式: * JAMS 内部重构(示意) Binary Variable delta; x =g= 5 - M*(1 - delta); y =g= 5 - M*delta; 析取规划的应用包括:
10. EMP Info File — 信息文件配置EMP 信息文件(
EMP 信息文件语法EMP 信息文件支持以下主要指令:
EMP 信息文件使用流程
高级配置选项JAMS 提供了若干求解器选项,可通过 * jams.opt 常用选项 tol 1.0e-8 * 收敛容差 iterlim 10000 * 最大迭代次数 output_level 2 * 输出详细级别 (0=最小, 1=标准, 2=详细) reformulation 1 * 重构策略 (1=自动, 2=MCP, 3=NLP) nlp_solver conopt * NLP 子求解器 mcp_solver path * MCP 子求解器 check_duals 1 * 检查对偶可行性
11. 综合示例以下是一个综合性的 JAMS/EMP 示例,演示了如何在一个模型中同时使用均衡条件、最优性条件和变分不等式: $title Comprehensive JAMS/EMP Example * ========== 变量定义 ========== Variables price, supply, demand, obj_welfare; Positive Variables price, supply; * ========== 方程定义 ========== Equations welfare, supply_func, demand_func; welfare.. obj_welfare =e= -sqr(supply) + demand*price; supply_func.. supply =e= price - 1; demand_func.. demand =e= 10 - price; * ========== EMP 信息文件 ========== file emp /'%emp.info%'/; put emp; * 社会福利最大化(市场均衡) put 'equilibrium' /; put ' max obj_welfare supply welfare' /; put ' vi supply_func price' /; put ' vi demand_func price' /; putclose emp; * ========== 求解 ========== model mktEquilibrium /all/; option emp = jams; solve mktEquilibrium using emp; * ========== 输出结果 ========== display price.l, supply.l, demand.l; 在此综合示例中:
总结JAMS 是 GAMS EMP 框架的核心求解器,为处理复杂的均衡问题和互补性问题提供了强大的工具。通过 EMP 信息文件的高级声明式语法,用户无需手动推导 KKT 条件或设计复杂的重构策略,即可高效构建和求解各类均衡模型。 JAMS 的核心优势在于:
在线留言尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||