public static bool DecisionComparator(DecisionResult result, KnapsackReferenceSolution referenceSolution) { var shouldPermutationExist = referenceSolution.Price >= result.KnapsackInstance.MinimalPrice; if (result.PermutationExists != shouldPermutationExist) { Console.WriteLine($"Permutation instance solution (id {result.KnapsackInstance.Id}) incorrect," + $" result: {result.PermutationExists}, expected result: {shouldPermutationExist}"); return(false); } return(true); }
public static bool ConstructiveComparator(ConstructiveResult result, KnapsackReferenceSolution referenceSolution) { //Calculate and save epsilon var optimalPrice = referenceSolution.Price; var actualPrice = result.Configuration.Price; if (Math.Max(actualPrice, optimalPrice) == 0) { result.Epsilon = 0; } else { result.Epsilon = (float)Math.Abs(actualPrice - optimalPrice) / Math.Max(actualPrice, optimalPrice); } if (result.Configuration.Price != referenceSolution.Price || result.Configuration.Weight > result.KnapsackInstance.KnapsackSize) { Console.WriteLine($"Permutation instance solution (id {result.KnapsackInstance.Id}) incorrect," + $" result: {OutputWriter.ItemVectorToString(result.Configuration.ItemVector)} (price {result.Configuration.Price})" + $" expected result: {OutputWriter.ItemVectorToString(referenceSolution.ItemVector)} (price {referenceSolution.Price})"); return(false); } return(true); }