语法

基本语法

  • 变量不区分大小写
  • 语句以分号结尾
  • 以感叹号!开头写注释,同样需要分号结尾
  • 系统默认变量非负,除非用@free/@sub/@slb函数另行说明
  • lingo一次只能输出一组解,要检验是否有其他解,加额外的约束

Lingo程序结构

1
2
3
4
5
6
7
8
MODEL:
SETS:定义集合和属性,即变量结构
ENDSETS
DATA:声明常量, 属性=常数列表
ENDDATA
写目标函数:max=...../min=....
约束条件
END

集合sets和属性的概念

QU/1,2,3/:x1,x2,x3,x4;/1..3/
QU集合有三个元素,1~3每个元素都有x1~x4四个属性变量,另外x1~x4也都是大小为3的数组。
集合就是一维数组,定义二维数组/矩阵:set3(set1,set2),注意是括号不是/../

函数

集合循环函数

FOR、MAX、MIN、SUM、PROD

  • @SUM(setname(i)|对i 的约束 : x(i)表达式)
    若集合中所有元素都要进行求和,则可以省略下标
  • @FOR(setname(i)|对i 的约束 : x(i)表达式)
    若集合中所有元素相同,则可以省略下标
  • 注:@SUM是遍历属性(横向),@FOR是遍历集合(纵向),遍历的方向不同
  • @PROD(s:e) 对集合s中的每个成员,分别得到 表达式e 的值,然后返回所有这些值的乘积

其他函数

lingo中函数都以@开头

  • 限定取整数:@gin(x)
  • 0/1变量:@bin(x)
  • @text(‘文件路径’)=’X为’x 输出集或属性的所有值 写在data块中,在model所有操作执行完后才执行
  • @rand(seed) 产生0~1之间的随机数,seed为种子,0~1随便取

模型类型

LP 线性规划
ILP 整数线性规划
NLP 非线性规划
INLP 整数非线性规划
MILP 混合整数线性规划
IP 二次规划
IQP 整数二次规划


Post Date: 2018-01-20

版权声明: 本文为原创文章,转载请注明出处