GAMS教程 2:GAMS中的运算符与函数


GAMS用户手册

GAMS教程 2:GAMS中的运算符与函数

GAMS作为一门用于科学家计算的语言,那么常见的求余、指数计算等等都不能少。本文就将介绍GAMS中的运算符、常见的函数。

此外,在常见的函数中有一个特殊的函数ord函数,这个函数非常重要,本文还将讲解这个特殊的函数。

1. GAMS中的运算符

GAMS中常见的运算符

A. 概述

GAMS中的运算符包含两类:

  • 算术运算符(Algebra Operator)
  • 索引运算符(Indexed Operator)

算术运算符指的就是就是一般见到的加减乘除等等运算符,具体来说包括+-*/**。这些运算符我们都这些都不会讲解,直接用就行了,非常简单。

我们真正关注的、具有难度的、需要讲解的就是索引运算符,索引运算符具体来说包含下面的几个

GAMS中的索引运算符

下面将详细讲解索引运算符

B. 索引运算符

所谓索引运算符,值的其实就是循环计算,例如在数学上,我们经常会有下面的表达式

GAMS中实现这些运算的的方式就是通过索引运算符。

GAMS中索引运算符的调用方式如下

indexed_op( (index_list), expression);

其中:

  • index_list指明了需要求和的维度
  • expression指明了需要求和的维度

1 ) sum运算符

sum用于求set indexed expression的累加和

我们下面给出几个数学式的GAMS实现

* Set    i;
* Parameter A(i);
count = sum(i, A(i));
* Set i, j;
* Table B(i,j);
size = sum(i, sum(j, B(i,j)));
* 简化的写法为
size = sum((i,j), B(i,j));
* Set i;
* Parameter C(i), D(i);
production = sum(i, C(i) * D(i));

2 ) prod运算符

prod运算符其实和sum运算符是一样的,只不过从加法变成了乘法,因此略。

3 ) smin运算符

smin运算符用于求一个set indexed expression中的最小值

下面给出几个例子

* Set i;
* Parameter S(i);
x = smin(i, S(i));
* Set i;
* Parameter S(i);
x = smin(i, S(i)**2 + 2*S(i) + 1);

4 ) smax运算符

smax运算符和smin运算符类似,只不过是用于求最大值。故略。

5 ) sand运算符

sand运算符和前面的类似,只不过是求多个值相与的结果。

6 ) sor运算符

sor运算符求多个值相或的结果。

2. GAMS中的函数

GAMS中的函数可以分为两种:

  • 内部函数:GAMS语言本身所支持的函数
  • 外部函数:用户自己自定义的函数

我们这里不讲解外部函数,主要讲解GAMS中的内部函数。

GAMS中的内部函数可以分为五种:

  • 数学函数(Mathematical Functions)
  • 字符串处理函数(String Manipulation Functions)
  • 逻辑函数(Logical Functions)
  • 时间日期函数(Time and Calendar Functions)
  • GAMS系统内置函数(GAMS Utility and Performance Functions)

因为每类函数都很多,所以先对每类函数进行介绍,至于具体的函数等以后用到了再具体介绍。

A. 数学函数(Mathematical Functions)

数学函数顾名思义,就是我们数学中见到的函数,例如:cossin等等

GAMS中支持的数学函数有很多,这里就不一一列举了,具体可以参阅官方手册:https://www.gams.com/40/docs/UG_Parameters.html#UG_Parameters_MathFunctions

GAMS中的数学函数-1

GAMS中的数学函数-2

GAMS中的数学函数-3

GAMS中的数学函数-4

B. 字符串处理函数(String Manipulation Functions)

虽然说字符串处理函数名字是字符串处理函数,但其实从它们的功能上来看更加类似于集合处理函数。

GAMS中的字符串处理函数

card函数

card函数用于返回一个集合中元素的个数

Set i /1, 2, 3, 4, 5/;
Scalar num_i;

num_i = card(i);   * num_i = 5

ord函数

ord函数接受一个集合,返回一个参数。参数中索引的值就是相应的位置。

Set i /a, b, c, d/;
Parameter ord_i(i);

ord_i = ord(i);     * ord_i(i) = /"a" 1, "b" 2, "c" 3, "d" 4/;

C. 逻辑函数(Logical Functions)

GAMS中提供了逻辑函数用于计算逻辑表达式的值。

关于逻辑函数、逻辑表达式具体内容将在下一节进行讲解

GAMS中的逻辑函数

D. 时间日期函数(Time and Calendar Functions)

GAMS中的时间日期处理函数专门用于处理时间和日期的相关内容

GAMS中的时间日期处理函数-1

E. GAMS系统内置函数(GAMS Utility and Performance Functions)

GAMS的系统内置函数主要是用于或许系统一些内置信息,或者设置系统的内置信息。

GAMS的系统内置函数-1

GAMS的系统内置函数-2


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