6个版本
使用旧Rust 2015
0.3.4 | 2020年4月4日 |
---|---|
0.3.3 | 2018年6月14日 |
0.3.2 | 2016年9月4日 |
0.3.1 | 2016年8月29日 |
0.1.1 |
|
#2121 in 算法
115KB
2.5K SLoC
rust-gurobi
Guromi优化器的非官方Rust API。
注意
- 此封装库不是Guromi官方支持的。
- 还有很多工作尚未完成。
许可证
版权(c)2016,Yusuke Sasaki
本软件以MIT许可证发布,请参阅LICENSE。
lib.rs
:
此crate提供Guromi优化器的原始Rust API。
它支持某些类型的数学规划问题(例如,线性规划;LP,混合整数线性规划;MILP等)。
注意
-
在使用此crate之前,您应安装Guromi并获取许可证。说明可在此处找到此处。
-
确保环境变量
GUROBI_HOME
设置为Guromi的安装路径(如C:\gurobi652\win64
,/opt/gurobi652/linux64
)。 -
在Windows上,工具链应该是MSVC ABI(它还需要Visual Studio或Visual C++构建工具)。如果您想使用MinGW-w64/MSYS2工具链的GNU ABI,您应该创建Guromi运行时DLL(例如
gurobi65.dll
)的导入库并将其放入GUROBI_HOME/lib
。创建导入库的步骤如下$ pacman -S mingw-w64-x86_64-tools-git $ gendef - $(cygpath $GUROBI_HOME)/bin/gurobi65.dll > gurobi65.def $ dlltool --dllname gurobi65.dll --def gurobi65.def --output-lib $(cygpath $GUROBI}HOME)/lib/libgurobi65.dll.a
示例
extern crate gurobi;
use gurobi::*;
fn main() {
let env = Env::new("logfile.log").unwrap();
// create an empty model which associated with `env`:
let mut model = env.new_model("model1").unwrap();
// add decision variables.
let x1 = model.add_var("x1", Continuous, 0.0, -INFINITY, INFINITY, &[], &[]).unwrap();
let x2 = model.add_var("x2", Integer, 0.0, -INFINITY, INFINITY, &[], &[]).unwrap();
// integrate all of the variables into the model.
model.update().unwrap();
// add a linear constraint
model.add_constr("c0", &x1 + 2.0 * &x2, Greater, -14.0).unwrap();
model.add_constr("c1", -4.0 * &x1 - 1.0 * &x2, Less, -33.0).unwrap();
model.add_constr("c2", 2.0 * &x1 + &x2, Less, 20.0).unwrap();
// integrate all of the constraints into the model.
model.update().unwrap();
// set the expression of objective function.
model.set_objective(8.0 * &x1 + &x2, Minimize).unwrap();
assert_eq!(model.get(attr::IsMIP).unwrap(), 1, "Model is not a MIP.");
// write constructed model to the file.
model.write("logfile.lp").unwrap();
// optimize the model.
model.optimize().unwrap();
assert_eq!(model.status().unwrap(), Status::Optimal);
assert_eq!(model.get(attr::ObjVal).unwrap() , 59.0);
let val = model.get_values(attr::X, &[x1, x2]).unwrap();
assert_eq!(val, [6.5, 7.0]);
}
依赖项
~420KB