标题：LINDO
简介
什么是LINDO
在这里有必要先让大家知道什么是运筹学。运筹学是近四十年来发展起来的一门新兴学科。它的目的是  LINDO为行政管理人员在作决策时提供科学的依据。因此，它是实现管理现代化的有力工具。运筹学在生产管理、工程技术、军事作战、科学试验、财政经济以及社会科学中都得到了极为广泛的应用。讲到这里，你已经被运筹学深深吸引了吧，至于你会怎么去学不是我们讨论的问题，在这里我们只说学运筹学要用到的工具。应用运筹学去处理问题有两个重要特征：一是从全局的观点出发；二是通过建立模型如数学模型或模拟模型，对于要求解的问题得到最合理的决策。好了，说到这里，LINDO该出场了，它的作用就是负责把问题的最优决策求出来，省去大量难以想象的人工计算。如果你是运筹学的学习者，你就必须拥有LINDO。
使用领域
已被证实LINDO能在商业、工业、研究和政府等领域发挥巨大作用的具体事务包括：产品分销、成分混合、生产与个人事务安排、存货管理……在这里不一一列举，但可以肯定的是，LINDO可以大展拳脚的领域是多不胜数的。LINDO的主要设计原则是，如果一个用户只是想解决一个简单的问题，就不应该在学习LINDO的基本特性上花费太多的准备成本。例如，某个用户想解决以下这样一个问题：(看懂这个问题需要一定的运筹学知识，下面是一个实际问题的数学模型)
Maximize 2X + 3Y
Subject to
4X + 3Y < 10
3X + 5Y < 12
那么，用户就只需要打开LINDO，然后直接输入以上内容即可。而另一方面，LINDO也可以用来解决一些复杂的二次线性整数规划方面的实际问题。如在大型的机器上，LINDO被用来解决一些拥有超过50,000个约束条件和200,000万个变量的大规模复杂问题。
使用模式
LINDO主要有三个基本使用模式。对于一些中小规模的问题，LINDO只要通过键盘输入就可以方便地实现交互性良好的操作与使用，如输入一个模型是相当简单方便的事情。另外，LINDO也可以对外建文件进行处理，只要这些文件里包含有必要的命令代码和输入数据，处理后就可以生成用于报告目的的文档。最后，你还可以自建子程序，然后直接与LINDO相结合形成一个包括你自己的代码和LINDO本身的优化库的综合程序。输入一个模型现在让我们用例子来说明怎样输入和求解一个模型。当我们打开LINDO后，屏幕将出现以下窗口： 
在外面标题为"LINDO"的是主窗口，它包含所有的其他窗口以及所有命令菜单和工具栏。在里面的是一个新的空白的模型窗口，等下我们就会在那里直接输入一个简单的范例模型，但在此之前，我们首先需要简明地了解一下一个LINDO模型所必须具备的基本条件和要素。要素一个LINDO模型至少需要具备三个要素：目标、决策变量和约束条件。
第一个基本要素是目标，顾名思义，是指一个问题解决后所要达到的目标。有两种目标可选择：MAX或MIN，也就是最大化或最小化。在一个典型的经济问题里，你可能想使你的获利最大化或成本最小化。因此，LINDO模型里的第一个字必须是MAX或是MIN。然后，在其后输入的一个式子就叫做目标函数。现在假设要使利益最大化，就需要输入：MAX 10X + 15Y，然后回车。
那么，X和Y又是什么呢？他们是第二个要素：模型里的决策变量，LINDO就是通过调整这些变量的值，使你的利益达到最大化。它们可以表示两种产品的销售量，或者两个不同公司的销售量。在这里每单位X（产品）的毛利是10，Y的是15。他们是变量，在LINDO里，从开始使用他们的时候起，他们就存在。目标和变量就讲这么多。
约束条件
现在让我们来看一下约束条件。在某种意义上，约束条件是我们所建立的模型中最重要的部分，它们需要认真地考虑。
在前面的例子里，我们打算使式子10X + 15Y的值最大，但对X和Y能卖出多少却没有加以限制，这当然不可能，因为在现实世界里会存在诸如劳动产出和有效性等限制因素。所以我们会把X和Y的值限制在一个合理的范围之内而不是任其随意地取值。于是我们需要在模型的另外一行里输入"SUBJECT TO"字样（或者可以只输入ST），跟着在后面分行输入X < 10 和 Y < 12。有一点值得注意的是，LINDO会将"<"符号理解为小于或等于而不是绝对的小于。如果你喜欢的话，你可以用"<="来代替"<"。
很好，我们已经对X和Y加以限制了。再假设我们只有有限的劳动力，如16单位的劳动力，产品X需要一个单位而Y需要两个单位。现在我们继续加上一条约束条件：X + 2 Y < 16。最后，我们在另一行加上END字样以表明约束条件的结束。这时，建立后的模型应该就是下面这个样子： 
这样我们就建立了一个简单的模型，下面我们可以开始求解了。从Solve菜单选择Solve命令，或者在窗口顶部的工具栏里按Solve按钮，LINDO就会开始对模型进行编译。首先，LINDO会检查模型是否具有数学意义以及是否符合语法要求。如果模型不能通过这一步检查，会看到以下报错信息：An error occurred during compilation on line: n（产生错误的行数），LINDO会自动跳转到发生错误的行。我们就可以检查该行的语法错误并改正过来。
通过这一检查阶段后，LINDO就会正式开始求解，这由一个叫LINDO solver的处理器完成。当solver初始化时，会在屏幕上显示一个状态窗口，如下图所示： 　这个状态窗口可以显示solver的进度，下表是对各项数据/控制按钮的说明： 
数据项/控制
说明
Status
给出当前解决方案的状态，可能的值包括：Optimal（最优的）, Feasible（可行的）, Infeasible（不可行的）,Unbounded（未定的）
Iterations
solver的重复次数
Infeasibility
多余或错误约束条件数量
Objective
目标函数的当前值
Best IP
标示得到最优整数解决方案值，该项只出现在IP（整数规划）模型。
IP Bound
IP模型中目标的理论范围
Branches
由LINDO IP solver分生出来的整型变量个数
Elapsed Time
solver启动后所经过时间
Update Interval
状态窗口更新周期（秒）。你可以把这个值设成任何一个非负数，如果把它设成零的话很可能会增加求解时间。
Interrupt Solver
按下该按钮，solver将立刻停止并返回当前得到的最优解。
Close
按下该按钮关闭状态窗口，solver继续运行。状态窗口可以通过选取相应命令重新打开。
当solver完成优化过程后将会提示你是否要进行灵敏度和范围分析（都是运筹学里面的术语）。随着运筹学学习的深入，以后我们会用到这个有用的信息的，但现在我们先按下"No"按钮关闭状态窗口。
错误报告
现在，屏幕将会出现一个名为"Reports Window"的窗口。这个窗口里显示的就是LINDO的输出结果报告，它可以显示64，000个字符的信息。如果有需要，LINDO会从顶部开始刷除部分输出以腾出空间来显示新的输出。如果你有一个很长的解决方案报告，需要完整地进行阅读使用，你可以把这些信息从Reports Window写到另外一个磁盘文件里，方法是选取File|Log Output命令，快捷键是F10，然后你就可以找到该文件进行阅读使用。
解决方案
还是回到我们的例子，Reports Window里显示的是模型的最优解决方案，如下所示： 
按照顺序，报告首先告诉我们LINDO进行了两次运算后求出该解；跟着是在约束条件的约束下我们可以得到的最大利润是145；这时X和Y分别取值10和3。值得注意的是，利润似乎更高的产品Y在这里居然用得比较少，这是因为我们前面所假设的劳动力供给的限制在起作用，在这里就很好地证明了运筹学的强大作用，使我们不至于因为一些表面现象而作出错误的决策。
最新版本
lindo当前最新版本为8.0 beta。