从本期开始阅读开源求解器coin_or的源码。整体项目介绍见https://blog.csdn.net/kittyzc/article/details/100182189
第一篇从clp开始。
1. 上手
1.1 快速使用
首先是简单的调用测试,在mac上首先安装clp的库:,然后新建项目进行调用,各项配置如下:
2. 基本函数
最基本的结构如下:
2.2 通用求解配置
2.4 presolve
调用方法如下,首先加ClpPresolve.hpp
3. 进阶函数
3.1 pivot选项
在prime simplex中,任何非基变量都可以用作pivot;在dual simplex中,任何基变量都可以用于pivot。
对于dual simplex,基础类叫做ClpDualRowPivot,实现的两个instances是ClpDualRowDantzig 和 ClpDualRowSteepest。
调用方法如下:
3.2 参数矩阵
如果全是正负1,可以用ClpPlusMinusOneMatrix。建立一个CoinPackedMatrix的instance:matrix,调用方法如下:
对于 络流问题,每一列只有一个参数,可以用ClpNetworkMatrix,调用方法如下:
此时clp会使用 络流的方法去求解。
3.3 打印日志
如果什么都不想打印,可以设置model.setLogLevel(int value)中的value为0。
也可以自定义文件日志:
4. 示例文件说明
按照说明文档进行分类说明:
4.1 基本示例文件
- MINIMUMCPP:读取mps文件并求解
- DEFAULTSCPP:参数设置与读取示例,包括求解参数、结果参数;如何设置warm start;
- DRIVERCPP:设置SolveType、开启presolve
- NETWORKCPP:如何读取非mps文件
- TESTBARRIERCPP:使用barrier方法的例子
4.2 其他示例文件
- DUALCUTSCPP:cut的基本使用方法
- DECOMPOSECPP:Dantzig-Wolfe decomposition的示例。
- SPRINTCPP:求解long,thin的模型。
文章知识点与官方知识档案匹配,可进一步学习相关知识Git技能树Git入门Git简介2888 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!