45 lines
1.0 KiB
Plaintext
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
|