Lingo(Linear Interactive and General Optimizer)即”即交互式的线性和通用优化求解器”, 可以用于快速求解各种优化问题(图论问题分分钟解决有木有, Σ( ° △ °|||)︴, 算法竞赛中各种被图论坑!), 语法简洁, 可以直接读取各种数据.
Lingo语法:
1.基本运算符:
算数运算符
针对数值进行操作
- ^ 乘方 - \* 乘 - / 除 - \+ 加 - \- 减/取反
逻辑运算符:
主要用于集循环函数的条件表达式中, 来控制在函数中哪些成员被包含, 哪些被排斥.在创建稀疏集时用在成员资格过滤器中.
- #not# - #eq# - #ne# - #gt# - #ge# - #lt# - #le# - #and# - #or# 助记规律: g - greater , l - less , e - equal , t - than , n - not
关系运算符:
主要用在模型中, 指定一个表达式的左右大小关系, 对模型进行约束. (需注意与逻辑运算符的差别:一个是控制运算过程; 一个是得出运算值)
- = - <= - >= - < - > 由于Lingo不支持严格大于或小于关系运算, < 和 <=, > 和 >= 同效. 想要实现真正的<或>,可以这样: 令A+& <= B, 其中&取一个较小的正数, 使A在取上限的时候可以与B近似的看为相等.
各运算符优先级
优先级 运算符 高 #not# -(取反) 1 ^ 2 * / 3 + - 4 #eq# #ne# #gt# #ge# #lt# #le# 5 #and# #or# 6 低 <= => = 7
2.常用函数:
数学函数
- @abs(x)
- @sin(x)
- @cos(x)
- @tan(x)
- @exp(x)
- @log(x)
- @lgm(x)
- @sign(x)
- @floor(x)
- @smax(x1, x2, … , xn)
- @smin(x1, x2, … , xn)
概率函数
- @pbn(p, n, x)
- @pcx(n, x)
- @peb(a, x)
- @pel(a, x)
- @pfd(n, d, x)
- @pfs(a, x, c)
- @phg(pop, g, n, x)
- @ppl(a, x)
- @pps(a, x)
- @psl(x)
- @psn(x)
- @ptd(n, x)
- @qrand(seed)
- @rand(seed)
变量界定函数
- @bin(x)
- @bnd(L, x, U)
- @free(x)
- @gin(x)
集操作函数
- @in(set_name, primitive_index_1, [, primitive_index_2, …])
- @index([set_name, ]primitive_set_element)
- @wrap(index, limit)
- @size(set_name)
输入输出函数
- @file
- @text
- @ole
- @ranged(variable_or_row_name)
- @rangeu(variable_or_row_name)
- @status()
- @dual
辅助函数
- @if(logical_condition, true_result, false_result)
- @warn(‘text’, logical_condition)
3.代码规范
- 模型以”MODEL: “开始, 以”END “结束 ;
- 每行代码以 ; 结束 ;
- 变量名不区分大小写, 但只能以字母开头, 长度不能超过32 ;
- 变量默认限制为非负, 可用@free(x)函数解除限制 ;
- 表达式"max = … 和 min = …"分别表示求最大值和最小值 ;
- 以 ! 开头代表注释, 同时也要以;结束 ;