pub struct HighsOptions {
pub universal: UniversalOptions,
pub mip_gap: Option<f64>,
pub presolve: Option<HighsPresolve>,
pub method: Option<HighsMethod>,
pub parallel: Option<bool>,
}Expand description
HiGHS-specific solver options.
Fields§
§universal: UniversalOptions§mip_gap: Option<f64>§presolve: Option<HighsPresolve>§method: Option<HighsMethod>§parallel: Option<bool>Implementations§
Source§impl HighsOptions
impl HighsOptions
Sourcepub fn mip_gap(self, gap: f64) -> HighsOptions
pub fn mip_gap(self, gap: f64) -> HighsOptions
Examples found in repository?
examples/lot_sizing.rs (line 100)
57fn main() -> Result<(), Box<dyn std::error::Error>> {
58 const T: usize = 12;
59
60 let demand: [f64; T] =
61 [120.0, 90.0, 80.0, 140.0, 160.0, 200.0, 220.0, 190.0, 150.0, 130.0, 100.0, 170.0];
62 let prod_cost: [f64; T] = [5.0, 5.0, 5.0, 5.5, 6.0, 6.5, 6.5, 6.0, 5.5, 5.0, 5.0, 5.5];
63 let setup_cost = 500.0;
64 let hold_cost = 2.0;
65 let capacity = 300.0;
66 let initial_inventory = 50.0;
67 let safety_stock = 30.0;
68
69 let m = Model::new("lot_sizing");
70 let periods = Set::range(0..T);
71
72 let x = m.indexed_var("x", &periods).lb(0.0).ub(capacity).build();
73 let h = m.indexed_var("h", &periods).lb(0.0).build();
74 let s = m.indexed_var("s", &periods).binary().build();
75
76 m.constraint("inv_bal[0]", (h[0] - x[0]).eq(initial_inventory - demand[0]));
77 m.add_constraints_over("inv_bal", &periods.filter(|k| k.as_i64().unwrap() > 0), |t: usize| {
78 (h[t] - h[t - 1] - x[t]).eq(-demand[t])
79 });
80 m.add_constraints_over("setup", &periods, |t: usize| (x[t] - capacity * s[t]).le(0.0));
81 m.constraint("safety_stock", h[T - 1].ge(safety_stock));
82
83 let cost =
84 sum_over(&periods, |t: usize| prod_cost[t] * x[t] + setup_cost * s[t] + hold_cost * h[t]);
85 m.minimize(cost);
86
87 #[cfg(feature = "gurobi")]
88 let result = {
89 let opts = GurobiOptions::default()
90 .time_limit(std::time::Duration::from_secs(60))
91 .mip_gap(1e-4)
92 .verbose(true);
93 Gurobi.solve(&m, &opts)?
94 };
95
96 #[cfg(all(feature = "highs", not(feature = "gurobi")))]
97 let result = {
98 let opts = HighsOptions::default()
99 .time_limit(std::time::Duration::from_secs(60))
100 .mip_gap(1e-4)
101 .verbose(true);
102 Highs.solve(&m, &opts)?
103 };
104
105 println!("\nLot-Sizing Result");
106 println!("Status : {:?}", result.status);
107 if let Some(obj) = result.objective {
108 println!("Total cost: {obj:.2}");
109 }
110
111 println!(
112 "\n{:<8} {:>10} {:>10} {:>8} {:>12}",
113 "Period", "Produce", "Inventory", "Active", "Period cost"
114 );
115 println!("{}", "-".repeat(55));
116
117 let mut total_check = 0.0;
118 for t in 0..T {
119 let xt = result.value_of(x[t]).unwrap_or(0.0);
120 let ht = result.value_of(h[t]).unwrap_or(0.0);
121 let st = result.value_of(s[t]).unwrap_or(0.0);
122 let period_cost = prod_cost[t] * xt + setup_cost * st + hold_cost * ht;
123 total_check += period_cost;
124 println!(
125 "{:<8} {:>10.1} {:>10.1} {:>8} {:>12.2}",
126 t + 1,
127 xt,
128 ht,
129 if (st - 1.0).abs() < 1e-6 { "Yes" } else { "No" },
130 period_cost
131 );
132 }
133 println!("{}", "-".repeat(55));
134 println!("{:<8} {:>10} {:>10} {:>8} {:>12.2}", "TOTAL", "", "", "", total_check);
135
136 Ok(())
137}pub fn presolve(self, p: HighsPresolve) -> HighsOptions
pub fn method(self, m: HighsMethod) -> HighsOptions
pub fn parallel(self, on: bool) -> HighsOptions
Trait Implementations§
Source§impl Clone for HighsOptions
impl Clone for HighsOptions
Source§fn clone(&self) -> HighsOptions
fn clone(&self) -> HighsOptions
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for HighsOptions
impl Debug for HighsOptions
Source§impl Default for HighsOptions
impl Default for HighsOptions
Source§fn default() -> HighsOptions
fn default() -> HighsOptions
Returns the “default value” for a type. Read more
Source§impl HasUniversal for HighsOptions
impl HasUniversal for HighsOptions
fn universal(&self) -> &UniversalOptions
fn universal_mut(&mut self) -> &mut UniversalOptions
Auto Trait Implementations§
impl Freeze for HighsOptions
impl RefUnwindSafe for HighsOptions
impl Send for HighsOptions
impl Sync for HighsOptions
impl Unpin for HighsOptions
impl UnsafeUnpin for HighsOptions
impl UnwindSafe for HighsOptions
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more