/** This is a test for the 0/1 knapsack routines in knapsack.frink The test data comes from: https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html */ use knapsack.frink // Test with units of measure. test[[60 dollars, 100 dollars, 120 dollars], [10 kg, 20 kg, 30 kg], 50 kg, [0,1,1]] // Test multiple choice knapsack println[] values = [[30 dollars, 60 dollars], [200 dollars, 140 dollars], [70 dollars, 120 dollars]] weights = [[10 kg, 15 kg], [35 kg, 20 kg], [25 kg, 30 kg]] println[knapsackMultiBrute[values, weights, 70 kg]] for n = 1 to 8 { set = "0\$n" println["\n\nTesting set \$set"] capacity = eval[read["https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/p\${set}_c.txt"]] weights = eval[splitLines[trim[read["https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/p\${set}_w.txt"]]]] values = eval[splitLines[trim[read["https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/p\${set}_p.txt"]]]] optimal = eval[splitLines[trim[read["https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/p\${set}_s.txt"]]]] test[values, weights, capacity, optimal] } test[values, weights, capacity, optimal] := { println["Capacity is \$capacity"] println["Number of values is " + length[values]] println["Values is \$values"] println["Weights is \$weights"] s = now[] [total, indices, outValues, outWeights] = knapsackBrute[values, weights, capacity] e = now[] println["Time: " + (e-s)] println["outValues is \$outValues"] println["outWeights is \$outWeights"] println["Total value is \$total"] println["Total weights is " + sum[outWeights]] println["Indices chosen: " + indices] optIndices = new array for i=0 to length[optimal]-1 if optimal@i == 1 optIndices.push[i] println["Optimal indices: " + indices] if toSet[indices] != toSet[optIndices] println["********** FAIL *********"] }