1,模型的分类
GAMS可以建立三种类型的模型;分别为
优化模型(LP,NLP,DNLP,QCP等) ;
约束性非线性系统(CNS)
混合互补问题(MCP)
2,模型声明和定义语法
语法:
Model Modelname optional explanatory text / model contents /;
其中:model contets 的内容可以分为如下
最常见的, /all/
Model warehousel Warehouse location model /all/;
方程名称
Model warehousel2 Warehouse location model
/tcosteq,supplyeq,demandeq,balance,capacity,configure/;
包含模型
Model one first model / e1,e2,e3 /
two second model that nests first / one, e4 /
three third model that nests first and second / two, e5 /;
3,solve语句
**GAMS并不直接求解你的问题,而是把问题的定义传给一些独立的求解器。
语法:
Solve model name maximizing var name using model type ;
Solve model name minimizing var name using model type ;
Solve model name using model type maximizing var name ;
Solve model name using model type minimizing var name ;
4 有多个solve语句的程序
一个gams文件,可以包含多个solve语句,用于对大型复杂的问题进行求解或者对某个参数进行灵敏度分析。
4.1一个简单的形式:文件中建立3个模型,并用3个solve语句进行求解。
4.2 灵敏度分析
为分析,负荷大小对机组出力的灵敏度分析
loop(counter,
load = sum(gen,data(gen,'Pmin'))+
((ord(counter)-1)/(card(counter)-1))*sum(gen,data(gen,'Pmax')-data(gen,'Pmin')) ;
solve ECD us qcp min of;
repGen(counter,gen) = P.l(gen);
report(counter,'OF') = of.l;
report(counter,'load') = load;
);
4.3 帕累托最优
Loop(loadcounter,
load = 350+ord(loadcounter)*50;
solve END us qcp min TC;
report(loadcounter ,'MAXTE') = TE.l;
report(loadcounter,'MINTC')= TC.l;
solve END us qcp min TE;
report(loadcounter,'MINTE') = TE.l;
report(loadcounter,'MAXTC')= TC.l;
*内层循环
loop ( counter ,
Elim = (report(loadcounter,'MAXTE')-report(loadcounter,'MINTE'))*((ord(counter)-1)/(card(counter)-1))+report(loadcounter,'MINTE');
TE.up = Elim;
solve END us qcp min TC;
rep(loadcounter,counter,'TC') = TC.l;
rep(loadcounter,counter,'TE') = TE.l;
rep2(loadcounter,counter,gen) = P.l(gen);
);
*****************重点关注,内层循环结束后,在返回外层循环的时候,需要计算TE,而内层循环将TE.up 固定,
TE.up = inf;
);
display rep,rep2;
4.4 非标准算法的迭代求解
将一个大问题,分解成小问题。
小问题的求解结果,之间相互通信
最终解决大问题
至此,GAMS编程的基本数据结构,集合,参数,变量,方程,模型都已经介绍完毕,后边将介绍,一些常用的逻辑表达,美元操作符等内容。
————————————————
原文链接:https://blog.csdn.net/qq_34194377/article/details/105361600
GAMS可以建立三种类型的模型;分别为
优化模型(LP,NLP,DNLP,QCP等) ;
约束性非线性系统(CNS)
混合互补问题(MCP)
2,模型声明和定义语法
语法:
Model Modelname optional explanatory text / model contents /;
其中:model contets 的内容可以分为如下
最常见的, /all/
Model warehousel Warehouse location model /all/;
方程名称
Model warehousel2 Warehouse location model
/tcosteq,supplyeq,demandeq,balance,capacity,configure/;
包含模型
Model one first model / e1,e2,e3 /
two second model that nests first / one, e4 /
three third model that nests first and second / two, e5 /;
3,solve语句
**GAMS并不直接求解你的问题,而是把问题的定义传给一些独立的求解器。
语法:
Solve model name maximizing var name using model type ;
Solve model name minimizing var name using model type ;
Solve model name using model type maximizing var name ;
Solve model name using model type minimizing var name ;
4 有多个solve语句的程序
一个gams文件,可以包含多个solve语句,用于对大型复杂的问题进行求解或者对某个参数进行灵敏度分析。
4.1一个简单的形式:文件中建立3个模型,并用3个solve语句进行求解。
4.2 灵敏度分析
为分析,负荷大小对机组出力的灵敏度分析
loop(counter,
load = sum(gen,data(gen,'Pmin'))+
((ord(counter)-1)/(card(counter)-1))*sum(gen,data(gen,'Pmax')-data(gen,'Pmin')) ;
solve ECD us qcp min of;
repGen(counter,gen) = P.l(gen);
report(counter,'OF') = of.l;
report(counter,'load') = load;
);
4.3 帕累托最优
Loop(loadcounter,
load = 350+ord(loadcounter)*50;
solve END us qcp min TC;
report(loadcounter ,'MAXTE') = TE.l;
report(loadcounter,'MINTC')= TC.l;
solve END us qcp min TE;
report(loadcounter,'MINTE') = TE.l;
report(loadcounter,'MAXTC')= TC.l;
*内层循环
loop ( counter ,
Elim = (report(loadcounter,'MAXTE')-report(loadcounter,'MINTE'))*((ord(counter)-1)/(card(counter)-1))+report(loadcounter,'MINTE');
TE.up = Elim;
solve END us qcp min TC;
rep(loadcounter,counter,'TC') = TC.l;
rep(loadcounter,counter,'TE') = TE.l;
rep2(loadcounter,counter,gen) = P.l(gen);
);
*****************重点关注,内层循环结束后,在返回外层循环的时候,需要计算TE,而内层循环将TE.up 固定,
TE.up = inf;
);
display rep,rep2;
4.4 非标准算法的迭代求解
将一个大问题,分解成小问题。
小问题的求解结果,之间相互通信
最终解决大问题
至此,GAMS编程的基本数据结构,集合,参数,变量,方程,模型都已经介绍完毕,后边将介绍,一些常用的逻辑表达,美元操作符等内容。
————————————————
原文链接:https://blog.csdn.net/qq_34194377/article/details/105361600