前沿的建模系统
专注建模
GAMS允许用户在某种程度上,用跟数学描述非常相似的方式来制定数学模型。看一下这些例子就能说明GAMS模型的基本结构和特征以及与数学表达式的关系。GAMS让用户专注建模,通过要求简洁和精确的实体和关系规范,鼓励良好的建模习惯。GAMS语言与通用编程语言形式相似,因此对于有编程经验的人来说是熟悉的。由于模型的制定方式在某种程度上与它的数学描述类似,所以不仅是程序员,实际领域的专家也能理解和维护。GAMS专注于建模并且允许做所有相关的事。
陈述性知识和程序性要素的平衡混合,允许用户在GAMS中构建复杂的算法甚至实现分解方法。尤其是解决异常问题的模型,以及随之而来的性能问题。
设计不一样的规则
我们努力去适应,而非直接拿来。
GAMS专注于其核心竞争力:让用户创建可读性、可维护的模型,用更好的求解方法解决任何问题。开放的体系结构和多个数据接口允许与外部系统无缝通信。
模型、求解器、数据、平台和用户界面都在独立层,便于切换求解器、使用多个数据集、在多个平台运行以及将GAMS整合到现有的应用、结构和工作流中去。
独立的模型和求解器
提供超过25个广泛和多样化的求解器组合,包括所有预期的商业化求解器。
- LP/MIP/QCP/MIQCP: CPLEX, GUROBI, MOSEK, XPRESS
- NLP: CONOPT, IPOPTH, KNITRO, MINOS, SNOPT
- MINLP: ALPHAECP, ANTIGONE, BARON, DICOPT, OQNLP, SBB
- 混合互补问题求解器(MCP)、平衡约束数学规划求解器(MPEC)和约束非线性系统求解器(CNS)
- 免费捆绑到每个GAMS系统中的 (比如 BONMIN (MINLP), CBC (LP, MIP), COUENNE (MINLP), IPOPT (NLP)。教育版还包括了SCIP和SOPLEX。
选择使用的求解器非常简单---只要改变一行代码或者调整一个选项设置就可以了。想要比较求解器的性能或者看有什么改进的可能,也不需要做任何的设置。同样的,模型类型可以轻松切换(比如:线性和非线性),尝试不同的公式也非常的容易。通过使用GAMS,您可以得到一个广泛类型的模型和求解器的环境。
独立的模型和数据
你可以编写独立的模型数据,包括各种不同来源的数据,从ASCII到Excel或者Access 以及其他各种来源。比如使用GDX(GAMS数据交换)文件格式。GDX文件可以保存一个或多个GAMS符号的值,比如集、参数变量和方程。GDX文件可以为GAMS模型准备数据、展示GAMS模型的结果、使用不同的参数为这同一个模型保存结果等。GDX文件不能保存一个模型的公式或者执行语句。GDX文件二进制文件,可在不同平台进行移植。
独立的模型和平台
模型在平台间是完全可移植的---写一次,可以在任意地方运行。
GAMS可以在Windows, Linux, Mac OS X, SOLARIS, Sparc Solaris和 IBM Power AIX上运行。
独立的模型和用户界面
面向对象的GAMA API允许GAMS无缝整合到为交互提供适当类别的应用中。这三个面向对象GAMS API是.NET, Java和Python与.NET framework 4 (Visual Studio 2010)、Java SE 5或更高版本以及Python 3.4, 2.7和2.6。
除了面向对象的GAMA API,还有专家级别(或级别) 的GAMS API,它们的使用要求有高深知识的GAMS组件库。
除了API, GAMS还提供智能链接到应用程序,如MS Excel, MatLab或R。用户可以在这个环境中继续工作,通过一个API就可以访问GAMS所有的优化功能。这就允许应用中的模型数据和结果可以可视化和分析了。
大型、全球用户社区
超过120多个国家的不同领域的跨国公司、学校、研究机构和政府都在使用GAMS,包括能源化工、经济建模、农业规划或制造业。
GAMS求解器
GAMS中包含了多个数学规划模型,下面是每个模型的模型类型和支持平台的简介。
求解器 |
描述 |
|
求解器 |
描述 |
ALPHAECP |
基于扩展平面切割(ECP)方法的MINLP求解器 |
LGO |
全局--局部非线性优化求解套件 |
AMPL |
在AMPL模型系统中使用求解器时与GAMS模型连接 |
LINDO 10.0 |
随机求解器,包括一个无限制版本的LINDOGLOBAL |
ANTIGONE 1.1 |
MINLP确定性全局优化 |
LINDOGLOBAL 10.0 |
成熟全局解决方案的MINLP求解器 |
BARON |
成熟全球解决方案的分支和减少优化向导 |
LINGO |
在LINGO模型系统中使用求解器求解GAMS模型的链接 |
BDMLP |
任意GAMS系统都配备了LP和MIP求解器 |
LOCALSOLVER 6.0 |
混合邻域搜索算法 |
BENCH |
实用方便的GAMS求解器和验证方案 |
LS |
GAMS线性回归求解器 |
BONMIN 1.8 |
COIN-OR MINLP求解器执行各类分支定界和外逼近算法 |
MILES |
MCP求解器 |
CBC 2.9 |
高性能LP/MIP求解器 |
MINOS |
NLP求解器 |
CONOPT 3 |
大型的NLP求解器 |
MOSEK 8 |
大型LP/MIP加锥凸非线性规划系统 |
CONOPT 4 |
大型的NLP求解器 |
MSNLP |
全局优化的多启动方法 |
CONVERT |
将模型转换成其他语言的标量模型的框架 |
NLPEC |
使用其他GAMS NLP求解器把MPEC转换成NLP |
COUENNE 0.5 |
(MI)NLP确定性全局优化 |
OQNLP |
全局优化的多头启动方法 |
CPLEX 12.7 |
高性能LP/MIP求解器 |
OsiCplex |
Bare-Bone与CPLEX连接 |
DE |
产生和解决包括EMP/SP中的随机规划的确定等价 |
OsiGurobi |
Bare-Bone 与Gurobi连接 |
DECIS |
大规模随机规划求解器 |
OsiMosek |
Bare-Bone与 Mosek 连接 |
DICOPT |
求解MINLP模型框架 |
OsiXpress |
Bare-Bone与 Xpress 连接 |
EXAMINER |
检查解点并评估其优点的工具 |
PATHNLP |
凸面问题的大规模NLP求解器 |
GAMSCHK |
GAMS求解线性规划问题时对结构和解决方案属性的检查系统 |
PATH |
大规模MCP求解器 |
GLOMIQO 2.3 |
混合整数二次模型分支定界全局优化 |
PYOMO |
在PYOMO模型系统中使用求解器求解GAMS模型的链接 |
GUROBI 7.0 |
高性能LP/MIP求解器 |
SBB |
求解MINLP模型的分支定界算法 |
GUSS |
有效解决多个相关模型实例的框架(收集更新分散的求解方案) |
SCIP 3.2 |
高性能约束整数规划求解器 |
IPOPT 3.12 |
大规模非线性规划的内点优化算法 |
SNOPT |
基于NLP求解器的大规模SQP算法 |
JAMS |
扩展数学规划求解器(包括LogMIP) |
SOPLEX 2.2 |
高性能LP求解器 |
KESTREL |
本地GAMS系统使用远程NEOS求解器框架 |
XA |
大规模LP/MIP求解器 |
KNITRO 10.0 |
大型NLP求解器 |
XPRESS 28.01 |
高性能LP/MIP求解器 |
示例:
从著名的1963书(由GeorgeDantzig编写)中提取的一个运输问题,用来描述GAMS的有效性.这个模型只是模型库中的部分,模型库中还包含了大量的完整GAMS模型.
支持模型的类型:
GAMS模型类型包括LP,MIP和NLPs的不同形式.这里列出了GAMS支持的所有的模型类型.
GAMS的发展背景
GAMS是"GeneralAlgebraicModelingSystem" (一般性代数仿真系统)的缩写,较早是由美国的世界银行(WorldBank) 的Meeraus和Brooke[Brooke,KendrickmandMeeraus,1992]所发展。"GAMS"事实上并不代 表任何更佳化数值算法,而只是一个高级语言的使用者接口,利用GAMS可以很容易建立、修改、除错你的更佳化模型输入文件,而输入档经过编译后,成为 较低阶的更佳化数值算法程序所能接受的格式,再加以执行并写出输出档。
数值算法方面,对线性 与非线性规划问题,GAMS使用由新南韦尔斯大学的Murtagh、及史丹福大学的Gill、Marray、Saunders、Wright等人所 发展的MINOS[MurtaghandSaunders,1983]算法。MINOS是"ModularIn-coreNon- linearOptimizationSystem"的缩写,这个算法综合了缩减梯度法和准牛顿法,是专门为大型、复杂的线性与非线性问题设计的算 法。对混合整数规划问题,则采用亚历桑那大学的Marsten及巴尔第摩大学的Singhal[1987]共同发展 的ZOOM(Zero/OneOptimizationMethod)算法。
GAMS使用范例说明
如 前所述,GAMS本身有非常完整的英文版使用者手册,GAMS的计算机软件中也附带了许多学习范例的档案。这里所作的GAMS使用范例说明,目的 绝非在取代原版的使用者手册,而是要配合本课程说明的形式,重新编写使用范例输入文件,使读者能很快的进入情况,了解其使用程 序。
GAMS的操作大抵可分为三个步骤:建立GAMS输入文件,执行GAMS程序,检视GAMS输出档内容。