Lingo学习笔记

摘要

最近因为有需求,学习了一下Lingo,记录一下看着觉得挺不错的几个教程,写下了几个需要注意的点。

先说结论

总的来说,Lingo有如下的优点:

  • Lingo不是像代码一样顺序执行的,只需要把限制条件写成方程,丢进去就完事了,比较方便,不用像Matlab一样还要考虑执行顺序,甚至还要把式子转成矩阵才能丢进求解函数里
  • Lingo会自动判断你的问题的类型,使用对应的求解器,比较智能。如果没有选择你想要的求解器,那么是因为限制条件没有写够
  • 所以非常适合当一个高级的计算器,适合数学建模使用

Lingo也有如下的缺点:

  • 极其傻逼的IDE,连自动缩进都没有,要手动打
  • 运行的时候竟然不会自动保存,如果运行炸了你的代码就没了
  • 语法高亮有bug,输入中文会导致高亮出bug
  • vscode和sublime中并没有相关插件,所以想用其他IDE也比较困难……

还算不错的教程

https://wenku.baidu.com/view/ac16f4a70722192e4536f687.html

https://wenku.baidu.com/view/2685081ecc17552707220890.html

https://blog.csdn.net/breeze_blows/article/details/75332638

【重要】https://www.bilibili.com/video/BV1VE411J78n?spm_id_from=333.788.b_765f64657363.1

基础语法

Lingo不区分大小写

注释以感叹号!开头,以分号;结尾

每句代码以分号结尾

乘号不可省略

对空格不敏感

默认约定

默认所有变量都是非负数,除非特殊声明@free(x)

Lingo只能用来求解单目标线性规划,如果有多目标需求,必须转化为但目标,最后的目标用 max = ……或者min = ……表示

Lingo不是按顺序执行代码的

Lingo中只有三种关系运算符=>=<=,并没有<>,即使出现了,也视为>=<=

求解器

见文档第51页

LP(连续线性规划):目标和约束均为线性函数

NLP(非线性规划):目标和约束中存在非线性函数

QP(二次规划):目标为二次函数,约束为线性

IP(整数规划):决策变量(全部或部分为证书)

ILP(整数线性规划)

INLP(整数非线性规划)

PIP(纯整数规划)

MIP(混合整数规划)

ZOP(01线性规划)

PILP(纯整数线性规划)

PIQP(纯整数二次规划)