def parse_binary(binary_section): binary = {} for line in binary_section: line_pieces = line.split() add_to_dict_list(line_pieces[0],line_pieces[1],binary) add_to_dict_list(line_pieces[1],line_pieces[0],binary) return binary
def assignment_consistent(assignments): print "Checking if the proposed assignment is consistent with all constraints." #Only check the lower fitting limit if this assignment is #complete (e.g. ALL valuables have a value) check_lower_limit = len(assignments) == len(_valuables) # Create a dictionary that maps bags to valuables # dict{string:list[string]} bags_contents = {} for valuable in assignments: add_to_dict_list(assignments[valuable], valuable, bags_contents) for bag in bags_contents: print "Checking if assignments for bag %s are consistent." % bag num_items = len(bags_contents[bag]) # Check fitting limits if check_lower_limit and num_items < _bag_lower_bound: print "Not enough items in bag %s." % bag return False if num_items > _bag_upper_bound: print "Too many items in bag %s." % bag return False bag_weight = 0 print "Checking if the contents of bag %s exceed its weight limit." % bag #Check weight limit for valuable in bags_contents[bag]: # Add this valuable to the bag's weight. bag_weight += _valuables[valuable] # Did we go over the bag's weight limit? if bag_weight > _bags[bag]: print "Weight limit of bag %s exceeded." % bag return False # If we have a full assignment set, then ALL bags should be # in bags_contents if we have a lower bound > 0 if check_lower_limit and _bag_lower_bound > 0 and len(bags_contents) != len(_bags): return False print "Checking the constraint matrix for consistency." #Check constraint matrix! for valuable1 in assignments: for valuable2 in assignments: if valuable1 != valuable2: if not _constraint_matrices[(valuable1,valuable2)][assignments[valuable1]][assignments[valuable2]]: print "Assignment {%s = %s} and {%s = %s} is invalid." % (valuable1,assignment[valuable1],valuable2,assignment[valuable2]) return False print "Assignment determined to preserve consistency." #All tests pass! :D return True
def assignment_consistent(assignments): # Only check the lower fitting limit if this assignment is # complete (e.g. ALL valuables have a value) check_lower_limit = len(assignments) == len(_valuables) # Create a dictionary that maps bags to valuables # dict{string:list[string]} bags_contents = {} for valuable in assignments: add_to_dict_list(assignments[valuable], valuable, bags_contents) for bag in bags_contents: num_items = len(bags_contents[bag]) # Check fitting limits if check_lower_limit and num_items < _bag_lower_bound: return False if num_items > _bag_upper_bound: return False bag_weight = 0 # Check weight limit for valuable in bags_contents[bag]: # Add this valuable to the bag's weight. bag_weight += _valuables[valuable] # Did we go over the bag's weight limit? if bag_weight > _bags[bag]: return False # Do we have enough stuff in the bag (at least 90% of its capacity)? if check_lower_limit and bag_weight < 0.9 * _bags[bag]: return False # If we have a full assignment set, then ALL bags should be # in bags_contents if we have a lower bound > 0 if check_lower_limit and _bag_lower_bound > 0 and len(bags_contents) != len(_bags): return False # Check constraint matrix! for valuable1 in assignments: for valuable2 in assignments: if valuable1 != valuable2: if not _constraint_matrices[(valuable1, valuable2)][assignments[valuable1]][assignments[valuable2]]: return False # All tests pass! :D return True