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 求解流程的关键步骤:用户通过 emp.info 文件描述问题的均衡结构,JAMS 读取该信息后自动生成等效的 MCP、NLP 或 MINLP 模型,再由底层求解器求解。

JAMS 支持的重构类型包括:

  • Nash 均衡重构:将多个主体的博弈均衡问题转化为 MCP 形式。
  • 最优性条件重构:将优化问题通过 KKT 条件转化为互补问题。
  • 变分不等式重构:将 VI 问题转化为等效的 MCP。
  • 双层规划重构:将上层问题的约束中包含下层优化问题的情况转化为单层 MPEC。
  • 析取约束重构:将逻辑析取约束转化为混合整数形式。

 

重构示例:简单 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 内部重构过程:

  1. 读取 EMP 信息文件,识别优化目标 f 和决策变量 x, y
  2. 自动推导拉格朗日函数 L = f + λ₁·g₁ + λ₂·g₂
  3. 生成 KKT 条件:∂L/∂x = 0, ∂L/∂y = 0,以及互补条件 λ₁·g₁ = 0, λ₂·g₂ = 0。
  4. 将 KKT 系统作为 MCP 提交给底层求解器。

 

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;

在此示例中,约束 soft_con 被标记为软约束,权重为 100。JAMS 自动引入松弛变量,在目标函数中添加惩罚项 100 * sqr(violation),从而允许约束在一定程度上的违反。

软约束的适用场景包括:

  • 目标优先级不同的多目标问题
  • 数据不确定性较高的模型
  • 需要权衡约束违反与目标损失的决策问题
  • 可行性恢复(当原问题不可行时)

 

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)或通过进一步重构求解。

双层规划的主要应用领域包括:

  • Stackelberg 博弈
  • 交通网络设计
  • 能源市场中的定价与投资决策
  • 供应链中的主从决策问题
  • 政府与企业之间的规制博弈

 

5. Variational Inequalities — 变分不等式

变分不等式(Variational Inequality, VI)问题是均衡建模的重要工具。VI 问题的标准形式为:求向量 xK,使得 F(x)·(yx) ≥ 0 对所有 yK 成立。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 问题的典型应用:

  • 交通网络均衡(Wardrop 原理)
  • 经济市场均衡(价格-数量调整)
  • 寡头竞争博弈
  • 空间价格均衡模型

 

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 的应用领域:

  • 多目标能源市场均衡(成本 vs. 排放)
  • 多准则交通网络设计
  • 环境经济中的多目标政策评估
  • 供应链网络中的多目标竞争决策

 

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.info)是 JAMS 求解器的核心配置文件,用于描述模型中的均衡结构、优化目标和约束关系。通过该文件,用户可以以声明式的方式告诉 JAMS 模型中的各个部分应该如何被解释和处理。

 

EMP 信息文件语法

EMP 信息文件支持以下主要指令:

指令 说明 示例
equilibrium 定义多主体均衡问题(Nash 均衡) equilibrium
  max obj x eq1
bilevel 定义双层规划问题 bilevel
  max obj_up x eq_up
  max obj_lo y eq_lo
vi 定义变分不等式 vi Fx x
dualvar 为约束指定对偶变量 dualvar lambda eq1
min / max 定义单主体优化(最小化/最大化) min obj x eq1 eq2
soft 将约束标记为软约束 soft con1 penalty 100
complementary 定义互补性条件 complementary
  eq1 var1
disjunction 定义析取约束 disjunction
  eq1 var1
  eq2 var2
extendednlp 定义扩展 NLP 问题 extendednlp
  min obj x eq1
  complementary comp .
seq 定义顺序(字典序)多目标优化 seq obj1 obj2 min x eq1
randvar 定义随机变量(用于随机规划扩展) randvar x normal 0 1

 

EMP 信息文件使用流程

  1. 在 GAMS 模型中定义变量、方程和约束。
  2. 创建 EMP 信息文件,写入均衡/优化结构声明。
  3. 将模型类型设置为 emp
  4. 调用 solve <model> using emp;
  5. JAMS 自动读取 emp.info,执行重构,调用底层求解器。

 

高级配置选项

JAMS 提供了若干求解器选项,可通过 jams.opt 文件配置:

* 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 自动将整个系统重构为 MCP 问题并求解均衡价格

 

总结

JAMS 是 GAMS EMP 框架的核心求解器,为处理复杂的均衡问题和互补性问题提供了强大的工具。通过 EMP 信息文件的高级声明式语法,用户无需手动推导 KKT 条件或设计复杂的重构策略,即可高效构建和求解各类均衡模型。

JAMS 的核心优势在于:

  • 统一框架:在同一模型语言中定义优化、均衡和互补性问题
  • 自动重构:将高级 EMP 模型自动转化为标准数学规划形式
  • 灵活扩展:支持软约束、析取规划、多目标、双层规划等高级特性
  • 求解器协同:底层可灵活调用 CONOPT、PATH、CPLEX、GUROBI 等求解器

 

 


 

在线留言

尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

400-621-1085

(节假日期间办公室座机如无人接听,请选择其他联系方式,感谢理解!祝您节日快乐!)

 

联系我们 快速链接 相关产品 上海卡贝信息技术有限公司

©2025  上海卡贝信息技术有限公司

产品中心

下载中心

站点地图

隐私政策

 

销售QQ咨询

产品QQ咨询

淘宝店铺

 

GAMS:概述

最近更新

相关文档

下载试用

购买咨询

Berkeley Madonna

iThink

Stella Architect

IBM SPSS Modeler

DecisionTools Suite

NeuralTools

Frontier Analyst

Vensim

RISKOptimizer

PrecisionTree

LINGO

LINDO API

What'sBest!

@RISK

BARON

BayesiaLab

Oracle Crystal Ball

GEMPACK

GTAP Database

TreeAge