Lingo入门
Lingo使用
Lingo的基本常识
- Lingo 基本界面
- 1.打开lingo后会弹出一个对话框,点击 Cancel 左边 的 Never Register 即可,其余内容用不到。
2.界面自动弹出名为“Lingo Model – Lingo 1”的窗口,用于书写代码。
3.以解方程的题目: x + 1 = 2 x+1=2 x+1=2为例,写完代码后,点击“红色的靶心”运行程序。
首先 Lingo 会弹出一个名为“Solver Status”的对话框,它显示运行时间等信息。读取到运行时间是 0 时 0 分 0 秒,充分证明了 Lingo 的强大之处。
- 1.打开lingo后会弹出一个对话框,点击 Cancel 左边 的 Never Register 即可,其余内容用不到。
Lingo符号
- 使用Lingo求解方程时必须以 ; 结束
- Lingo的所有符号都是英文格式下的符号.
- Lingo的加减乘除分别是+ - * /.
- 乘号不能够省略
- 表示次方,使用 ^ eg:x^2
- lingo 不读取空格
Lingo变量
- Lingo默认变量为大于0
- 若是变量小于0使用函数 @free 使其定义域为R
- Lingo在变量的命名中不区分大小写
- 变量均为字母数字下划线组成,且字母放在首位
Lingo含义
Lingo中运行程序出现的页面含义
-
Solver Status:求解器(求解程序)状态栏
- Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI开头表示PIP)
- State:当前解的状态: “Global Optimum”, “LocalOptimum”, “Feasible”, "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定)
- Object:解的目标函数值
- Infeasibility:当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束)
- Iteration:目前为止的迭代次数
-
Extend Solverstatus:扩展的求解器(求解程序)状态栏
- Solver type:使用的特殊求解程序:
- Bestobj :目前为止找到的可行解的最佳目标函数值
- Objbound:目标函数值的界
- Steps:特殊求解程序当前运行步数:
- Active:有效步数
-
Variables:(变量数量)
- 变量总数(Total)
- 非线性变量数(Nonlinear)
- 整数变量数(Integer)
- Constraints(约束数量)
- 约束总数(Total)
- 非线性约束个数(Nonlinear)
- Nonzeros(非零系数数量)
- 总数(Total)
- 非线性项系数个数(Nonlinear)
-
GeneratorMemory Used(K):(使用内存量)
-
ElapsedRuntime(hh:mm:ss):(求解花费时间)
Lingo问题
- 没有被赋初始值的变量,可能默认不是 0,亦有可能是 1.234568。你可以手动覆盖,问题不大。出现这种情况可能是因为内部实现使用了不同的算法。
- Lingo 中的代码表示的是方程组,这点很重要。不能将计算机语言中的一些默认特性带入 Lingo。比如:Lingo 中不可以 “给同一个变量赋不同的值”。(之所以打双引号是因为 Lingo 中的都是方程,用变量赋值来说,在数学上不准确)
Lingo解决
- 解决线性规划问题的局限性质
- 一个线性规划中只含有一个目标函数。(两个以上的多目标线性规划,Lingo无法直接解) 如果建模同学给了我们多个目标函数,直接告诉他,没办法用 Lingo 求解,需要将多目标线性规划转换成 一个目标,这其实是有方法的。
- 求目标函数的最大值或最小值分别用 max=… 或 min=… 来表示
- Lingo17 注释遇到分号就会终止注释语句,这一点一定要留意 : 不要在 Lingo 的注释语句中 写 matlab 矩阵格式 的矩阵