use lpsolve::prelude::*;
fn main() -> Result<()> {
println!("=== Production Planning Problem ===\n");
let solution = Problem::builder()
.name("Production Planning")?
.cols(2)
.max(&[30.0, 50.0]) .named_constraint("Labor", &[2.0, 3.0], Le, 100.0)?
.named_constraint("Wood", &[1.0, 2.0], Le, 60.0)?
.non_negative() .variable_names(&["chairs", "tables"])?
.solve()?;
if solution.is_optimal() {
println!("✓ Found optimal solution!");
println!(" Objective value (profit): ${:.2}", solution.objective_value());
if let Some(chairs) = solution.variable(1) {
println!(" Chairs to produce: {:.2}", chairs);
}
if let Some(tables) = solution.variable(2) {
println!(" Tables to produce: {:.2}", tables);
}
if let Some(vars) = solution.variables() {
println!("\n Solution vector: {:?}", vars);
}
println!("\n Using visitor pattern:");
solution.visit_variables(|index, value| {
let name = if index == 0 { "chairs" } else { "tables" };
println!(" {} (x{}): {:.2}", name, index + 1, value);
});
println!("\n Solver statistics:");
println!(" Iterations: {}", solution.iterations());
println!(" Time elapsed: {:.4}s", solution.time_elapsed());
} else {
println!("✗ Problem status: {:?}", solution.status());
}
Ok(())
}