use anyhow::Result;
use ommx::{coeff, quadratic, Constraint, DecisionVariable, Function, Instance, Sense, VariableID};
use std::collections::BTreeMap;
fn main() -> Result<()> {
let mut decision_variables = BTreeMap::new();
{
let mut var = DecisionVariable::binary(VariableID::from(0));
var.metadata.name = Some("x".to_string());
var.metadata.subscripts = vec![0, 0];
decision_variables.insert(VariableID::from(0), var);
}
{
let mut var = DecisionVariable::binary(VariableID::from(1));
var.metadata.name = Some("x".to_string());
var.metadata.subscripts = vec![1, 0];
decision_variables.insert(VariableID::from(1), var);
}
let objective = Function::Quadratic(
coeff!(2.0) * quadratic!(0, 1)
+ coeff!(-1.0) * quadratic!(0)
+ coeff!(-1.0) * quadratic!(1)
+ coeff!(3.0),
);
let constraints: BTreeMap<_, Constraint> = BTreeMap::new();
let instance = Instance::new(Sense::Minimize, objective, decision_variables, constraints)?;
println!("Sense: {:?}", instance.sense());
println!(
"Decision variables: {}",
instance.decision_variables().len()
);
println!("Constraints: {}", instance.constraints().len());
println!("Objective: {:?}", instance.objective());
println!("\nDecision variables:");
for (id, var) in instance.decision_variables() {
println!(
" Variable {}: name={:?}, subscripts={:?}",
id, var.metadata.name, var.metadata.subscripts
);
}
Ok(())
}