pub fn multi_dimensional_knapsack(
values: &[f64],
weights: &[Vec<f64>],
capacities: &[f64],
) -> OptimizeResult<f64>Expand description
Solve the multi-dimensional 0-1 knapsack problem.
Maximizes sum(values[i] * x[i]) subject to:
- For each dimension
d:sum(weights[d][i] * x[i]) <= capacities[d] x[i] in {0, 1}
Uses a branch-and-bound algorithm with a greedy LP upper bound.
§Arguments
values– item values (non-negative), length nweights–d × nweight matrix;weights[d][i]is the weight of itemiin dimensiondcapacities– length-d capacity vector
§Returns
The maximum total value achievable.
§Errors
Returns OptimizeError::InvalidInput on invalid dimensions or negative inputs.
§Example
use scirs2_optimize::integer::knapsack::multi_dimensional_knapsack;
// 3 items, 2 dimensions
let values = vec![10.0, 6.0, 5.0];
let weights = vec![
vec![2.0, 3.0, 1.0], // dimension 0 weights
vec![4.0, 1.0, 2.0], // dimension 1 weights
];
let capacities = vec![5.0, 6.0];
let val = multi_dimensional_knapsack(&values, &weights, &capacities).expect("valid input");
assert!(val >= 15.0 - 1e-6);