GAMS笔记(持续更新中)

2019-07-23  本文已影响0人  柯西盗耳

1. Display

display命令之后可以跟单个的变量和参数,但是不能直接是算式。
例如下述代码是正确的

scalar x /1/, y /2/;
display x,y;

而下述代码是错误的

scalar x /1/, y /2/;
display x+y;

Error 409: Unrecognizable item - skip to find a new statement

2. 赋值

sets  row            / r1*r10 / ;
parameters  r(row)   /r1*r7 4, r8*r10 5/;

这段代码的意思是,对参数r的第1~7个位置赋值4,而第8 ~10个位置赋值5。
下面的一段代码,结果会是什么呢?

set i / i1*i10 /;
parameter f(i) / i1 1 /
y(i);
y(i)=f(i)$(ord(i)=0);
y(i)=f(i)$(ord(i)=100);
display y;

答案是

y = 0

当索引超过了Set的预设范围时,参数的值默认为0。

3. Equation

在loop循环和if条件语句中,不允许定义equation。

4. 变量和参数的定义

在定义参数和变量时,必须使用一维索引值,不允许使用多维索引值,但是在调用参数和变量时允许使用多维索引。例如下面的定义和使用方法是正确的。

set aij(a,i,j);
parameter lam(a,i,j); %参数定义
lam(aij(a,i,j))=0; %参数赋值

variable x(a,i,j); %变量定义

但是下面的做法是错误的

set aij(a,i,j);
parameter lam(aij(a,i,j)); %错误!
variable x(aij(a,i,j)); %错误!

4. 只运行代码的前半部分

在进行程序调试时,你可能只想运行你代码前面的一部分,而让GAMS忽略后半部分的代码,可以通过在两部分代码中间加入$exit来实现该功能

code lines; % Code you are testing
$exit
code lines; % Code to be neglected
上一篇下一篇

猜你喜欢

热点阅读