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(纯整数二次规划)