def create_test_data_flow() -> Tuple[FlowGraph, ComputationGraph, List[SubTestCase]]:
    flow_graph = FlowGraph()

    flow_graph.add_edge('D', 'A', Weight(1.0), None)
    flow_graph.add_edge('E', 'A', Weight(1.0), None)
    flow_graph.add_edge('A', 'B', Weight(2.0), None)
    flow_graph.add_edge('B', 'C', Weight(0.7), Weight(0.1))
    flow_graph.add_edge('F', 'C', Weight(1.0), None)
    flow_graph.add_edge('C', 'G', None, None)
    flow_graph.add_edge('H', 'G', Weight(0.5), Weight(0.9))
    flow_graph.add_edge('I', 'G', Weight(0.4), Weight(0.1))

    comp_graph = ComputationGraph()

    comp_graph.add_edge('D', 'A', Weight(1.0), None)
    comp_graph.add_edge('E', 'A', Weight(1.0), None)
    comp_graph.add_edge('A', 'B', Weight(2.0), Weight(0.5))
    comp_graph.add_edge('B', 'C', Weight(0.7), Weight(0.1))
    comp_graph.add_edge('F', 'C', Weight(1.0), Weight(0.9))
    comp_graph.add_edge('C', 'G', Weight(1.0), Weight(0.0))
    comp_graph.add_edge('H', 'G', Weight(0.5), Weight(0.9))
    comp_graph.add_edge('I', 'G', Weight(0.4), Weight(0.1))

    # Set split info
    comp_graph.mark_node_split('C', EdgeType.REVERSE)
    comp_graph.mark_node_split('G', EdgeType.REVERSE)

    return flow_graph, comp_graph, []
示例#2
0
    def _create_computation_graph(self) -> ComputationGraph:
        """ Create a Computation Graph based on the Flow Graph """
        graph = ComputationGraph()

        for u, v, weight, reverse_weight in self.edges():
            graph.add_edge(u, v, weight, reverse_weight)

        for n, split in self._direct_graph.nodes.data(
                'split'):  # type: Node, bool
            if split:
                graph.mark_node_split(n, EdgeType.DIRECT)

        for n, split in self._reverse_graph.nodes.data(
                'split'):  # type: Node, bool
            if split:
                graph.mark_node_split(n, EdgeType.REVERSE)

        return graph
def create_test_data_reverse() -> Tuple[FlowGraph, ComputationGraph, List[SubTestCase]]:
    flow_graph = FlowGraph()

    flow_graph.add_edge('A', 'B', Weight(2.0), Weight(0.5))
    flow_graph.add_edge('B', 'C', Weight(0.7), Weight(0.1))
    flow_graph.add_edge('C', 'D', Weight(0.7), Weight(0.1))
    flow_graph.add_edge('C', 'E', Weight(0.3), Weight(0.1))
    flow_graph.add_edge('F', 'G', Weight(0.7), Weight(0.1))
    flow_graph.add_edge('G', 'E', Weight(0.7), Weight(0.1))
    flow_graph.add_edge('B', 'G', Weight(0.7), Weight(0.1))

    comp_graph = ComputationGraph()

    comp_graph.add_edge('A', 'B', Weight(2.0), Weight(0.5))
    comp_graph.add_edge('B', 'C', Weight(0.7), Weight(0.1))
    comp_graph.add_edge('C', 'D', Weight(0.7), Weight(0.1))
    comp_graph.add_edge('C', 'E', Weight(0.3), Weight(0.1))
    comp_graph.add_edge('F', 'G', Weight(0.7), Weight(0.1))
    comp_graph.add_edge('G', 'E', Weight(0.7), Weight(0.1))
    comp_graph.add_edge('B', 'G', Weight(0.7), Weight(0.1))

    # Set split info
    comp_graph.mark_node_split('C', EdgeType.DIRECT)

    subtest_cases: List[SubTestCase] = []

    # Case 0
    params = {'B': Value(5), 'C': Value(10)}
    conflicts = {
        'B': {'C'},
        'C': {'B'}
    }
    combinations = {
        frozenset({'B'}),
        frozenset({'C'})
    }
    results = {
        ('A', frozenset({'B'})): Value(2.5),
        ('A', frozenset({'C'})): None
    }
    subtest_cases.append(SubTestCase(params, conflicts, combinations, results))

    return flow_graph, comp_graph, subtest_cases
def create_test_data_star() -> Tuple[FlowGraph, ComputationGraph, List[SubTestCase]]:
    flow_graph = FlowGraph()

    flow_graph.add_edge('A', 'B', Weight(0.05), None)
    flow_graph.add_edge('A', 'C', Weight(0.7), None)
    flow_graph.add_edge('A', 'D', Weight(0.1), None)
    flow_graph.add_edge('A', 'E', Weight(0.15), None)

    comp_graph = ComputationGraph()

    comp_graph.add_edge('A', 'B', Weight(0.05), Weight(20.0))
    comp_graph.add_edge('A', 'C', Weight(0.7), Weight(1.4285714))
    comp_graph.add_edge('A', 'D', Weight(0.1), Weight(10.0))
    comp_graph.add_edge('A', 'E', Weight(0.15), Weight(6.66666667))

    # Set split info
    comp_graph.mark_node_split('A', EdgeType.DIRECT)

    subtest_cases: List[SubTestCase] = []

    # Case 0
    params = {'B': Value(5), 'C': Value(10), 'D': Value(8), 'E': Value(12)}
    conflicts = {
        'B': {'C', 'D', 'E'},
        'C': {'B', 'D', 'E'},
        'D': {'B', 'C', 'E'},
        'E': {'B', 'C', 'D'}
    }
    combinations = {
        frozenset({'B'}),
        frozenset({'C'}),
        frozenset({'D'}),
        frozenset({'E'})
    }
    results = {
        ('A', frozenset({'B'})): Value(100),
        ('A', frozenset({'C'})): Value(14.285714),
        ('A', frozenset({'D'})): Value(80),
        ('A', frozenset({'E'})): Value(80)
    }
    subtest_cases.append(SubTestCase(params, conflicts, combinations, results))

    # Case 1
    params = {'A': Value(5), 'B': Value(10)}
    conflicts = {
        'A': {'B'},
        'B': {'A'}
    }
    combinations = {
        frozenset({'A'}),
        frozenset({'B'})
    }
    results = {
        ('A', frozenset({'B'})): Value(200),
        ('A', frozenset({'A'})): Value(5),
        ('B', frozenset({'B'})): Value(10),
        ('B', frozenset({'A'})): Value(0.25),
        ('C', frozenset({'B'})): Value(140),
        ('C', frozenset({'A'})): Value(3.5)
    }
    subtest_cases.append(SubTestCase(params, conflicts, combinations, results))

    return flow_graph, comp_graph, subtest_cases