RosettaCodeData/Task/Knapsack-problem-Bounded/Ursala/knapsack-problem-bounded.ur...

45 lines
1.0 KiB
Plaintext

#import std
#import flo
#import lin
items = # name: (weight,value,limit)
<
'map': (9,150,1),
'compass': (13,35,1),
'water': (153,200,3),
'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),
'suntan cream': (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)>
system = # convert the item list to mixed integer programming problem specification
linear_system$[
integers: ~&nS,
upper_bounds: * ^|/~& float@rr,
lower_bounds: @nS ~&\*0.+ :/'(slack)',
costs: * ^|/~& negative+ float@rl,
equations: ~&iNC\400.+ :/(1.,'(slack)')+ * ^|rlX/~& float@l]
format = @t --^*p\pad` @nS @mS printf/*'%0.0f '
#show+
main = format solution system items