Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,71 @@
|
|||
class
|
||||
CONTINUOUS_KNAPSACK
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature
|
||||
|
||||
make
|
||||
local
|
||||
tup: TUPLE [name: STRING; weight: REAL_64; price: REAL_64]
|
||||
do
|
||||
create tup
|
||||
create items.make_filled (tup, 1, 9)
|
||||
create sorted.make
|
||||
sorted.extend (-36.0 / 3.8)
|
||||
sorted.extend (-43.0 / 5.4)
|
||||
sorted.extend (-90.0 / 3.6)
|
||||
sorted.extend (-45.0 / 2.4)
|
||||
sorted.extend (-30.0 / 4.0)
|
||||
sorted.extend (-56.0 / 2.5)
|
||||
sorted.extend (-67.0 / 3.7)
|
||||
sorted.extend (-95.0 / 3.0)
|
||||
sorted.extend (-98.0 / 5.9)
|
||||
tup := ["beef", 3.8, 36.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["pork", 5.4, 43.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["ham", 3.6, 90.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["greaves", 2.4, 45.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["flitch", 4.0, 30.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["brawn", 2.5, 56.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["welt", 3.7, 67.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["salami", 3.0, 95.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
tup := ["sausage", 5.9, 98.0]
|
||||
items [sorted.index_of (- tup.price / tup.weight, 1)] := tup
|
||||
find_solution
|
||||
end
|
||||
|
||||
find_solution
|
||||
-- Solution for the continuous Knapsack Problem.
|
||||
local
|
||||
maxW, value: REAL_64
|
||||
do
|
||||
maxW := 15
|
||||
across
|
||||
items as c
|
||||
loop
|
||||
if maxW - c.item.weight > 0 then
|
||||
io.put_string ("Take all: " + c.item.name + ".%N")
|
||||
value := value + c.item.price
|
||||
maxW := maxW - c.item.weight
|
||||
elseif maxW /= 0 then
|
||||
io.put_string ("Take " + maxW.truncated_to_real.out + " kg off " + c.item.name + ".%N")
|
||||
io.put_string ("The total value is " + (value + (c.item.price / c.item.weight) * maxW).truncated_to_real.out + ".")
|
||||
maxW := 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
items: ARRAY [TUPLE [name: STRING; weight: REAL_64; price: REAL_64]]
|
||||
|
||||
sorted: SORTED_TWO_WAY_LIST [REAL_64]
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue