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进行模型的编写及求解已完成。

【整理不易,转载请注明出处和相关链接,否则必究!】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模----图与网络模型

目录 一.图的基本概念与数据结构 1.基本概念 2.图与网络的数据结构 1.邻接矩阵表示法 2.关联矩阵 3.Matlab工具箱简介 1.图的生成 4.问题讨论 1.最短路问题 2.最小生成树问题 一.图的基本概念与数据结构 1.基本概念 点对应于研究对象,根据关系将一些点对应相…

干货推荐 :大模型、AI经济和AI基础设施

‍大家好,我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会,把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容,从相对抽…

干货 | 赵亚雄:大模型、AI经济和AI基础设施

大家好,我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会,把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容,从相对抽象…

chatgpt赋能python:Python动画制作:一场令人惊叹的视觉盛宴

Python 动画制作:一场令人惊叹的视觉盛宴 随着技术的进步,越来越多的设计师和开发者开始使用Python来制作动画。Python是一种富有表现力的编程语言,它的简洁性和可读性使它成为动画制作的首选。 动画制作的基础知识 在开始使用Python来制作…

chatgpt赋能python:如何使用Python制作动画?

如何使用Python制作动画? Python是一种高级编程语言,被广泛应用于各种领域,包括动画制作。Python的简洁性和强大的功能使得它成为一个很好的选择来制作动画。在这篇文章中,我将向您介绍使用Python如何制作动画。 第一步&#xf…

chatgpt赋能python:Python制作动画,让编程更生动

Python 制作动画,让编程更生动 Python 是一种强大的编程语言,以其简单易学和灵活多变闻名。除了在数据分析和机器学习领域得到广泛应用外,Python 在制作动画方面也有独特的优势,这一点往往会被忽视。 Python 制作动画能够让编程…

chatgpt赋能python:Python动画制作入门指南

Python 动画制作入门指南 如果你想为你的网站或者应用程序增加一些吸引人的动画效果,Python 可以成为非常强大的工具。Python 有很多可以用来制作动画的库和工具,本文将为大家介绍一些常用的方法,并给出一些简单易懂的例子。 1. 利用 Pygam…

Spring Security 保姆级教程!40000字!

大家好,我是老赵 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&…

Android-换个思路实现H5唤醒App并跳转到指定页面

一、H5如何唤醒App H5唤醒App有多种方式,但一般前端为了同时兼容Android和iOS会采用URL Scheme的形式,下面就重点介绍这种方式。 一个URL Scheme是由以下部分组成的: [scheme]://[host]:[port][path]?[参数] 说明以及举例 scheme是和前端商量好的&a…

《低代码指南》——维格云低代码个人设置

目录 1. 简介 1.1 功能简介 1.2 设置内容 1.3 预期效果 2. 详细内容 2.1 基本信息 2.2 账号安全 1. 简介 1.1 功能简介 个人设置是对个人信息的基本设置。管理员及成员可以通过「账户中心 >> 个人设置」修改个人信息。 1.2 设置内容 个人设置里包括基本信息、账…

chatgpt赋能python:Python虚拟环境安装和配置

Python虚拟环境安装和配置 介绍 Python虚拟环境是一种将Python解释器及其相关依赖包隔离开的机制,它使得我们可以在同一计算机上同时安装多个Python版本,并且每个版本可以拥有自己独立的第三方库。 安装 Python自带的venv模块可以用来创建和管理虚拟…

守护进程和后台进程的理解

关于守护进程和后台进程, 一直以为是一个东西。然而并不是。 概念 先看下 chatGPT上对二者的描述: 如何创建守护进程 通常情况下,守护进程的父进程是init进程(PID为1)。在类Unix系统中,init进程是系统…

chatgpt赋能python:Python拦截手机短信——探索安全应用的新契机

Python拦截手机短信——探索安全应用的新契机 短信成为了我们日常生活中不可或缺的通信手段之一。但是,你是否曾想过,自己的短信是否安全?有没有人会窃取你的短信内容?Python提供了一种新的安全保障方法,就是拦截手机…

php限制访问次数,api接口限流(限制请求次数)

有时候我们需要给我们写的接口来定义请求限制次数(限流) 如多长时间之内只能请求多少次。这样可以防止某些恶意用户一直请求我们的接口 给服务器减轻压力。 应用场景:app端 用户收藏文章 取消收藏文章(某些恶意用户一直在app端重复点击收藏或取消收藏 这样对我们的数…

ChatGPT冷观察:没有大模型的土壤,开不出ChatBot的花

文|智能相对论 作者|叶远风 谁在跟风,谁又有真本事能做出中国版的对标产品来? 这恐怕是ChatGPT这股热潮以来,关心中国AI发展的业界人士最想问的问题。 或者说,在中国人工智能不落后于全世界的当下,业界也在普遍渴望一个…

钉钉PC端聊天中分享的网址生成卡片

前言 卡片化可以方便用户更加简单直接的获取到你网页当中的内容&#xff0c;吸引用户点击进去查看更详细的信息 实现 方式一&#xff1a; 通过设置页面的<meta>标签去获取&#xff1a; <head><meta charset"UTF-8"><meta name"viewpo…

钉钉创建群机器人

1、在对应群&#xff0c;点击右上角设置按钮&#xff1a; 2、点击群智能助手&#xff1a; 3、点击 添加机器人&#xff1a; 4、选择添加 自定义机器人&#xff1a; 5、点击 添加&#xff1a; 6、根据实际情况 选择设置类型&#xff1a; 7、复制得到对应的token值&a…

钉钉群机器人接入

内容摘要 1.简单接入群机器人&#xff0c;主要用于在群里发送通知信息 2.官方API文档&#xff1a;什么是机器人 - 钉钉开放平台 1.创建一个钉钉群&#xff0c;按照下面步骤添加自定义机器人&#xff0c;设置时选择“加签”&#xff0c;创建好之后会得到机器人的webhook 2.机…

钉钉机器人发送卡片消息

1.打开钉钉开放平台&#xff1a;https://open.dingtalk.com/ 2.登陆&#xff08;需要管理员身份&#xff09; 3.开发者后台——创建应用内机器人 4.获得AppKey和AppSecret&#xff0c;用于获取access_token 具体操作官方文档&#xff1a;https://open.dingtalk.com/document/o…

钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 前…