CPSolver.Examples.Knapsack (Fixpoint v0.8.5)

The 'knapsack' problem is mathematically formulated in the following way. Given n items to choose from, each item i ∈ 0 ...n − 1 has a value v[i] and a weight w[i]. The knapsack has a limited capacity K. Let x[i] be a variable that is 1 if you choose to take item i and 0 if you leave item i behind. Then the knapsack problem is formalized as the following optimization problem:

Maximize sum(x[i]v[i]), i = 0 ... n - 1 subject to sum(x[i] w[i]) <= K

Input data: First line: "n K" Next lines: "value weight"

Summary

Functions

Link to this function

check_solution(solution, optimal, values, weights, capacity)

Link to this function

free_space_minimization_model(values, weights, capacity)

Link to this function

model(input, kind \\ :value_maximization)

Link to this function

model(values, weights, capacity, kind \\ :value_maximization)

Link to this function

prebuild_model(values, weights, capacity)

Link to this function

tourist_knapsack_model()

From Rosetta code: http://rosettacode.org/wiki/Knapsack_problem/0-1

A tourist wants to make a good trip at the weekend with his friends. They will go to the mountains to see the wonders of nature, so he needs to pack well for the trip. He has a good knapsack for carrying things, but knows that he can carry a maximum of only 4kg in it and it will have to last the whole day. He creates a list of what he wants to bring for the trip but the total weight of all items is too much. He then decides to add columns to his initial list detailing their weights and a numerical value representing how important the item is for the trip.

Here is the list: Table of potential knapsack items item weight (dag) value map 9 150 compass 13 35 water 153 200 sandwich 50 160 glucose 15 60 tin 68 45 banana 27 60 apple 39 40 cheese 23 30 beer 52 10 suntan cream 11 70 camera 32 30 T-shirt 24 15 trousers 48 10 umbrella 73 40 waterproof trousers 42 70 waterproof overclothes 43 75 note-case 22 80 sunglasses 7 20 towel 18 12 socks 4 50 book 30 10 knapsack <=400 dag ?

The tourist can choose to take any combination of items from the list, but only one of each item is available. He may not cut or diminish the items, so he can only take whole units of any item.

Which items does the tourist carry in his knapsack so that their total weight does not exceed 400 dag [4 kg], and their total value is maximised?

[dag = decagram = 10 grams]

Link to this function

value_maximization_model(values, weights, capacity)