SCIP求解器使用VS软c++语言调用详细方法

本文详细介绍了如何在C++项目中集成和使用SCIP求解器,包括下载SCIP、设置编译环境、添加包含和库目录、配置库依赖项,以及编写和运行简单的优化问题代码来求解线性规划问题。

一、内容来源于以下博主的总结

https://www.cnblogs.com/dengfaheng/p/10041488.html

在C++中使用SCIP求解器-优快云博客

在执行以下步骤之前,需要下载scip,并保证在命令端窗口可以执行scip的功能

二、具体步骤

1、创建cpp空项目文件

 2、选择环境,x64   release

3、VC++目录->外部包含目录  

在scip安装目录中的include加入

F:\programmsoftware\SCIP\SCIPOptSuite 8.0.3\include  

4、VC++目录->库目录

在scip安装目录中的lib加入

F:\programmsoftware\SCIP\SCIPOptSuite 8.0.3\lib

5、链接器->输入->附加库依赖项

加入以下依赖项,有时候可能会报错找不到,可能于scip的版本有关 可以去lib目录看看

libscip.lib或者scip.lib

6、运行如下代码

#include <iostream>
#include <scip/scipdefplugins.h>


#pragma comment(lib,"libscip.lib")

//目标函数: 2x+3y
//con 2x+3y >= 7
int main(void) {
    // creates and initializes SCIP data structures
    SCIP* _scip;
    SCIPcreate(&_scip);

    // include default plugins
    SCIPincludeDefaultPlugins(_scip);

    // creates empty problem and initializes all solving data structures
    SCIPcreateProbBasic(_scip, "test");

    //sets objective sense of problem
    SCIPsetObjsense(_scip, SCIP_OBJSENSE_MINIMIZE);

    // changes the value of an existing SCIP_Real parameter
    SCIPsetRealParam(_scip, "limits/gap", 0.00001);
    SCIPsetRealParam(_scip, "limits/time", 10);

    //--添加变量
    SCIP_VAR* xVar = nullptr;
    SCIPcreateVarBasic(_scip, &xVar, "_x", 0, SCIPinfinity(_scip), 2.0, SCIP_VARTYPE_INTEGER);
    SCIPaddVar(_scip, xVar);

    SCIP_VAR* yVar = nullptr;
    SCIPcreateVarBasic(_scip, &yVar, "_y", 0, SCIPinfinity(_scip), 3.0, SCIP_VARTYPE_INTEGER);
    SCIPaddVar(_scip, yVar);

    //--添加约束
    SCIP_CONS* zCons;
    SCIPcreateConsBasicLinear(_scip, &zCons, "z_cons", 0, NULL, NULL, 7, SCIPinfinity(_scip));
    SCIPaddCoefLinear(_scip, zCons, xVar, 2);
    SCIPaddCoefLinear(_scip, zCons, yVar, 3);
    SCIPaddCons(_scip, zCons);

    SCIPsolve(_scip);

    //--取最优解
    SCIP_Real x_value = SCIPgetSolVal(_scip, SCIPgetBestSol(_scip), xVar);
    SCIP_Real y_value = SCIPgetSolVal(_scip, SCIPgetBestSol(_scip), yVar);

    //--释放资源
    SCIPreleaseVar(_scip, &xVar);
    SCIPreleaseVar(_scip, &yVar);

    SCIPreleaseCons(_scip, &zCons);

    SCIPfree(&_scip);

    std::cout << "x_value: " << x_value << std::endl;
    std::cout << "y_value: " << y_value << std::endl;

    system("pause");
    return 0;
}

7、运行结果如下

8、后续遇到问题再补充 

### SCIP求解器简介 SCIP是一个用于约束整数规划(Constraint Integer Programming, CIP)的框架,主要面向希望完全控制求解过程并访问底层细节的数学规划专家[^2]。它不仅可以作为纯混合整数线性规划(MILP)和混合整数非线性规划(MINLP)求解器使用,还可以作为一个分支切割与定价(branch-cut-and-price)框架。 --- ### SCIP求解器的安装方法 #### 方法一:通过源码编译安装 如果需要手动安装SCIP,可以按照以下步骤操作: 1. **下载SCIP Opt Suite** 访问官方页面获取最新版本的`scipoptsuite-X.X.X.tgz`文件,并将其保存到本地目录[^4]。 2. **解压文件** 使用命令行工具执行以下指令来解压压缩包: ```bash tar -zxvf scipoptsuite-5.0.0.tgz ``` 3. **配置环境变量** 编辑`.bashrc`或其他shell初始化脚本,设置路径以便于后续调用: ```bash export PATH=$PATH:/path/to/scipoptsuite/bin ``` 4. **构建项目** 执行Makefile完成编译工作: ```bash make ZIMPL=false READLINE=false GMP=false SOPLEX=true ``` 此处参数可以根据实际需求调整,例如启用GMP支持或者禁用某些依赖。 #### 方法二:Python中的PySCIPOpt接口 对于希望通过Python直接调用SCIP的情况,推荐使用`pyscipopt`模块。然而需要注意的是,在部分环境中可能会遇到兼容性问题[^3]。解决办法如下: 1. 安装前确认已正确安装C++开发工具链以及必要的头文件; 2. 尝试指定特定版本号进行pip安装: ```bash pip install pyscipopt==X.Y.Z ``` 替换`X.Y.Z`为适合当前系统的稳定版次; 3. 如果仍然失败,则考虑采用conda渠道管理件包: ```bash conda install -c conda-forge pyscipopt ``` 注意:并非所有平台都提供预编译好的wheel文件,因此有时仍需自行编译扩展程序。 --- ### 如何在OR-Tools中调用SCIP内核? Google OR-Tools提供了灵活多样的优化算法实现方案,其中就包含了对接第三方高级求解引擎的功能选项之一便是集成SCIP核心逻辑[^1]。具体做法如下所示: ```python from ortools.linear_solver import pywraplp def create_scip_solver(): """创建基于SCIP的支持连续/离散决策变量模型实例""" solver = pywraplp.Solver.CreateSolver('SCIP') if not solver: raise ValueError("无法加载SCIP求解器,请先验证其是否被成功部署至运行时环境") return solver if __name__ == "__main__": s = create_scip_solver() print(f"使用求解器名称:{s.solver_name()}") ``` 上述代码片段展示了如何利用OR-Tools封装后的API快速定义一个以SCIP为基础的新建对象,并测试连接状态正常与否。 --- ### 性能评估数据记录表单说明 当对比不同求解器的表现差异时,通常会借助标准化表格形式呈现实验所得指标数值关系图谱。比如下面这个例子就是针对八线程并发条件下各款产品处理效率统计汇总情况摘要[^5]: | Threads Count | Time Consumed (sec.) by Solver A | Memory Usage(MB)by Solver B | |---------------|-----------------------------------|-------------------------------| | 8 | XX.XXX | YY.YYY | 此结构便于直观看出各项资源消耗趋势变化规律特征等等重要特性描述要点所在之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值