Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,81 @@
|
|||
import mip,util.
|
||||
|
||||
go =>
|
||||
data(AllItems,MaxWeight),
|
||||
[Items,Weights,Values,Pieces] = transpose(AllItems),
|
||||
|
||||
knapsack_bounded(Weights,Values,Pieces,MaxWeight, X,TotalWeight,TotalValue),
|
||||
|
||||
print_solution(Items,Weights,Values, X,TotalWeight,TotalValue),
|
||||
nl.
|
||||
|
||||
% Print the solution
|
||||
print_solution(Items,Weights,Values, X,TotalWeight,TotalValue) ?=>
|
||||
println("\nThese are the items to pick:"),
|
||||
println(" Item Weight Value"),
|
||||
|
||||
foreach(I in 1..Items.len)
|
||||
if X[I] > 0 then
|
||||
printf("* %d %-29w %3d %3d\n", X[I],Items[I],Weights[I],Values[I])
|
||||
end
|
||||
end,
|
||||
nl,
|
||||
printf("Total weight: %d\n", TotalWeight),
|
||||
printf("Total value: %d\n", TotalValue),
|
||||
nl.
|
||||
|
||||
% Solve knapsack problem
|
||||
knapsack_bounded(Weights,Values,Pieces,MaxWeight, X,TotalWeight,TotalValue) =>
|
||||
NumItems = length(Weights),
|
||||
|
||||
% Variables
|
||||
MaxPieces = max(Pieces),
|
||||
X = new_list(NumItems),
|
||||
X :: 0..MaxPieces,
|
||||
|
||||
% Constraints
|
||||
SumValues = sum(Values),
|
||||
TotalValue :: 0..SumValues,
|
||||
TotalWeight :: 0..MaxWeight,
|
||||
|
||||
scalar_product(Weights,X,TotalWeight),
|
||||
scalar_product(Values,X,TotalValue),
|
||||
|
||||
TotalWeight #<= MaxWeight,
|
||||
|
||||
% Check number of pieces
|
||||
foreach({XVal,Piece} in zip(X,Pieces))
|
||||
XVal #=< Piece
|
||||
end,
|
||||
|
||||
% Search
|
||||
Vars = X ++ [TotalWeight, TotalValue],
|
||||
solve($[max(TotalValue),down],Vars).
|
||||
|
||||
% data
|
||||
data(Items,MaxWeight) =>
|
||||
Items =
|
||||
% Item Weight Value Pieces
|
||||
[["map", 9, 150, 1],
|
||||
["compass", 13, 35, 1],
|
||||
["water", 153, 200, 2],
|
||||
["sandwich", 50, 60, 2],
|
||||
["glucose", 15, 60, 2],
|
||||
["tin", 68, 45, 3],
|
||||
["banana", 27, 60, 3],
|
||||
["apple", 39, 40, 3],
|
||||
["cheese", 23, 30, 1],
|
||||
["beer", 52, 10, 3],
|
||||
["suntancream", 11, 70, 1],
|
||||
["camera", 32, 30, 1],
|
||||
["T-shirt", 24, 15, 2],
|
||||
["trousers", 48, 10, 2],
|
||||
["umbrella", 73, 40, 1],
|
||||
["waterproof trousers", 42, 70, 1],
|
||||
["waterproof overclothes", 43, 75, 1],
|
||||
["note-case", 22, 80, 1],
|
||||
["sunglasses", 7, 20, 1],
|
||||
["towel", 18, 12, 2],
|
||||
["socks", 4, 50, 1],
|
||||
["book", 30, 10, 2]],
|
||||
MaxWeight = 400.
|
||||
Loading…
Add table
Add a link
Reference in a new issue