运筹系列77:开源线性规划软件clp使用简介

从本期开始阅读开源求解器coin_or的源码。整体项目介绍见https://blog.csdn.net/kittyzc/article/details/100182189
第一篇从clp开始。

1. 上手

1.1 快速使用

首先是简单的调用测试,在mac上首先安装clp的库:,然后新建项目进行调用,各项配置如下:

运筹系列77:开源线性规划软件clp使用简介

关键词清单如下:

2. 基本函数

最基本的结构如下:

运筹系列77:开源线性规划软件clp使用简介

2.2 通用求解配置

运筹系列77:开源线性规划软件clp使用简介

2.4 presolve

调用方法如下,首先加ClpPresolve.hpp

运筹系列77:开源线性规划软件clp使用简介
调用和设置函数如下:

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的模型。
    运筹系列77:开源线性规划软件clp使用简介

文章知识点与官方知识档案匹配,可进一步学习相关知识Git技能树Git入门Git简介2888 人正在系统学习中

来源:IE06

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月8日
下一篇 2022年7月8日

相关推荐