一些语法:
- 变量不区分大小写
- 语句以分号结尾
- 以感叹号!开头写注释,同样需要分号结尾
- 系统默认变量非负,除非用@free/@sub/@slb函数另行说明
- lingo一次只能输出一组解,要检验是否有其他解,加额外的约束
集合sets和属性的概念:
QU/1,2,3/:x1,x2,x3,x4;/1..3/
QU集合有三个元素,1~3每个元素都有x1~x4四个属性变量,另外x1~x4也都是大小为3的数组。
集合就是一维数组,定义二维数组/矩阵:set3(set1,set2) 注意是括号不是/../Lingo程序结构:
1
2
3
4
5
6
7
8MODEL:
SETS:定义集合和属性,即变量结构
ENDSETS
DATA:声明常量, 属性=常数列表
ENDDATA
写目标函数:max=...../min=....
约束条件
END集合循环函数:
FOR、MAX、MIN、SUM、PROD- @SUM(setname(i)|对i 的约束 : x(i)表达式)
若集合中所有元素都要进行求和,则可以省略下标 - @FOR(setname(i)|对i 的约束 : x(i)表达式)
若集合中所有元素相同,则可以省略下标 - 注:@SUM是遍历属性(横向),@FOR是遍历集合(纵向),遍历的方向不同
- @PROD(s:e) 对集合s中的每个成员,分别得到 表达式e 的值,然后返回所有这些值的乘积
- @SUM(setname(i)|对i 的约束 : x(i)表达式)
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
版权声明: 本文为原创文章,转载请注明出处