Ejemplo n.º 1
0
def labcdefg():
    subway = nx.Graph()

    STATIONS = [tuple(['a', 0, 10, 0, 1, ['1']]), tuple(['b', 10, 10, 0, 1, ['1']]), tuple(['c', 20, 10, 0, 1, ['1','2']]), tuple(['d', 30, 10, 0, 1, ['1']]),tuple(['e', 20, 30, 0, 1, ['2']]), tuple(['f', 20, 20, 0, 1, ['2']]), tuple(['g', 20, 0, 0, 1, ['2']])]

    stations = list()

    for S in STATIONS:
        stations.append(tools.LineStation(*S))

    for s in stations:
        subway.add_node(s)

    lines = { '1': tools.Line('1',stations[0:4]),
              '2': tools.Line('2', [stations[4],stations[5],stations[2],stations[6]] )}

    for l in lines.values():
        for pair in pairwise(l.route):
            dist = np.linalg.norm([pair[0].xy,pair[1].xy])
            subway.add_edge(*pair, distance=dist)


    train1 = tools.Train('1-1', 30, lines['1'], stations[0], 1, 1.0, verbose=0)
    train2 = tools.Train('1-2', 30, lines['1'], stations[1], 1, 1.0, verbose=0)
    train3 = tools.Train('1-3', 30, lines['1'], stations[2], 1, 1.0, verbose=0)
    train4 = tools.Train('1-4', 30, lines['1'], stations[3], 1, 1.0, verbose=1)


    trains = [train1,train2,train3,train4]



    return subway,lines,stations,trains
Ejemplo n.º 2
0
def circle():
    """
    This system has 4 lines.
    Line 1: a-b-c-d
    Line 2: e-f-c-g
    CircleLine 3: c-f-i-b-h-g
    Line 4: a-c-e
    """
    subway = nx.Graph()

    STATIONS = [tuple(['a', 0, 10, 0, 1, ['1','4']]), tuple(['b', 10, 10, 0, 1, ['1','3']]), tuple(['c', 20, 10, 0, 1, ['1','2','3','4']]), tuple(['d', 30, 10, 0, 1, ['1']]),tuple(['e', 20, 30, 0, 1, ['2','4']]), tuple(['f', 20, 20, 0, 1, ['2','3']]), tuple(['g', 20, 0, 0, 1, ['2','3']]),tuple(['h', 10, 0, 0, 1, ['3']]),tuple(['i', 10, 20, 0, 1, ['3']])]
    stations = list()

    for S in STATIONS:
        stations.append(tools.LineStation(*S))
    
    for s in stations:
        subway.add_node(s)

    lines = { '1': tools.Line('1',stations[0:4]),
              '2': tools.Line('2', [stations[4],stations[5],stations[2],stations[6]]),
              '3': tools.CircleLine('3', [stations[2], stations[5],stations[8], stations[1],stations[7],stations[6]]),
              '4': tools.Line('4', [stations[0], stations[2], stations[4]])
              }

    for l in lines.values():
        for pair in pairwise(l.route):
            dist = np.linalg.norm([pair[0].xy,pair[1].xy])
            subway.add_edge(*pair, distance=dist)


    train11 = tools.Train('1-1', 300, lines['1'], stations[0], 1, 1.0, verbose=0)
    train12 = tools.Train('1-2', 300, lines['1'], stations[3], -1, 1.0, verbose=0)
    train21 = tools.Train('2-1', 300, lines['2'], stations[4], 1, 1.0, verbose=0)
    train22 = tools.Train('2-2', 300, lines['2'], stations[2], -1, 1.0, verbose=0)
    train31 = tools.Train('3-1', 500, lines['3'], stations[2], 1, 1.0, verbose=0)
    train32 = tools.Train('3-2', 500, lines['3'], stations[6], -1, 1.0, verbose=0)
    train41 = tools.Train('4-1', 300, lines['4'], stations[0], 1, 1.0, verbose=0)
    train42 = tools.Train('4-2', 300, lines['4'], stations[4], -1, 1.0, verbose=0)

    trains = [train11,train12,train21,train22,train31, train32,train41,train42]



    return subway,lines,stations,trains
Ejemplo n.º 3
0
def nyc(add=False, block="none"):
    subway = nx.Graph()

    # filling up stations
    STATIONS = []
    with open('../listOfStationsConverted.txt') as f:
        #skip header at the first row
        f.readline()
        rows = (line.strip().split("\t") for line in f)
        # row[0]: name key
        # row[5]: x position
        # row[4]: y position
        # row[3]: xy grid, determines +/- sign of x and y
        # min passenger: 0
        # max passenger: 1
        # row[0].split(";")[-1]: line
        for row in rows:
            STATIONS.append(
                tuple([
                    row[0],
                    (int(row[5]) if
                     (row[3][-2] == 'X') else int(row[5]) - 100000),
                    (int(row[4]) if
                     (row[3][-1] == 'L') else int(row[4]) - 100000), 0, 1,
                    list(row[0].split(";")[-1])
                ]))

    stations = dict()

    for S in STATIONS:
        stations[S[0]] = tools.LineStation(*S)

    for s in stations.itervalues():
        subway.add_node(s)

# filling up lines
    lines = dict()
    lines_information = {
        '1': [],
        '2': [],
        '3': [],
        '4': [],
        '5': [],
        '6': [],
        '7': [],
        'A': [],
        'B': [],
        'C': [],
        'D': [],
        'E': [],
        'F': [],
        'G': [],
        'H': [],
        'J': [],
        'L': [],
        'M': [],
        'N': [],
        'Q': [],
        'R': [],
        'S': [],
        's': [],
        'Z': []
    }

    with open('../listOfLines.txt') as f:
        rows = (line.strip().split("\t") for line in f)
        # row[0]: line
        # row[1:]: sequence of stations from north to south
        for row in rows:
            lines_information[row[0]] = row[1:]

# construct a new line
    if add:
        lines_information['8'] = [
            ';4567S', ';7BDFM', ';1237ACENQRS', '34th St;ACE', '34th St;123',
            ';BDFMNQR', '33rd St;6', '28th St;6', '23rd St;6', ';456LNQR',
            ';123FLM', ';ACEL', '23rd St;CE', '34th St;ACE', '34th St;123',
            ';BDFMNQR', '33rd St;6'
        ]

# block a line
    if block == "all":
        del lines_information['R']
    elif block == "nqr":
        lines_information['N'] = [
            ';2345BDNQR', '36th St;DNR', '59th St;NR', '8th Av;N',
            'Fort Hamilton Parkway;N', ';DN', '18th Av;N', '20th Av;N',
            'Bay Parkway-22nd Av;N', 'Kings Highway;N', 'Av U;N', '86th St;N',
            ';DFNQ'
        ]
        lines_information['Q'] = [
            'DeKalb Av;BQR', ';2345BDNQR', '7th Av;BQ', 'Prospect Park;BQs',
            'Parkside Av;Q', 'Church Av;BQ', 'Beverly Rd;Q', 'Cortelyou Rd;Q',
            'Newkirk Av;BQ', 'Av H;Q', 'Av J;Q', 'Av M;Q', 'Kings Highway;BQ',
            'Av U;Q', 'Neck Rd;Q', 'Sheepshead Bay;BQ', 'Brighton Beach;BQ',
            'Ocean Parkway;Q', 'West 8th St;FQ', ';DFNQ'
        ]
        lines_information['R'] = [
            ';2345R', ';ACFR', 'DeKalb Av;BQR', ';2345BDNQR', 'Union St;R',
            ';FGR', 'Prospect Av;R', '25th St;R', '36th St;DNR', '45th St;R',
            '53rd St;R', '59th St;NR', 'Bay Ridge Av;R', '77th St;R',
            '86th St;R', '95th St;R'
        ]
    else:
        pass

    for key, value in lines_information.iteritems():
        stations_list = []
        for j in value:
            stations_list.append(stations[j])
        # line '8' is a circle line
        if key == '8':
            lines[key] = tools.CircleLine(key, stations_list)
        else:
            lines[key] = tools.Line(key, stations_list)

    # add edges
    for l in lines.values():
        for pair in pairwise(l.route):
            dist = np.linalg.norm([pair[0].xy, pair[1].xy])
            subway.add_edge(*pair, distance=dist)

# filling up trains
    trains = []
    # forward direction
    for key in lines_information.iterkeys():
        iterating_group = range(0, (len(lines_information[key]) + 3) / 5)
        serial = 1
        for j in iterating_group:
            trains.append(
                tools.Train(name=key + '-' + str(serial),
                            capacity=30,
                            line=lines[key],
                            start=stations[lines_information[key][5 * j]],
                            direction=1,
                            velocity=100.0,
                            verbose=0))
            serial += 1
        # reverse direction
        iterating_group.reverse()
        for j in iterating_group:
            trains.append(
                tools.Train(name=key + '-' + str(serial),
                            capacity=30,
                            line=lines[key],
                            start=stations[lines_information[key][5 * j]],
                            direction=-1,
                            velocity=100.0,
                            verbose=0))
            serial += 1

    return subway, lines, stations, trains