GAMS模型编写与求解(入门)
GAMS模型编写与求解(入门)
- 背景
- 1 编写流程
- 1.1 集合声明
- 1.2 参数赋值
- 1.2.1 标量声明
- 1.2.2 一维向量声明
- 1.2.3 二维向量声明
- 1.3 变量声明
- 1.3.1 变量关键字
- 1.3.2 举例
- 1.4 约束
- 1.4.1 约束声明
- 1.4.2 约束编写
- 1.5 模型建立及求解说明
- 1.6 模型代码
- 2 特别注意点
- 2.1 *和$的使用
- 2.1.1 *的使用
- 2.1.2 $的使用
- 2.2 下标有限制范围的约束表达
- 2.2.1 举例1
- 2.2.2 举例2
- 2.2.3 举例3
- 3 模型求解
- 3.1 解决方案
- 3.2 求解结果
- 4 总结
背景
完成软件的安装后,需要进行模型的编写。本篇将结合自己的学习心得,介绍一个简单模型的编写。
1 编写流程
参考材料链接link,材料里面包括“软件介绍、基本语法及案例分析”,提供的帮助很大;此处提出一个百度云链接link,提取码:b8wg。
下面将结合材料中提供的“案例二”,进行简明扼要地讲述,具体语法细节可参考上述材料。
1.1 集合声明
结构注意点:Sets是关键字,引领集合的声明;最后一个集合声明过后需要有分号结束,但集合之间不要分号。
语法注意点:i是集合名;goods是对集合的一个解释,可有可无;/ /之间内容是属性,其中BRD和MIL是属性名,中间以“,”隔开,;bread和milk是对属性的一个解释,可有可无。
Sets
i goods /BRD bread, MLK milk/
h factors /CAP capital, LAB labor/
;
1.2 参数赋值
1.2.1 标量声明
结构注意点:Scalars是关键字,引领标量的赋值;最后一个标量赋值过后需要有分号结束,但标量之间不要分号。
语法注意点:M1是标量名;maximum value是对标量的一个解释,可有可无;/ /之间内容是标量的数值。
PS:代码仅是举例方便理解,非本模型内容。
Scalars
M1 maximum value /1E8/
M2 minimum value /1/
;
1.2.2 一维向量声明
结构注意点:Parameters是关键字,引领一维向量的赋值;最后一个一维向量赋值过后需要有分号结束,但一维向量之间不要分号。
语法注意点:alpha是一维向量名;(i)是一维向量的下标;xxx是对一维向量的一个解释,可有可无;/ /之间内容是向量值,中间以“,”隔开,其中BRD和MIL是属性名,对应着此前声明的 i 集合。
Parameters
alpha(i) xxx /BRD 0.2, MLK 0.8/
px(i) xxx /BRD 1, MLK 2/
pz(h) /CAP 2, LAB 1/
z(h) /CAP 10, LAB 20/
;
1.2.3 二维向量声明
结构注意点:Table是关键字,引领二维向量的赋值;二维向量暂时知道的是仅能一个一个声明;声明完后,需要以分号结尾。
语法注意点:A是二维向量名;xxx是对二维向量的一个解释,可有可无;G1 F1等是向量的下标,需要有相应的集合声明以对应。
PS:代码仅是举例方便理解,非本模型内容。
Table A xxxF1 F2 F3 F4 F5
G1 1 2 3 4 5
G2 6 7 8 9 10
G3 11 12 13 14 15
G4 16 17 18 19 20 ;
1.3 变量声明
注意:目标值只能设置成Free类型。
1.3.1 变量关键字
1.3.2 举例
声明的是变量UU和正变量X(i)。
Variable
UUPositive Variable
X(i)
1.4 约束
1.4.1 约束声明
在编写约束之前,需要声明约束。
Equations是关键字,引领约束的声明;eqt是约束名称,ffggf是对eqt的描述,可有可无。
Equations
eqt ffggf
obj fgjg
;
1.4.2 约束编写
约束编写时,格式如下。编写中所需要的函数以及符号如下图所示。注:每个约束编写完成后均需要以分号结尾。
eqt.. sum(i, px(i)*X(i)) =e= sum(h, pz(h)*z(h));
obj.. UU =e= prod(i, X(i)**alpha(i));
1.5 模型建立及求解说明
分别通过如下两句语言实现。分别表示“将所建立的模型命名为HHmax”、“通过使用NLP模型求解器求解HHmax模型以得到UU的最大值”。
*Defining the model
Model HHmax /all/;*Sloving the model
Solve HHmax maximazing UU using NLP;
1.6 模型代码
* Definition of the Index Sets
Sets
i goods /BRD bread, MLK milk/
h factors /CAP capital, LAB labor/
;* Definition of Parameters
Parameters
alpha(i) /BRD 0.2, MLK 0.8/
px(i) /BRD 1, MLK 2/
pz(h) /CAP 2, LAB 1/
z(h) /CAP 10, LAB 20/
;* Definition of variables
Positive Variables
X(i)
;Variable
UU
;Equations
eqt ffggf
obj fgjg
;*Specification of equations
eqt.. sum(i, px(i)*X(i)) =e= sum(h, pz(h)*z(h));
obj.. UU =e= prod(i, X(i)**alpha(i));*Defining the model
Model HHmax /all/;*Sloving the model
Solve HHmax maximazing UU using NLP;
2 特别注意点
2.1 *和$的使用
2.1.1 *的使用
(1)以下两段代码等价,大家可以看到使用*的方便之处,具体可参考上面提供的文档。
PS:代码仅是举例方便理解,非本模型内容。
I GG /I1,I2,I3,I4,I5/
I GG /I1*I5/
(2)星号还有注释作用,可以看到1.6部分中以 ‘*’开头的语句,均为备注语句。
2.1.2 $的使用
$用于条件语句的表达。如下的语句表示“a在b大于1.5条件成立的情况下等于2”,如果条件不满足,则不赋值。
PS:代码仅是举例方便理解,非本模型内容。
a$(b>1.5)=2;
2.2 下标有限制范围的约束表达
2.2.1 举例1
注意:若约束表示多个式子,比如下图,其实这个约束表示K*I个式子,所以在声明时需要附上(K,I)。
* Definition of variables
Equations
Con1(K,I) for example
;
*Specification of equations
Con1(K,I).. S(K,I)=e=W(K,I);
2.2.2 举例2
注意:若有加和符号,则用sum语句,格式为sum((下标),变量)。
* Definition of variables
Equations
Con1 for example
;
*Specification of equations
Con1.. S=e=sum((K,I),W(K,I));
2.2.3 举例3
特别注意:对于这种有多个下标,但是只有一个下标有范围的,有三个注意事项。
第一个注意事项:类似于2.2.1,在声明时需要附上(K,I);
第二个注意事项:由于i和i1共用同一个集合I,因此需要加上ALIAS,相当于复制I;
第三个注意事项:sum((下标),变量)加和时,需要在下标后附上对i1的限制。
具体见代码。
Set I;
ALIAS(I,IL);
* Definition of variables
Equations
Con1(K,I) for example
;
*Specification of equations
Con1(K,I).. S(K,I)=e=sum((K,IL)$(ord(IL) ge ord(I)),W(K,IL));
此处引出两个额外符号,ord()和ge,其中ord(I)的意思“得到此时的I在集合中的排序”,ge的意思是“大于等于”,因此“ord(IL) ge ord(I)”的意思就是“在集合中,排序大于I的IL”。
3 模型求解
3.1 解决方案
模型的求解当然要利用求解器了(需要购买)。首先通过“File——Options——Slovers”,可以看到自己可使用求解器情况,如下图。“Demo”表示可以使用,“Full”则表示能够完全使用。
对于没有许可证的同学,此处提供一个贴吧里的解决方法,链接link,通过下载链接中的文档,获得许可证,并且在修改完自己系统时间后,通过“File——Options——Licenses”选择许可证,即可使用。(PS:本人未尝试,仅贴出来一种可能的解决方案)。
3.2 求解结果
本文算例求解结果如图所示,x(1)=8,x(2)=16,目标值UU=13.929。
4 总结
至此,利用GAMS进行模型的编写及求解已完成。
【整理不易,转载请注明出处和相关链接,否则必究!】
GAMS模型编写与求解(入门)相关推荐
- MATLAB编写遗传算法求解vrp问题
MATLAB编写遗传算法求解vrp问题 vrp问题是有载重限制的物流配送线路优化问题,详细可表述为:有1个配送中心,向m个客户点送货,从配送中心出发,货物不足时回配送中心装货,配送完成后回到配送中心. ...
- R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能
R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载.划分数据.并分别构建线性回归模型和广义线性加性模型GAMs.并比较线性模型和GAMs模型的性能 目录
- python网络爬虫的基本步骤-黑客基础 编写Python爬虫入门步骤
原标题:黑客基础 编写Python爬虫入门步骤 信息时代,数据就是宝藏.数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码. 黑客花无涯 带你走进黑客 ...
- 0729------Linux网络编程----------使用 select 、poll 和 epoll 模型 编写客户端程序
1.select 模型 1.1 select 函数原型如下,其中 nfds 表示的描述符的最大值加1(因为这里是左闭右开区间),中间三个参数分别表示要监听的不同类型描述符的集合,timeout用来表示 ...
- Algorithm:数学建模大赛之数学建模基础(经验/技巧)、流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价)、论文写作(意义/摘要/关键词/问题重述和模型假设/建模/文献)之详细攻略
Algorithm:数学建模大赛之数学建模基础(经验/技巧).流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价).论文写作(意义/摘要/关键词/问题重述和模型假设/建模/求解/结论/参考文 ...
- 弹性碰撞后速度方向_找准模型,快速求解碰撞类问题
找准模型,快速求解碰撞类问题 正式开讲之前,扯一会儿废话!很多小伙伴可能根本不会看下去,想想动量守恒,有什么好看的呢?人需要自信,但也不能太自信,有时候,明明大家知识点掌握的都一样,却有人能考高分,而 ...
- python爬虫步骤-黑客基础 编写Python爬虫入门步骤
原标题:黑客基础 编写Python爬虫入门步骤 信息时代,数据就是宝藏.数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码. 黑客花无涯 带你走进黑客 ...
- matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码
双层规划模型的遗传算法求解的Matlab源码 双层规划模型的遗传算法求解的Matlab源码 function [BESTX,BESTY,ALLX,ALLY]=GAU (KU,KD,NU,ND,PmU, ...
- swift android界面,使用 Swift 语言编写 Android 应用入门
原标题:使用 Swift 语言编写 Android 应用入门 Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码.本文解释了如何在你的安卓手机上运行一个简单 ...
最新文章
- vmware克隆centos修改linux mac地址
- 毕业设计-基于SSM实现在线考试及题库管理系统
- REST中的PUT与POST
- 同步IO、异步IO的区别
- STM32 基础系列教程 14 - IIC
- 绝望的力量:美术创作者的晋级之路
- java9默认收集器_Oracle提议将G1作为Java9的默认垃圾收集器
- 让服务器突破性能极限 阿里云神龙论文入选计算机顶会ASPLOS
- order by case when then end
- 《CoderXiaoban》第九次团队作业:Beta冲刺与验收准备1
- CPU cache侧信道攻击
- linux终端快捷键(持续更新)
- 网站标签页如何添加左边的小图标
- 学计算机的 1加1,如何用“一加一等于几”解析人生
- 数据结构应用题大题笔记
- 神鬼世界更新完了为什么显示与服务器断开连接,全新服务器构架 神鬼世界6月23日数据互通公告...
- 神经网络学习(3)————BP神经网络以及python实现
- 美国征信巨头Equifax遭黑客入侵,1.43亿公民身份数据泄漏
- 聚焦行业,2022巨杉客户案例及产品荣获多项殊荣
- 35岁以后软测就没有出路了吗?听听京东10年测开的经验分析