非线性规划求解器 Lingo, Matlab 使用心得,及使用的求解算法
對于非線性規(guī)劃,Cplex 與 Gurobi 只支持二次規(guī)劃(包括凸規(guī)劃,二階錐規(guī)劃,目標(biāo)函數(shù)或約束條件中可以包含二次函數(shù))。若更高次數(shù),或者非凸規(guī)劃,非二階錐規(guī)劃,則需要用其他求解器了。matlab 自帶的 fmincon 可以得到一些可行解,比較專業(yè)常用的求解器有 lingo,Mosek 等。
1. matlab 中的 fmincon
MATLAB求解非線性規(guī)劃的算法包括:內(nèi)點法(interior point algorithm)、信賴域法(trust-region method)、序列二次規(guī)劃法(sequential quadratic method)。
這幾種方法的核心思想基本都是:將原問題近似為一個凸規(guī)劃問題求解。
官方解釋參看:https://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-algorithms.html
2. lingo
Lingo使用的非線性規(guī)劃的算法是:廣義既約梯度法(general reduced gradient method),順序線性規(guī)劃法(sucessive linear programming method)。
Lingo 號稱有時能夠得到全局最優(yōu)解。
官方解釋:https://www.lindo.com/index.php/products/lingo-and-optimization-modeling?catid=89&id=88:powerful-lingo-solvers
還有一個類似的軟件叫 lindo,跟 lingo 是一家公司,貌似只能求解線性問題,不過 lindo支持 python 調(diào)用,而 lingo 目前還不支持。
3. lingo 的優(yōu)缺點
對lingo初步使用的心得包括以下幾個方面,
優(yōu)點
- 語法簡單,容易上手
- 通過 solver 中 的 options 可以方便對求解進行設(shè)置
- 支持非線性,非凸問題的求解
- 國內(nèi)網(wǎng)上很多學(xué)習(xí)資料
- 對于非線性問題的求解,確實比 matlab 好(有時候也不一定)
缺點:
- 不能直接定義二維求解變量,需要通過 link 間接定義
- 對大規(guī)模問題的支持顯然不如 cplex,gurobi 等
- 對求解過程的調(diào)試或控制,沒有支持 java調(diào)用的 cplex,或者支持 python 調(diào)用的 gurobi 方便
總結(jié)
以上是生活随笔為你收集整理的非线性规划求解器 Lingo, Matlab 使用心得,及使用的求解算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能数学基础--概率与统计9:概率运
- 下一篇: 心理健康工作之成效