非线性规划求解器 Lingo, Matlab 使用心得,及使用的求解算法

对于非线性规划,Cplex 与 Gurobi 只支持二次规划(包括凸规划,二阶锥规划,目标函数或约束条件中可以包含二次函数)。若更高次数,或者非凸规划,非二阶锥规划,则需要用其他求解器了。matlab 自带的 fmincon 可以得到一些可行解,比较专业常用的求解器有 lingo,Mosek 等。

1. matlab 中的 fmincon

MATLAB求解非线性规划的算法包括:内点法(interior point algorithm)、信赖域法(trust-region method)、序列二次规划法(sequential quadratic method)。
这几种方法的核心思想基本都是:将原问题近似为一个凸规划问题求解。

官方解释参看:https://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-algorithms.html

2. lingo

Lingo使用的非线性规划的算法是:广义既约梯度法(general reduced gradient method),顺序线性规划法(sucessive linear programming method)。
Lingo 号称有时能够得到全局最优解。

官方解释:https://www.lindo.com/index.php/products/lingo-and-optimization-modeling?catid=89&id=88:powerful-lingo-solvers

还有一个类似的软件叫 lindo,跟 lingo 是一家公司,貌似只能求解线性问题,不过 lingo支持 python 调用,而 lingo 目前还不支持。

3. lingo 的优缺点

对lingo初步使用的心得包括以下几个方面,
优点

  • 语法简单,容易上手
  • 通过 solver 中 的 options 可以方便对求解进行设置
  • 支持非线性,非凸问题的求解
  • 国内网上很多学习资料
  • 对于非线性问题的求解,确实比 matlab 好

缺点:

  • 不能直接定义二维求解变量,需要通过 link 间接定义
  • 对大规模问题的支持显然不如 cplex,gurobi 等
  • 对求解过程的调试或控制,没有支持 java调用的 cplex,或者支持 python 调用的 gurobi 方便
发布了280 篇原创文章 · 获赞 496 · 访问量 146万+

猜你喜欢

转载自blog.csdn.net/robert_chen1988/article/details/96915655
今日推荐