Ejemplo n.º 1
0
def labelling(resources, graph, data, employee, extensionLimit):
    '''SPPRC labelling algorithm. See thesis for algorithmic details'''

    # Initialize start label
    initial_label = Label.initialize(node=graph.nodes[0],
                                     resources=resources,
                                     data=data,
                                     employee=employee)

    # Increment label name
    label_name = initial_label.name + 1

    # Initialize unprocessed_labels and processed_labels
    unprocessed_labels = [initial_label]
    processed_labels = []

    # Assume extension is not limited by extensionLimit
    extension_limited = False

    # While there are unprocessed labels
    while unprocessed_labels:
        # Get an unprocessed label
        cur_label = unprocessed_labels.pop(0)

        # If a limit on the number of labels extended is set, limit extension
        if extensionLimit != None:
            # Set reference lenght of unprocessed labels and cur_label
            referenceLength = 1 + len(unprocessed_labels)
            # Find all labels in unprocessed_labels that are in the node
            unprocessed_labels, labels_in_node = labelsInNode(
                labels=unprocessed_labels,
                label=cur_label,
                size=extensionLimit)
            # Check if no labels are discarded by extensionLimit
            if (not extension_limited
                    and len(unprocessed_labels) + len(labels_in_node) <
                    referenceLength):
                extension_limited = True
            # Extend all labels_in_node
            extended_labels = []
            for label in labels_in_node:
                labels, label_name = label.extend(label_name, resources, graph,
                                                  data, employee)
                extended_labels += labels
        else:
            # Otherwise, extend the label as if there was no limit
            extended_labels, label_name = cur_label.extend(
                label_name, resources, graph, data, employee)

        # Check dominance among all labels
        for extended_label in extended_labels:
            # The initial hypothesis is that the extended label is not dominated
            extended_label_dominated = False
            # Iterate over processed labels
            for processed_label in processed_labels:
                # Check if extended_label is dominated by processed_label
                if processed_label.dominance(extended_label, resources, data,
                                             employee):
                    extended_label_dominated = True
                # Check if processed_label is dominated by extended_label
                elif extended_label.dominance(processed_label, resources, data,
                                              employee):
                    # If so, remove the dominated processed_label
                    processed_labels.remove(processed_label)
            # Iterate over unprocessed labels
            for unprocessed_label in unprocessed_labels:
                # Check if extended_label is dominated by unprocessed_label
                if unprocessed_label.dominance(extended_label, resources, data,
                                               employee):
                    extended_label_dominated = True
                # Check if unprocessed_label is dominated by extended_label
                elif extended_label.dominance(unprocessed_label, resources,
                                              data, employee):
                    unprocessed_labels.remove(unprocessed_label)
            # If extended_label is not dominated, add it to unprocessed_labels
            if not extended_label_dominated:
                unprocessed_labels.append(extended_label)
        # Add unprocessed_label to the set of processed_labels
        if extensionLimit == None:
            processed_labels.append(cur_label)
        else:
            processed_labels += labels_in_node

    return processed_labels, extension_limited
Ejemplo n.º 2
0
	def initialize(self):
		Label.initialize(self)
		self.__text = ''
		self.__url = ''
		self.set_style(0)