Skip to main content

HighsOptions

Struct HighsOptions 

Source
pub struct HighsOptions {
    pub universal: UniversalOptions,
    pub mip_gap: Option<f64>,
    pub presolve: Option<HighsPresolve>,
    pub method: Option<HighsMethod>,
    pub parallel: Option<bool>,
}
Available on crate feature highs only.
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

Source

pub fn mip_gap(self, gap: f64) -> HighsOptions

Examples found in repository?
examples/lot_sizing.rs (line 98)
55fn main() -> Result<(), Box<dyn std::error::Error>> {
56    const T: usize = 12;
57
58    let demand: [f64; T] =
59        [120.0, 90.0, 80.0, 140.0, 160.0, 200.0, 220.0, 190.0, 150.0, 130.0, 100.0, 170.0];
60    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];
61    let setup_cost = 500.0;
62    let hold_cost = 2.0;
63    let capacity = 300.0;
64    let initial_inventory = 50.0;
65    let safety_stock = 30.0;
66
67    let m = Model::new("lot_sizing");
68    let periods = Set::range(0..T);
69
70    variable!(m, 0.0 <= x[t in periods] <= capacity);
71    variable!(m, h[t in periods] >= 0.0);
72    variable!(m, s[t in periods], Bin);
73
74    constraint!(m, inv_bal0, h[0] - x[0] == initial_inventory - demand[0]);
75    constraint!(m, inv_bal[t in 1..T], h[t] - h[t - 1] - x[t] == -demand[t]);
76    constraint!(m, setup[t in periods], x[t] <= capacity * s[t]);
77    constraint!(m, safety_stock, h[T - 1] >= safety_stock);
78
79    objective!(
80        m,
81        Min,
82        sum!(prod_cost[t] * x[t] + setup_cost * s[t] + hold_cost * h[t] for t in periods)
83    );
84
85    #[cfg(feature = "gurobi")]
86    let result = {
87        let opts = GurobiOptions::default()
88            .time_limit(std::time::Duration::from_secs(60))
89            .mip_gap(1e-4)
90            .verbose(true);
91        Gurobi.solve(&m, &opts)?
92    };
93
94    #[cfg(all(feature = "highs", not(feature = "gurobi")))]
95    let result = {
96        let opts = HighsOptions::default()
97            .time_limit(std::time::Duration::from_secs(60))
98            .mip_gap(1e-4)
99            .verbose(true);
100        Highs.solve(&m, &opts)?
101    };
102
103    println!("\nLot-Sizing Result");
104    println!("Status    : {:?}", result.termination);
105    if let Some(obj) = result.objective() {
106        println!("Total cost: {obj:.2}");
107    }
108
109    println!(
110        "\n{:<8} {:>10} {:>10} {:>8} {:>12}",
111        "Period", "Produce", "Inventory", "Active", "Period cost"
112    );
113    println!("{}", "-".repeat(55));
114
115    let mut total_check = 0.0;
116    for t in 0..T {
117        let xt = result.value_of(x[t]).unwrap_or(0.0);
118        let ht = result.value_of(h[t]).unwrap_or(0.0);
119        let st = result.value_of(s[t]).unwrap_or(0.0);
120        let period_cost = prod_cost[t] * xt + setup_cost * st + hold_cost * ht;
121        total_check += period_cost;
122        println!(
123            "{:<8} {:>10.1} {:>10.1} {:>8} {:>12.2}",
124            t + 1,
125            xt,
126            ht,
127            if (st - 1.0).abs() < 1e-6 { "Yes" } else { "No" },
128            period_cost
129        );
130    }
131    println!("{}", "-".repeat(55));
132    println!("{:<8} {:>10} {:>10} {:>8} {:>12.2}", "TOTAL", "", "", "", total_check);
133
134    Ok(())
135}
Source

pub fn presolve(self, p: HighsPresolve) -> HighsOptions

Source

pub fn method(self, m: HighsMethod) -> HighsOptions

Source

pub fn parallel(self, on: bool) -> HighsOptions

Trait Implementations§

Source§

impl Clone for HighsOptions

Source§

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)

Performs copy-assignment from source. Read more
Source§

impl Debug for HighsOptions

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for HighsOptions

Source§

fn default() -> HighsOptions

Returns the “default value” for a type. Read more
Source§

impl HasUniversal for HighsOptions

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UniversalOptionsExt for T
where T: HasUniversal,

Source§

fn time_limit(self, d: Duration) -> Self

Source§

fn threads(self, n: u32) -> Self

Source§

fn verbose(self, on: bool) -> Self

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more