lingo使用方法

Lingo使用方法

此笔记为边学边写,可能会有较多错误

Lingo编程方式

  • 集合段:定义要用到的集合和变量(类似于其它语言的数组)
  • 数据段:给部分变量赋值
  • 初始段:初始化迭代起始点
  • 计算段:程序运行开始
  • 目标和约束段:编写目标函数和约束条件
    (初始段和计算段不影响结果,lingo不区分大小写)

集合段

一维集合

定义格式:集合名/集合长度/:属性变量

sets:
	jh1/1..3/:x;
	jh2/1..4/:y,z,q,w;
endsets

集合以sets开头endsets结束,有点类似于HTML中的头尾标签

中间的语句每一句以分号结尾

冒号之前相当于声明了一个长度为3的集合的空间但是还没有将这个空间给命名

冒号之后的属性变量是相当于为这个空间命名,但是这个空间只能有一个名字,例如第二行的输出结果就是x1,x2,x3。用此类推,冒号后每一个都代表一个变量的1,2,3,4....

二维集合

定义格式:派生集合名(集合名1,集合名2):属性变量

sets:
ps1(jh1,jh2):m;
endsets

与其他编程语言一样,集合可以是多维的,但是需要提前定义两个一维集合之后拼在一起,有一种矩阵的感觉(行列数与括号中两个集合名决定,集合名1为行数,集合名2为列数)其他与一维集合相同

数据段

简单来说就是给变量赋值的地方

定义方式:以data:开头,enddata结尾。

初始化的值为0.000000

//可以为集合长度为4的变量x赋值
data:
	x=4,5,6;
enddata

一维集合按照顺序赋值

二维集合按照行开始赋值,赋值时尽量写出相应行列的样子

目标和约束段

针对于目标函数和约束条件编写代码

目标基本为max和min关键字

常用函数

求和函数@sum()

定义方式:@sum(集合名:属性变量表达式)
image

@sum(jh2(i):z(i)*y(i))//前后下标一致,可以不为i,范围为1~集合长度

image

@sum(jh1(i):@sum(jh2(j):m(i,j)))<5

类似于循环嵌套,但是注意m后面括号的写法,第一参数为外函数的角标变量,第二参数为内函数的角标变量。相应的求和函数也按照相应的角标变量来求和

//也可以利用派生集合直接求和
@sum(ps1(i,j):m(i,j))<5
循环函数@for()

定义方式:@for(集合名:属性变量表达式)

//每一行都小于10
for(jh1(i):@sum(jh2(j),m(i,j)))<10
限制变量
  • @gin()限制算出来的数只能为整数

定义格式:@gin(要限制的变量)

当x为集合时,不能直接写作gin(x),必须一个一个写出来。或者利用循环函数

@for(jh1(i):@gin(x(i)))
  • @bin()限制变量为0~1

定义格式:@bin(要限制的变量)

关系与逻辑表达式

关系表达式

#and #(与) ,#or#(或),#NOT#(非)

逻辑表达式

#EQ#(等于),#NE#(不等于)

#GT#(大于),#GE#(大于等于)

#LT#(小于),#LE#(小于等于)

image

其余常用函数可以自行百度

posted on 2023-07-02 22:31  脑子没老子  阅读(553)  评论(0)    收藏  举报

导航