GAMS教程 2:GAMS中的运算符与函数
GAMS作为一门用于科学家计算的语言,那么常见的求余、指数计算等等都不能少。本文就将介绍GAMS中的运算符、常见的函数。
此外,在常见的函数中有一个特殊的函数ord
函数,这个函数非常重要,本文还将讲解这个特殊的函数。
1. GAMS中的运算符
A. 概述
GAMS中的运算符包含两类:
- 算术运算符(Algebra Operator)
- 索引运算符(Indexed Operator)
算术运算符指的就是就是一般见到的加减乘除等等运算符,具体来说包括+
、-
、*
、/
、**
。这些运算符我们都这些都不会讲解,直接用就行了,非常简单。
我们真正关注的、具有难度的、需要讲解的就是索引运算符,索引运算符具体来说包含下面的几个
下面将详细讲解索引运算符
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)
数学函数顾名思义,就是我们数学中见到的函数,例如:cos
、sin
等等
GAMS中支持的数学函数有很多,这里就不一一列举了,具体可以参阅官方手册:https://www.gams.com/40/docs/UG_Parameters.html#UG_Parameters_MathFunctions
B. 字符串处理函数(String Manipulation Functions)
虽然说字符串处理函数名字是字符串处理函数,但其实从它们的功能上来看更加类似于集合处理函数。
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中提供了逻辑函数用于计算逻辑表达式的值。
关于逻辑函数、逻辑表达式具体内容将在下一节进行讲解
D. 时间日期函数(Time and Calendar Functions)
GAMS中的时间日期处理函数专门用于处理时间和日期的相关内容
E. GAMS系统内置函数(GAMS Utility and Performance Functions)
GAMS的系统内置函数主要是用于或许系统一些内置信息,或者设置系统的内置信息。