Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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