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   脑子没老子  阅读(412)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示