LINDO 求解器


一、简介 (Introduction)

LINDO(Linear, INteractive, and Discrete Optimizer)是 LINDO Systems 公司开发的一款高性能数学规划求解器。作为 GAMS 生态系统中重要的求解器选项之一,LINDO 在处理大规模优化问题方面表现出色,广泛应用于生产计划、物流优化、资源配置、金融投资等众多领域。

LINDO 求解器支持广泛的数学模型类型,包括:

  • LP(线性规划)
  • MIP(混合整数规划)
  • NLP(非线性规划)
  • RMIP(带松弛的混合整数规划)
  • RMINLP(带松弛的混合整数非线性规划)

在 GAMS 环境中,用户只需在模型中使用 option solver=lindo; 即可调用 LINDO 求解器,所有复杂求解细节均由求解器内部自动处理。

LINDO 求解器采用先进的算法技术,包括改进的单纯形法、内点法以及分支定界法等。其数值稳定性出色,求解速度快,内存效率高,经过大量实际问题的严格验证。


二、目录


一、简介 (Introduction)

LINDO 求解器通过 GAMS 标准求解器接口无缝集成,支持 LP、MIP、NLP、RMIP 和 RMINLP 等多种模型类型。求解器内部采用模块化架构,针对不同类型的问题自动选择最优算法策略。

对于线性规划问题,LINDO 提供了两种算法选择:

  • 单纯形法:适用于中等规模问题,在重优化场景中表现优异
  • 内点法:适用于大规模问题,特别是当问题具有稀疏结构时

对于整数规划问题,LINDO 采用分支定界框架,结合先进的割平面技术、启发式策略和预处理技术,有效加速求解过程。

对于非线性规划问题,LINDO 支持多种类型的非线性函数(详见下一节),采用序列二次规划(SQP)和内点法相结合的求解策略。


二、支持的非线性函数 (Supported Nonlinear Functions)

LINDO 求解器支持 GAMS 中定义的大多数标准非线性函数,包括但不限于:

基本算术运算

  • 加法、减法、乘法、除法
  • 幂运算:x**y
  • 绝对值:abs(x)

指数与对数函数

  • 自然指数:exp(x)
  • 自然对数:log(x)
  • 以10为底的对数:log10(x)
  • 以2为底的对数:log2(x)
  • 指数函数:power(x,y)

三角函数

  • 正弦:sin(x)
  • 余弦:cos(x)
  • 正切:tan(x)
  • 反正弦:arcsin(x)
  • 反余弦:arccos(x)
  • 反正切:arctan(x)

其他函数

  • 最大值:max(x1,x2,...)
  • 最小值:min(x1,x2,...)
  • 符号函数:sign(x)
  • 平方根:sqrt(x)
  • 误差函数:errorf(x)
  • Gamma函数:gamma(x)
  • 阶乘:fact(x)
  • 取整函数:ceil(x), floor(x), round(x)

注意:在非线性模型中,某些函数(如 maxmin)可能导致非光滑特性。LINDO 求解器能够处理大多数连续可微的非线性函数,但对于高度非凸或非光滑的问题,建议使用全局优化求解器。


三、不可行与无界问题 (Infeasible & Unbounded)

不可行问题

当求解器报告模型不可行时,说明约束条件之间存在矛盾,没有任何解能同时满足所有约束。LINDO 求解器会返回不可行状态,并提供以下诊断信息:

  • 不可行约束的识别(通过求解约束可行性子问题)
  • 不可行性度量(显示约束违反程度)
  • 建议的修正方向(通过 IIS - 不可行约束子系统分析)

对于线性模型,LINDO 支持不可行约束集(IIS)的自动识别,帮助用户快速定位问题根源。对于整数规划模型,求解器会报告整数不可行性,并可能提供松弛解以供参考。

无界问题

当模型无界时,说明目标函数可以在满足所有约束的条件下无限改进。这通常意味着缺少必要的约束条件,或目标函数中的变量系数存在问题。

LINDO 求解器在检测到无界状态时会:

  • 报告无界状态和相应的退出信息
  • 如果可行,提供无界方向的指示
  • 输出最后一次迭代的解,帮助用户诊断问题

诊断建议

  • 检查模型中的约束条件是否完整
  • 验证变量的上下界是否正确设置
  • 确保目标函数中的系数没有逻辑错误
  • 使用 option limrow=9999;option limcol=9999; 查看完整的方程和变量列表

四、求解输出 (Output)

LINDO 求解器在 GAMS 中运行时会生成详细的求解日志和结果输出,帮助用户了解求解过程和结果质量。

标准输出信息

典型的 LINDO 求解输出包含以下部分:

  1. 求解器标识和版本信息:显示 LINDO 求解器的版本号和版权信息
  2. 模型统计信息
    • 变量数量(包括离散变量和连续变量)
    • 约束数量(包括等式和不等式)
    • 非零元素数量
    • 模型的非线性程度
  3. 求解过程信息
    • 迭代次数
    • 节点数(MIP问题)
    • 当前最佳目标值
    • 当前最佳边界(MIP问题)
    • 相对间隙(MIP问题)
  4. 求解状态
    • 最优解已找到
    • 不可行
    • 无界
    • 达到迭代限制
    • 达到时间限制
    • 求解中断
  5. 最终结果摘要:目标函数值、求解时间、内存使用等

GAMS 状态和求解器状态

LINDO 求解完成后会设置相应的 GAMS 模型状态和求解器状态。常见的模型状态包括:

  • 1 - 最优 (Optimal)
  • 2 - 局部最优 (Locally Optimal)
  • 3 - 不可行 (Infeasible)
  • 4 - 无界 (Unbounded)
  • 5 - 达到迭代/时间限制 (Iteration/Time Limit)
  • 6 - 其他 (Other)

输出详细程度控制

用户可以通过选项控制求解输出的详细程度:

  • option iterlim:控制迭代限制
  • option reslim:控制求解时间限制
  • option optcr:设置 MIP 最优性容差
  • option optca:设置 MIP 绝对最优性容差

五、求解选项 (Options)

LINDO 求解器提供丰富的选项参数,允许用户根据具体问题的特点调整求解行为。选项可以通过 GAMS 的 option 语句或求解器选项文件进行设置。

通用选项

以下为 LINDO 求解器支持的主要选项类别:

选项名称 默认值 说明
iterlim 1000000 求解迭代次数上限
reslim 10000 求解时间上限(秒)
optcr 0.1 MIP 相对最优性容差(百分比)
optca 0 MIP 绝对最优性容差
lindo_mipdisplay 1 MIP 求解过程输出级别(0=无输出, 1=标准输出, 2=详细输出)
lindo_nlpdisplay 1 NLP 求解过程输出级别

LP 求解选项

选项名称 默认值 说明
lindo_lpmethod 0 LP 求解算法(0=自动, 1=单纯形法, 2=内点法)
lindo_scaling 1 模型缩放(0=不缩放, 1=自动缩放)
lindo_presolve 1 预处理级别(0=无, 1=基本, 2=高级)

MIP 求解选项

选项名称 默认值 说明
lindo_mipstrategy 0 MIP 求解策略(0=自动, 1=深度优先, 2=广度优先, 3=最佳优先)
lindo_cuts 1 割平面生成(0=禁用, 1=启用)
lindo_heuristics 1 启发式策略(0=禁用, 1=启用)
lindo_mipgap 0.0001 MIP 停止间隙(绝对+相对混合)
lindo_nodeselect 0 节点选择策略(0=自动, 1=深度优先, 2=最佳投影)

NLP 求解选项

选项名称 默认值 说明
lindo_nlpmethod 0 NLP 求解算法(0=自动, 1=SQP, 2=内点法)
lindo_nlptol 1e-6 NLP 最优性容差
lindo_nlpfeastol 1e-6 NLP 可行性容差
lindo_nlpmaxiter 500 NLP 最大迭代次数
lindo_derivcheck 0 导数检查(0=不检查, 1=检查)

六、选项汇总 (Summary of Options)

下表汇总了 LINDO 求解器最常用的选项及其用途:

GAMS 选项 LINDO 内部选项 默认值 说明
iterlim IP_ITER_LIM 1000000 迭代次数上限
reslim IP_TIME_LIM 10000 求解时间上限(秒)
optcr IP_OPT_CR 0.1 MIP 相对间隙(百分比)
optca IP_OPT_CA 0 MIP 绝对间隙
lindo_lpmethod IP_LP_METHOD 0(自动) LP 算法选择
lindo_mipstrategy IP_MIP_STRATEGY 0(自动) MIP 分支策略
lindo_nlpmethod IP_NLP_METHOD 0(自动) NLP 算法选择
lindo_scaling IP_SCALING 1(启用) 模型自动缩放
lindo_presolve IP_PRESOLVE 1(基本) 预处理级别
lindo_cuts IP_CUTS 1(启用) 割平面生成
lindo_heuristics IP_HEURISTICS 1(启用) MIP 启发式
lindo_mipdisplay IP_MIP_DISPLAY 1(标准) MIP 输出详细程度
lindo_nlpdisplay IP_NLP_DISPLAY 1(标准) NLP 输出详细程度
lindo_nlptol IP_NLP_TOL 1e-6 NLP 最优性容差
lindo_nlpfeastol IP_NLP_FEASTOL 1e-6 NLP 可行性容差

七、详细说明 (Detailed Descriptions)

7.1 求解器调用方式

在 GAMS 模型中调用 LINDO 求解器有多种方式:

  1. 通过 option 语句
    option solver=lindo;
  2. 在 solve 语句中指定
    solve mymodel using LP maximizing profit;

    此时如果已设置 option solver=lindo;,则 GAMS 会使用 LINDO 求解。

  3. 通过选项文件

    创建名为 lindo.opt 的文件,在其中写入求解选项,并在 GAMS 中引用:

    option lindo = lindo.opt;

7.2 线性规划求解详解

对于 LP 问题,LINDO 提供两种主要的求解算法:

单纯形法

  • 适用于中小规模问题
  • 在序列求解(reoptimization)场景下效率极高
  • 支持敏感性分析和参数分析
  • 通过 lindo_lpmethod=1 强制使用

内点法

  • 适用于大规模问题(变量数超过10万)
  • 在处理高度稀疏问题时具有显著优势
  • 支持多线程并行计算
  • 通过 lindo_lpmethod=2 强制使用

当设置为自动模式(lindo_lpmethod=0)时,LINDO 会根据问题的规模和结构特征自动选择最优算法。

7.3 混合整数规划求解详解

LINDO 的 MIP 求解器采用分支定界(Branch-and-Bound)框架,集成了多项先进技术:

  • 预处理技术:通过约束简化、变量固定、系数化简等减少问题规模
  • 割平面生成:自动生成 Gomory 割、混合整数割(MIR)、覆盖割(Cover Cuts)等
  • 启发式策略:包括 RINS、邻近搜索等,快速寻找高质量可行解
  • 节点选择策略:深度优先、最佳投影、最佳估计等多种策略
  • 变量分支策略:基于伪代价、强分支等技术的智能变量选择

MIP 求解过程受多个选项控制:

  • optcroptca:控制求解停止条件,当当前最佳解与理论最优界面的差距小于设定值时,求解停止
  • lindo_mipstrategy:控制分支策略的选择
  • lindo_cuts:控制割平面生成的激进度
  • lindo_heuristics:控制启发式搜索的频率和深度

7.4 非线性规划求解详解

非线性规划问题的求解比线性问题复杂得多。LINDO 采用以下策略处理 NLP 问题:

  • 序列二次规划(SQP)
    • 适用于中小规模 NLP 问题
    • 每次迭代求解一个 QP 子问题
    • 收敛速度快,通常在几十次迭代内收敛
  • 内点法(Interior Point)
    • 适用于大规模 NLP 问题
    • 采用障碍函数处理不等式约束
    • 能有效处理高度非线性问题

重要注意事项

  • NLP 求解器通常只能找到局部最优解,对非凸问题不保证全局最优性
  • 模型应尽量保持良好的数值尺度,避免过大或过小的系数
  • 使用 lindo_derivcheck=1 可以验证导数的正确性(调试用)
  • 如果模型包含大量非线性的非凸项,建议使用全局优化求解器

7.5 性能调优建议

根据问题特点调整求解选项可以显著提升求解性能:

问题类型 建议选项设置 说明
超大规模 LP(>10万变量) lindo_lpmethod=2 使用内点法,内存效率更高
系列求解 LP(同一模型多次求解) lindo_lpmethod=1 单纯形法在热启动时有优势
困难 MIP 问题 lindo_cuts=2 + lindo_heuristics=2 增加割平面和启发式强度
需要快速可行解的 MIP lindo_heuristics=2 + optcr=0.05 加强启发式搜索,设置合理间隙
大规模 NLP lindo_nlpmethod=2 使用内点法求解 NLP
数值困难模型 lindo_scaling=1 + lindo_presolve=2 启用缩放和高级预处理

7.6 高级功能

多线程并行计算:LINDO 求解器支持多线程并行计算,可以通过系统设置或选项控制使用的线程数。在线性规划内点法和混合整数规划求解过程中,多线程可以显著缩短求解时间。

求解器回调功能:对于高级用户,LINDO API 提供了丰富的回调函数接口,允许在求解过程中实时获取求解状态、中断求解或修改求解参数。但在 GAMS 环境下,这些功能通过 GAMS 标准接口间接使用。

MIP 起始解(MIP Start):GAMS 允许用户为 MIP 问题提供初始可行解,通过 prioropt 选项或变量 .l 属性设置。LINDO 求解器会使用这些初始解加速 MIP 求解过程。

敏感性分析:对于 LP 问题,LINDO 求解器可以生成敏感性分析信息,包括目标系数范围、右端项范围等。在 GAMS 中,可以通过 gdx 输出获取这些信息。


相关资源

 

 


 

在线留言

尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

400-621-1085

(节假日期间办公室座机如无人接听,请选择其他联系方式,感谢理解!祝您节日快乐!)

 

联系我们 快速链接 相关产品 上海卡贝信息技术有限公司

©2025  上海卡贝信息技术有限公司

产品中心

下载中心

站点地图

隐私政策

 

销售QQ咨询

产品QQ咨询

淘宝店铺

 

GAMS:概述

最近更新

相关文档

下载试用

购买咨询

Berkeley Madonna

iThink

Stella Architect

IBM SPSS Modeler

DecisionTools Suite

NeuralTools

Frontier Analyst

Vensim

RISKOptimizer

PrecisionTree

LINGO

LINDO API

What'sBest!

@RISK

BARON

BayesiaLab

Oracle Crystal Ball

GEMPACK

GTAP Database

TreeAge