mirror of
https://github.com/circify/circ.git
synced 2026-01-10 06:08:02 -05:00
CBC dependency for LPs (#8)
This commit is contained in:
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
run: sudo apt-get update; sudo apt-get install zsh cvc4
|
||||
- name: install dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install libboost-all-dev libssl-dev
|
||||
run: sudo apt-get install libboost-all-dev libssl-dev coinor-cbc coinor-libcbc-dev
|
||||
- uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
profile: minimal
|
||||
|
||||
77
Cargo.lock
generated
77
Cargo.lock
generated
@@ -214,10 +214,12 @@ dependencies = [
|
||||
"fnv",
|
||||
"funty",
|
||||
"gmp-mpfr-sys",
|
||||
"good_lp",
|
||||
"hashconsing",
|
||||
"ieee754",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"lp-solvers",
|
||||
"quickcheck",
|
||||
"quickcheck_macros",
|
||||
"rand",
|
||||
@@ -245,6 +247,22 @@ dependencies = [
|
||||
"vec_map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "coin_cbc"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97ab09f19676fd0768a387778bf3c18c795e6122ac4fadf50e67af25dbe60e8a"
|
||||
dependencies = [
|
||||
"coin_cbc_sys",
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "coin_cbc_sys"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4902c2c164ed74da85aa8472c4a754de1d8164c1fd16d672ec0faf22da482fa9"
|
||||
|
||||
[[package]]
|
||||
name = "constant_time_eq"
|
||||
version = "0.1.5"
|
||||
@@ -474,6 +492,17 @@ dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "good_lp"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bfe80a29a2ebb9c2b0a11e0063b5ad3dcbbbb0669070ebdb3e0218a1747bf672"
|
||||
dependencies = [
|
||||
"coin_cbc",
|
||||
"fnv",
|
||||
"lp-solvers",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "group"
|
||||
version = "0.9.0"
|
||||
@@ -555,6 +584,16 @@ dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lp-solvers"
|
||||
version = "0.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3a43e6a93981a893fbc122219a762361aa9608e6b2697814b75b3db5486a5d00"
|
||||
dependencies = [
|
||||
"tempfile",
|
||||
"xml-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "maplit"
|
||||
version = "1.0.2"
|
||||
@@ -820,6 +859,15 @@ dependencies = [
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.4.3"
|
||||
@@ -838,6 +886,15 @@ version = "0.6.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
|
||||
|
||||
[[package]]
|
||||
name = "remove_dir_all"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rsmt2"
|
||||
version = "0.12.0"
|
||||
@@ -967,6 +1024,20 @@ version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"libc",
|
||||
"rand",
|
||||
"redox_syscall",
|
||||
"remove_dir_all",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.2"
|
||||
@@ -1117,6 +1188,12 @@ version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
|
||||
|
||||
[[package]]
|
||||
name = "xml-rs"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
|
||||
|
||||
[[package]]
|
||||
name = "zokrates_parser"
|
||||
version = "0.1.6"
|
||||
|
||||
@@ -26,6 +26,8 @@ bellman = "0.9"
|
||||
ff = "0.9"
|
||||
funty = "=1.1"
|
||||
ahash = "0.7"
|
||||
good_lp = { version = "1.1", features = ["lp-solvers", "coin_cbc"], default-features = false }
|
||||
lp-solvers = "0.0.4"
|
||||
|
||||
[dev-dependencies]
|
||||
quickcheck = "1"
|
||||
|
||||
50
src/target/milp/mod.rs
Normal file
50
src/target/milp/mod.rs
Normal file
@@ -0,0 +1,50 @@
|
||||
//! Mixed ILP backend
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use good_lp::{ProblemVariables, Solution, SolverModel, default_solver, variable, solvers::lp_solvers::SolverTrait};
|
||||
|
||||
#[test]
|
||||
fn simple() {
|
||||
let mut vars = ProblemVariables::new();
|
||||
let a = vars.add(variable().name("a").binary());
|
||||
let b = vars.add(variable().name("b").integer().max(10));
|
||||
let c = vars.add(variable().name("c").max(10));
|
||||
let solution =
|
||||
vars
|
||||
.maximise(a + b + c)
|
||||
.using(default_solver)
|
||||
.with(a + b << 30.0)
|
||||
.solve().unwrap();
|
||||
assert_eq!(solution.value(a), 1.0);
|
||||
assert_eq!(solution.value(b), 10.0);
|
||||
assert_eq!(solution.value(c), 10.0);
|
||||
}
|
||||
|
||||
fn test_solver<S: SolverTrait + Clone>(s: S) {
|
||||
let mut vars = ProblemVariables::new();
|
||||
let a = vars.add(variable().name("a").binary());
|
||||
let b = vars.add(variable().name("b").integer().max(10));
|
||||
let c = vars.add(variable().name("c").max(10));
|
||||
let solution =
|
||||
vars
|
||||
.maximise(a + b + c)
|
||||
.using(good_lp::solvers::lp_solvers::LpSolver(s))
|
||||
.with(a + b << 30.0)
|
||||
.solve().unwrap();
|
||||
assert_eq!(solution.value(a), 1.0);
|
||||
assert_eq!(solution.value(b), 10.0);
|
||||
assert_eq!(solution.value(c), 10.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_cbc() {
|
||||
test_solver(good_lp::solvers::lp_solvers::CbcSolver::new());
|
||||
}
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_glpk() {
|
||||
test_solver(good_lp::solvers::lp_solvers::GlpkSolver::new());
|
||||
}
|
||||
}
|
||||
@@ -3,3 +3,4 @@
|
||||
pub mod aby;
|
||||
pub mod r1cs;
|
||||
pub mod smt;
|
||||
pub mod milp;
|
||||
|
||||
Reference in New Issue
Block a user