GAMS教程 0:GAM介绍


GAMS官网

GAMS教程 0:GAMS介绍

1. 前言

这学期在UW-Madison交流,选的课程中有一门课是CS 524:Introduction to Optimization。

我本来以为这门课程会讲优化中的一些算法,例如:单纯形法、匈牙利算法等等。结果没想到,不是这门课,而是CS 7xx的一门课才会讲解这些算法,CS 524这门课的授课目标就是让学生能够从现实问题中抽象出来一个优化模型,而后通过GAMS去求解这个优化问题。

因此,CS 524这门课的授课目标就包含两部分:

  • 介绍GAMS
  • 介绍常见的模型以及相应的GAMS求解

因此,学习这门课就得学习GAMS这个软件的用法。而且我自己在学习的时候确实发现GAMS这个软件挺有用的,所有就准备写个系列专栏记录下来。一方面是作为笔记,方便以后复习,另一个就是当做GAMS的中文学习资源,分享在互联网上。

2. GAMS介绍

A. 概述

GAMS全称The General Algebraic Modeling System ,是一款数学规划和优化的高级建模系统。

简单来说:

  • GAMS就是一个软件,我们按照GAMS软件规定的语法把我们的优化问题描述出来之后,就可以利用GAMS这个软件进行求解。
  • 对应的描述优化问题的语言称为GAMS语言,一般在不做特殊强调的情况下,GAMS既可以指代GAMS软件,又可以指代GAMS语言。具体指代的对象视上下文而定
  • 使用GAMS程序规定的语法写成的、描述、求解优化问题的文件称为GAMS程序,GAMS程序文件的后缀为.gams

这样讲可能还是比较抽象,所以下面举一个使用GAMS求解规划问题的例子

GAMS软件、GAMS程序和GAMS语法

B. 真实问题:Top Brass 问题

Top Brass Trophy Company是一家专门生产奖杯的公司,这家公司生产两种奖杯:

  • 足球奖杯(Soccer)
  • 橄榄球奖杯(Football)

卖出一个橄榄球奖杯将会获得$12的利润,而卖出一个足球奖杯将会获得$9元的利润。而生产一个奖杯,两种奖杯分别需要消耗:

  • 木质底座:橄榄球奖杯需要4平方英寸大小的木板,足球奖杯需要2平方英尺的奖杯
  • 奖杯体:各消耗一个
  • 顶端的标志物:橄榄球顶端有一个铜制橄榄球,而足球奖杯顶端有一个铜制足球。

假设目前库存的原材料为:

  • 1000个黄铜橄榄球
  • 1500个黄铜足球
  • 1750个奖杯体
  • 4900平方英寸的木板

假设制作的所有奖杯都能够售出,那么Top Brass Trophy Company能够获得的最大利润是多少?

制作所需的材料表

库存的原材料

设生产橄榄球和足球分别为$f$和$s$个,上面的这个优化问题的数学语言描述是:

手算求解画出的可行域如下

可行域

然后通过做平行线,得到的解为

手算求解

C. GAMS语言描述

使用GAMS语言描述上述优化问题的程序如下(文件名为topbrass1.gams

// topbrass1.gams
$title Top Brass (LP) Example 5.1 of Rardin (1998)

free variable p "total profit";

positive variables
f "football trophies",
s "soccer trophies";

equations
obj    "max total profit",
foot   "brass footballs",
socc   "brass soccer balls",
plaq   "brass plaques",
wood   "bdft wood";

obj..
p =e= 12*f + 9*s;

foot..
f =l= 1000;

socc..
s =l= 1500;

plaq..
f + s =l= 1750;

wood..
4*f +2*s =l= 4800;

model topbrass /all/;

solve topbrass using lp maximizing p;

scalar sst, mst;
sst = topbrass.solvestat;
mst = topbrass.modelstat;

display sst,mst;

D. GAMS软件求解

接下来我们使用GAMS软件求解上述程序

求解后:

  • 左侧的面板显示了所有的文件,其中topbrass1.gams是源程序,topbrass1.lst是当前优化问题求解的结果
  • 中间的面板显示了选中的文件,这里是打开了topbrass1.gams源程序
  • 右侧的面板显示了求解过程中求解器输出的log信息

image-20221012221110703

打开topbrass1.lst查看求解的结果,会发现中间的面板被分成两部分,左侧显示了当前list文件的结构,右边显示了list文件的内容。通过点击左侧lst文件的结构就可以实现快速跳转

image-20221012221602685

我们直接跳转到最后去查看求解的结果。通过点击左侧的SolVAR -- > p就可以直接看到最后的结果,利润最大为$17700

image-20221012221751253

E. 总结

通过上面的例子,我们其实发现GAMS其实并不是单一的软件或者一门语言,相反,GAMS是求解软件 + 语言等等在内的一个集成开发环境,其目的就在于方便用户求解优化问题。

3. 后续

本节介绍了什么是GAMS,并且通过举例具体得解释了GAMS。从下一讲开始,我们就讲集中讲解GAMS的语法。


文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录