#优化 #约束 #接口 #编程 #整数 #模型 #scip

russcip

Rust对SCIP的接口

26次发布

0.3.4 2024年3月31日
0.2.6 2023年9月21日
0.2.5 2023年7月27日
0.1.13 2023年3月10日

#149 in 算法

Download history 174/week @ 2024-04-20 272/week @ 2024-04-27 182/week @ 2024-05-04 316/week @ 2024-05-11 202/week @ 2024-05-18 195/week @ 2024-05-25 242/week @ 2024-06-01 261/week @ 2024-06-08 260/week @ 2024-06-15 249/week @ 2024-06-22 277/week @ 2024-06-29 395/week @ 2024-07-06 255/week @ 2024-07-13 459/week @ 2024-07-20 882/week @ 2024-07-27 693/week @ 2024-08-03

2,339 每月下载量
用于 3 个crate (2 直接)

Apache-2.0

160KB
3K SLoC

russcip

tests coverage

A safe Rust interface for SCIP. This crate also exposes access to the SCIP's C-API through the ffi module. The project is currently actively developed, issues/pull-requests are very welcome.

安装

通过运行

cargo add russcip --features bundled

The bundled feature will download a precompiled SCIP as part of the build process. This is the easiest to get started with russcip, instead you could try the from-source or if you want to link against your custom SCIP installation check the section below.

from-source feature

To build SCIP from source, you can enable the from-source feature. This will download the SCIP source code and build it as part of the build process.

cargo add russcip --features from-source

自定义SCIP安装

If no feature is not enabled, russcip will look for a scip installation in the current conda environment, to install SCIP using conda run the following command

conda install --channel conda-forge scip

或者,您可以通过设置环境变量SCIPOPTDIR来指定安装目录。

russcip已针对SCIP 9.0.0进行测试,但它可能适用于其他版本,具体取决于您使用的功能。

示例

这里可以找到一个关于如何建模和求解整数规划的示例。要运行示例,您可以使用以下命令

cargo run --example create_and_solve

The raw feature

您可以通过在您的 Cargo.toml 中指定功能来启用此功能

[dependencies]
russcip = { features = ["raw"] }

这允许您通过 Model 结构体中的 scip_ptr 不安全函数访问底层SCIP原始指针。这可以与 ffi 模块一起使用,以调用尚未在安全接口中包装的SCIP函数。

实现自定义插件

SCIP的一些插件被导入到Rust接口作为特质。目前实现的插件有

名称 文件 文档
分支规则 branchrule.rs docs
变量定价器 pricer.rs docs
事件处理器 eventhdlr.rs docs
主启发式 heuristic.rs docs

要将自定义插件添加到SCIP Model 实例,您应该实现其特质并调用相应的 include_{PLUGIN_NAME} 方法。有关实现特定插件特质的示例,您可以查看相应文件的测试。

贡献

正在考虑为russcip做出贡献?首先,感谢您!您可以查看我们的问题页面,那里有很多良好的入门问题,或者您可以查看我们的贡献指南。如果您想做出贡献,但不确定该做什么,或者正在考虑一个大功能并想要讨论它是否合理以及最佳实现方式,您可以打开一个新的问题/讨论,或者给我发送一封快速电子邮件@mmghannam

关于SCIP

SCIP是目前最快的非商业混合整数规划(MIP)和混合整数非线性规划(MINLP)求解器之一。它还是一个约束整数规划和分支-切割-定价的框架。它允许完全控制求解过程并访问到求解器内部的详细信息。

依赖关系

~1.8–4.5MB
~50K SLoC