GAMS系列分享12—GAMS基础知识——模型和求解

         介绍模型及求解的相关问题

目录

1,模型的分类

2,模型声明和定义语法

3,solve语句

4 有多个solve语句的程序

4.1一个简单的形式:文件中建立3个模型,并用3个solve语句进行求解。

4.2 灵敏度分析

4.3 帕累托最优     

4.4 非标准算法的迭代求解

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编程的基本数据结构,集合,参数,变量,方程,模型都已经介绍完毕,后边将介绍,一些常用的逻辑表达,美元操作符等内容。

 

搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!

搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!

搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!

 

纯手打,有错误的话,请留言交流(*..*)。

你可能感兴趣的:(GAMS基础知识,GAMS,线性代数,算法)