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