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(集合名:属性变量表达式)
@sum(jh2(i):z(i)*y(i))//前后下标一致,可以不为i,范围为1~集合长度
@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#(小于等于)
其余常用函数可以自行百度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构