In [1]:
import numpy as np

In [33]:
folder_name = "fake"
num_row = 10
num_col = 10
O_prob = 0.4
D_prob = 0.4
cap = 2000
length = 0.5
rhoj = 200
num_lane = 2
spd_lb = 20
spd_ub = 50

assign_horizon = 5
demand = 15

In [3]:
link_type = 'CTM'
node_type = 'FWJ'
connector_type = 'PQ'
O_type = 'DMOND'
D_type = 'DMDND'

In [4]:
file_attr = "MNM_input_"
node_file = file_attr + "node"
link_file = file_attr + "link"
snap_file = "Snap_graph"
od_file = file_attr + "od"
demand_file = file_attr + 'demand'

In [5]:
def add_node_str(node_num, type_str):
    return str(node_num) + ' ' + type_str + '\n'

In [6]:
def add_snap_str(link_num, from_node, to_node):
    return str(link_num) + ' ' + str(from_node) + ' ' + str(to_node) + '\n';

In [17]:
def add_link_str(link_num, link_type):
    # CTM 0.8 45 2200 200 1
    # PQ 1 99999 99999 99999 1
    if link_type != 'PQ':
        spd = np.round(np.random.random_sample() * (spd_ub - spd_lb)  + np.float(spd_lb))
        return str(link_num) + ' ' + str(link_type) + ' ' + str(length) + ' ' + str(spd) + ' ' + str(cap) + ' ' + str(rhoj) + ' ' + str(num_lane) + '\n'
    else:
        return str(link_num) + ' PQ 1 99999 99999 99999 1\n'

In [8]:
def add_OD(od_id, node_id):
    return str(od_id) + ' ' + str(node_id) + '\n'

In [18]:
link_str_list = []
node_str_list = []
snap_str_list = []
O_dict = dict()
D_dict = dict()
O_str_list = []
D_str_list = []

node_counter = 1
link_counter = 1
O_counter = 1
D_counter = 1

for i in xrange(num_row):
    for j in xrange(num_col):
        node_str_list.append(add_node_str(node_counter, node_type))
        if (j != num_col - 1):
            node1 = num_col * i + j + 1
            node2 = node1 + 1
            link_str_list.append(add_link_str(link_counter, link_type))
            snap_str_list.append(add_snap_str(link_counter, node1, node2))
            link_counter += 1
            link_str_list.append(add_link_str(link_counter, link_type))
            snap_str_list.append(add_snap_str(link_counter, node2, node1))   
            link_counter += 1
        if(i != num_row - 1):
            node1 = num_col * i + j + 1
            node2 = node1 + num_col
            link_str_list.append(add_link_str(link_counter, link_type))
            snap_str_list.append(add_snap_str(link_counter, node1, node2))
            link_counter += 1
            link_str_list.append(add_link_str(link_counter, link_type))
            snap_str_list.append(add_snap_str(link_counter, node2, node1)) 
            link_counter += 1
        node_counter += 1
            
for i in xrange(num_row):
    for j in xrange(num_col):
        node1 = num_col * i + j + 1
        if(np.random.random_sample() < O_prob or (i == 0 and j ==0)):
            node_str_list.append(add_node_str(node_counter, O_type))
            O_dict[O_counter] = node1
            O_str_list.append(add_OD(O_counter, node_counter))
            link_str_list.append(add_link_str(link_counter, connector_type))
            snap_str_list.append(add_snap_str(link_counter, node_counter, node1)) 
            link_counter += 1
            node_counter += 1
            O_counter += 1
        if(np.random.random_sample() < D_prob or (i == num_row -1 and j == num_col - 1)):
            node_str_list.append(add_node_str(node_counter, D_type))
            D_dict[D_counter] = node1
            D_str_list.append(add_OD(D_counter, node_counter))
            link_str_list.append(add_link_str(link_counter, connector_type))
            snap_str_list.append(add_snap_str(link_counter, node1, node_counter)) 
            link_counter += 1
            node_counter += 1
            D_counter += 1

In [12]:
print link_str_list
print node_str_list
print snap_str_list
print O_str_list
print D_str_list
print O_dict


['1 CTM 0.5 46.0 2000 200 2\n', '2 CTM 0.5 32.0 2000 200 2\n', '3 CTM 0.5 20.0 2000 200 2\n', '4 CTM 0.5 44.0 2000 200 2\n', '5 CTM 0.5 41.0 2000 200 2\n', '6 CTM 0.5 34.0 2000 200 2\n', '7 CTM 0.5 21.0 2000 200 2\n', '8 CTM 0.5 46.0 2000 200 2\n', '9 CTM 0.5 27.0 2000 200 2\n', '10 CTM 0.5 22.0 2000 200 2\n', '11 CTM 0.5 48.0 2000 200 2\n', '12 CTM 0.5 50.0 2000 200 2\n', '13 CTM 0.5 42.0 2000 200 2\n', '14 CTM 0.5 22.0 2000 200 2\n', '15 CTM 0.5 49.0 2000 200 2\n', '16 CTM 0.5 44.0 2000 200 2\n', '17 CTM 0.5 37.0 2000 200 2\n', '18 CTM 0.5 40.0 2000 200 2\n', '19 CTM 0.5 49.0 2000 200 2\n', '20 CTM 0.5 46.0 2000 200 2\n', '21 CTM 0.5 21.0 2000 200 2\n', '22 CTM 0.5 23.0 2000 200 2\n', '23 CTM 0.5 47.0 2000 200 2\n', '24 CTM 0.5 26.0 2000 200 2\n', '25 CTM 0.5 34.0 2000 200 2\n', '26 CTM 0.5 44.0 2000 200 2\n', '27 CTM 0.5 38.0 2000 200 2\n', '28 CTM 0.5 44.0 2000 200 2\n', '29 CTM 0.5 46.0 2000 200 2\n', '30 CTM 0.5 38.0 2000 200 2\n', '31 CTM 0.5 21.0 2000 200 2\n', '32 CTM 0.5 39.0 2000 200 2\n', '33 CTM 0.5 39.0 2000 200 2\n', '34 CTM 0.5 30.0 2000 200 2\n', '35 CTM 0.5 36.0 2000 200 2\n', '36 CTM 0.5 29.0 2000 200 2\n', '37 CTM 0.5 24.0 2000 200 2\n', '38 CTM 0.5 39.0 2000 200 2\n', '39 CTM 0.5 44.0 2000 200 2\n', '40 CTM 0.5 36.0 2000 200 2\n', '41 CTM 0.5 40.0 2000 200 2\n', '42 CTM 0.5 43.0 2000 200 2\n', '43 CTM 0.5 34.0 2000 200 2\n', '44 CTM 0.5 23.0 2000 200 2\n', '45 CTM 0.5 39.0 2000 200 2\n', '46 CTM 0.5 21.0 2000 200 2\n', '47 CTM 0.5 43.0 2000 200 2\n', '48 CTM 0.5 41.0 2000 200 2\n', '49 CTM 0.5 31.0 2000 200 2\n', '50 CTM 0.5 22.0 2000 200 2\n', '51 CTM 0.5 34.0 2000 200 2\n', '52 CTM 0.5 36.0 2000 200 2\n', '53 CTM 0.5 37.0 2000 200 2\n', '54 CTM 0.5 33.0 2000 200 2\n', '55 CTM 0.5 22.0 2000 200 2\n', '56 CTM 0.5 35.0 2000 200 2\n', '57 CTM 0.5 21.0 2000 200 2\n', '58 CTM 0.5 41.0 2000 200 2\n', '59 CTM 0.5 41.0 2000 200 2\n', '60 CTM 0.5 50.0 2000 200 2\n', '61 CTM 0.5 33.0 2000 200 2\n', '62 CTM 0.5 30.0 2000 200 2\n', '63 CTM 0.5 27.0 2000 200 2\n', '64 CTM 0.5 33.0 2000 200 2\n', '65 CTM 0.5 30.0 2000 200 2\n', '66 CTM 0.5 29.0 2000 200 2\n', '67 CTM 0.5 37.0 2000 200 2\n', '68 CTM 0.5 42.0 2000 200 2\n', '69 CTM 0.5 38.0 2000 200 2\n', '70 CTM 0.5 39.0 2000 200 2\n', '71 CTM 0.5 31.0 2000 200 2\n', '72 CTM 0.5 21.0 2000 200 2\n', '73 CTM 0.5 22.0 2000 200 2\n', '74 CTM 0.5 40.0 2000 200 2\n', '75 CTM 0.5 47.0 2000 200 2\n', '76 CTM 0.5 36.0 2000 200 2\n', '77 CTM 0.5 23.0 2000 200 2\n', '78 CTM 0.5 27.0 2000 200 2\n', '79 CTM 0.5 23.0 2000 200 2\n', '80 CTM 0.5 20.0 2000 200 2\n', '81 CTM 0.5 25.0 2000 200 2\n', '82 CTM 0.5 36.0 2000 200 2\n', '83 CTM 0.5 44.0 2000 200 2\n', '84 CTM 0.5 28.0 2000 200 2\n', '85 CTM 0.5 48.0 2000 200 2\n', '86 CTM 0.5 29.0 2000 200 2\n', '87 CTM 0.5 35.0 2000 200 2\n', '88 CTM 0.5 33.0 2000 200 2\n', '89 CTM 0.5 22.0 2000 200 2\n', '90 CTM 0.5 45.0 2000 200 2\n', '91 CTM 0.5 40.0 2000 200 2\n', '92 CTM 0.5 45.0 2000 200 2\n', '93 CTM 0.5 22.0 2000 200 2\n', '94 CTM 0.5 45.0 2000 200 2\n', '95 CTM 0.5 22.0 2000 200 2\n', '96 CTM 0.5 33.0 2000 200 2\n', '97 CTM 0.5 47.0 2000 200 2\n', '98 CTM 0.5 48.0 2000 200 2\n', '99 CTM 0.5 48.0 2000 200 2\n', '100 CTM 0.5 50.0 2000 200 2\n', '101 CTM 0.5 37.0 2000 200 2\n', '102 CTM 0.5 27.0 2000 200 2\n', '103 CTM 0.5 26.0 2000 200 2\n', '104 CTM 0.5 33.0 2000 200 2\n', '105 CTM 0.5 28.0 2000 200 2\n', '106 CTM 0.5 31.0 2000 200 2\n', '107 CTM 0.5 41.0 2000 200 2\n', '108 CTM 0.5 44.0 2000 200 2\n', '109 CTM 0.5 39.0 2000 200 2\n', '110 CTM 0.5 26.0 2000 200 2\n', '111 CTM 0.5 28.0 2000 200 2\n', '112 CTM 0.5 25.0 2000 200 2\n', '113 CTM 0.5 27.0 2000 200 2\n', '114 CTM 0.5 22.0 2000 200 2\n', '115 CTM 0.5 38.0 2000 200 2\n', '116 CTM 0.5 32.0 2000 200 2\n', '117 CTM 0.5 39.0 2000 200 2\n', '118 CTM 0.5 41.0 2000 200 2\n', '119 CTM 0.5 43.0 2000 200 2\n', '120 CTM 0.5 37.0 2000 200 2\n', '121 CTM 0.5 38.0 2000 200 2\n', '122 CTM 0.5 34.0 2000 200 2\n', '123 CTM 0.5 50.0 2000 200 2\n', '124 CTM 0.5 50.0 2000 200 2\n', '125 CTM 0.5 41.0 2000 200 2\n', '126 CTM 0.5 41.0 2000 200 2\n', '127 CTM 0.5 46.0 2000 200 2\n', '128 CTM 0.5 39.0 2000 200 2\n', '129 CTM 0.5 21.0 2000 200 2\n', '130 CTM 0.5 22.0 2000 200 2\n', '131 CTM 0.5 20.0 2000 200 2\n', '132 CTM 0.5 22.0 2000 200 2\n', '133 CTM 0.5 21.0 2000 200 2\n', '134 CTM 0.5 44.0 2000 200 2\n', '135 CTM 0.5 47.0 2000 200 2\n', '136 CTM 0.5 33.0 2000 200 2\n', '137 CTM 0.5 32.0 2000 200 2\n', '138 CTM 0.5 28.0 2000 200 2\n', '139 CTM 0.5 49.0 2000 200 2\n', '140 CTM 0.5 30.0 2000 200 2\n', '141 CTM 0.5 21.0 2000 200 2\n', '142 CTM 0.5 43.0 2000 200 2\n', '143 CTM 0.5 23.0 2000 200 2\n', '144 CTM 0.5 22.0 2000 200 2\n', '145 CTM 0.5 26.0 2000 200 2\n', '146 CTM 0.5 47.0 2000 200 2\n', '147 CTM 0.5 47.0 2000 200 2\n', '148 CTM 0.5 44.0 2000 200 2\n', '149 CTM 0.5 49.0 2000 200 2\n', '150 CTM 0.5 24.0 2000 200 2\n', '151 CTM 0.5 40.0 2000 200 2\n', '152 CTM 0.5 36.0 2000 200 2\n', '153 CTM 0.5 39.0 2000 200 2\n', '154 CTM 0.5 44.0 2000 200 2\n', '155 CTM 0.5 33.0 2000 200 2\n', '156 CTM 0.5 50.0 2000 200 2\n', '157 CTM 0.5 46.0 2000 200 2\n', '158 CTM 0.5 35.0 2000 200 2\n', '159 CTM 0.5 46.0 2000 200 2\n', '160 CTM 0.5 27.0 2000 200 2\n', '161 CTM 0.5 32.0 2000 200 2\n', '162 CTM 0.5 48.0 2000 200 2\n', '163 CTM 0.5 46.0 2000 200 2\n', '164 CTM 0.5 26.0 2000 200 2\n', '165 CTM 0.5 38.0 2000 200 2\n', '166 CTM 0.5 39.0 2000 200 2\n', '167 CTM 0.5 38.0 2000 200 2\n', '168 CTM 0.5 45.0 2000 200 2\n', '169 CTM 0.5 36.0 2000 200 2\n', '170 CTM 0.5 34.0 2000 200 2\n', '171 CTM 0.5 37.0 2000 200 2\n', '172 CTM 0.5 42.0 2000 200 2\n', '173 CTM 0.5 40.0 2000 200 2\n', '174 CTM 0.5 21.0 2000 200 2\n', '175 CTM 0.5 39.0 2000 200 2\n', '176 CTM 0.5 44.0 2000 200 2\n', '177 CTM 0.5 46.0 2000 200 2\n', '178 CTM 0.5 33.0 2000 200 2\n', '179 CTM 0.5 28.0 2000 200 2\n', '180 CTM 0.5 23.0 2000 200 2\n', '181 CTM 0.5 34.0 2000 200 2\n', '182 CTM 0.5 26.0 2000 200 2\n', '183 CTM 0.5 45.0 2000 200 2\n', '184 CTM 0.5 21.0 2000 200 2\n', '185 CTM 0.5 29.0 2000 200 2\n', '186 CTM 0.5 46.0 2000 200 2\n', '187 CTM 0.5 31.0 2000 200 2\n', '188 CTM 0.5 38.0 2000 200 2\n', '189 CTM 0.5 33.0 2000 200 2\n', '190 CTM 0.5 45.0 2000 200 2\n', '191 CTM 0.5 28.0 2000 200 2\n', '192 CTM 0.5 31.0 2000 200 2\n', '193 CTM 0.5 36.0 2000 200 2\n', '194 CTM 0.5 20.0 2000 200 2\n', '195 CTM 0.5 32.0 2000 200 2\n', '196 CTM 0.5 44.0 2000 200 2\n', '197 CTM 0.5 46.0 2000 200 2\n', '198 CTM 0.5 50.0 2000 200 2\n', '199 CTM 0.5 35.0 2000 200 2\n', '200 CTM 0.5 43.0 2000 200 2\n', '201 CTM 0.5 37.0 2000 200 2\n', '202 CTM 0.5 39.0 2000 200 2\n', '203 CTM 0.5 50.0 2000 200 2\n', '204 CTM 0.5 32.0 2000 200 2\n', '205 CTM 0.5 46.0 2000 200 2\n', '206 CTM 0.5 42.0 2000 200 2\n', '207 CTM 0.5 21.0 2000 200 2\n', '208 CTM 0.5 34.0 2000 200 2\n', '209 CTM 0.5 44.0 2000 200 2\n', '210 CTM 0.5 31.0 2000 200 2\n', '211 CTM 0.5 40.0 2000 200 2\n', '212 CTM 0.5 49.0 2000 200 2\n', '213 CTM 0.5 35.0 2000 200 2\n', '214 CTM 0.5 31.0 2000 200 2\n', '215 CTM 0.5 32.0 2000 200 2\n', '216 CTM 0.5 23.0 2000 200 2\n', '217 CTM 0.5 24.0 2000 200 2\n', '218 CTM 0.5 38.0 2000 200 2\n', '219 CTM 0.5 45.0 2000 200 2\n', '220 CTM 0.5 30.0 2000 200 2\n', '221 CTM 0.5 23.0 2000 200 2\n', '222 CTM 0.5 38.0 2000 200 2\n', '223 CTM 0.5 44.0 2000 200 2\n', '224 CTM 0.5 37.0 2000 200 2\n', '225 CTM 0.5 38.0 2000 200 2\n', '226 CTM 0.5 27.0 2000 200 2\n', '227 CTM 0.5 23.0 2000 200 2\n', '228 CTM 0.5 46.0 2000 200 2\n', '229 CTM 0.5 44.0 2000 200 2\n', '230 CTM 0.5 36.0 2000 200 2\n', '231 CTM 0.5 43.0 2000 200 2\n', '232 CTM 0.5 44.0 2000 200 2\n', '233 CTM 0.5 43.0 2000 200 2\n', '234 CTM 0.5 24.0 2000 200 2\n', '235 CTM 0.5 35.0 2000 200 2\n', '236 CTM 0.5 25.0 2000 200 2\n', '237 CTM 0.5 39.0 2000 200 2\n', '238 CTM 0.5 21.0 2000 200 2\n', '239 CTM 0.5 40.0 2000 200 2\n', '240 CTM 0.5 32.0 2000 200 2\n', '241 CTM 0.5 35.0 2000 200 2\n', '242 CTM 0.5 47.0 2000 200 2\n', '243 CTM 0.5 41.0 2000 200 2\n', '244 CTM 0.5 42.0 2000 200 2\n', '245 CTM 0.5 47.0 2000 200 2\n', '246 CTM 0.5 46.0 2000 200 2\n', '247 CTM 0.5 49.0 2000 200 2\n', '248 CTM 0.5 21.0 2000 200 2\n', '249 CTM 0.5 27.0 2000 200 2\n', '250 CTM 0.5 24.0 2000 200 2\n', '251 CTM 0.5 24.0 2000 200 2\n', '252 CTM 0.5 28.0 2000 200 2\n', '253 CTM 0.5 41.0 2000 200 2\n', '254 CTM 0.5 28.0 2000 200 2\n', '255 CTM 0.5 35.0 2000 200 2\n', '256 CTM 0.5 47.0 2000 200 2\n', '257 CTM 0.5 43.0 2000 200 2\n', '258 CTM 0.5 30.0 2000 200 2\n', '259 CTM 0.5 29.0 2000 200 2\n', '260 CTM 0.5 40.0 2000 200 2\n', '261 CTM 0.5 40.0 2000 200 2\n', '262 CTM 0.5 42.0 2000 200 2\n', '263 CTM 0.5 46.0 2000 200 2\n', '264 CTM 0.5 42.0 2000 200 2\n', '265 CTM 0.5 21.0 2000 200 2\n', '266 CTM 0.5 22.0 2000 200 2\n', '267 CTM 0.5 47.0 2000 200 2\n', '268 CTM 0.5 35.0 2000 200 2\n', '269 CTM 0.5 31.0 2000 200 2\n', '270 CTM 0.5 23.0 2000 200 2\n', '271 CTM 0.5 37.0 2000 200 2\n', '272 CTM 0.5 25.0 2000 200 2\n', '273 CTM 0.5 22.0 2000 200 2\n', '274 CTM 0.5 23.0 2000 200 2\n', '275 CTM 0.5 35.0 2000 200 2\n', '276 CTM 0.5 46.0 2000 200 2\n', '277 CTM 0.5 24.0 2000 200 2\n', '278 CTM 0.5 48.0 2000 200 2\n', '279 CTM 0.5 22.0 2000 200 2\n', '280 CTM 0.5 32.0 2000 200 2\n', '281 CTM 0.5 35.0 2000 200 2\n', '282 CTM 0.5 30.0 2000 200 2\n', '283 CTM 0.5 31.0 2000 200 2\n', '284 CTM 0.5 30.0 2000 200 2\n', '285 CTM 0.5 43.0 2000 200 2\n', '286 CTM 0.5 25.0 2000 200 2\n', '287 CTM 0.5 25.0 2000 200 2\n', '288 CTM 0.5 31.0 2000 200 2\n', '289 CTM 0.5 21.0 2000 200 2\n', '290 CTM 0.5 38.0 2000 200 2\n', '291 CTM 0.5 42.0 2000 200 2\n', '292 CTM 0.5 48.0 2000 200 2\n', '293 CTM 0.5 23.0 2000 200 2\n', '294 CTM 0.5 44.0 2000 200 2\n', '295 CTM 0.5 45.0 2000 200 2\n', '296 CTM 0.5 26.0 2000 200 2\n', '297 CTM 0.5 50.0 2000 200 2\n', '298 CTM 0.5 31.0 2000 200 2\n', '299 CTM 0.5 35.0 2000 200 2\n', '300 CTM 0.5 27.0 2000 200 2\n', '301 CTM 0.5 29.0 2000 200 2\n', '302 CTM 0.5 29.0 2000 200 2\n', '303 CTM 0.5 41.0 2000 200 2\n', '304 CTM 0.5 38.0 2000 200 2\n', '305 CTM 0.5 40.0 2000 200 2\n', '306 CTM 0.5 22.0 2000 200 2\n', '307 CTM 0.5 23.0 2000 200 2\n', '308 CTM 0.5 38.0 2000 200 2\n', '309 CTM 0.5 42.0 2000 200 2\n', '310 CTM 0.5 27.0 2000 200 2\n', '311 CTM 0.5 20.0 2000 200 2\n', '312 CTM 0.5 21.0 2000 200 2\n', '313 CTM 0.5 34.0 2000 200 2\n', '314 CTM 0.5 37.0 2000 200 2\n', '315 CTM 0.5 36.0 2000 200 2\n', '316 CTM 0.5 26.0 2000 200 2\n', '317 CTM 0.5 40.0 2000 200 2\n', '318 CTM 0.5 45.0 2000 200 2\n', '319 CTM 0.5 21.0 2000 200 2\n', '320 CTM 0.5 31.0 2000 200 2\n', '321 CTM 0.5 46.0 2000 200 2\n', '322 CTM 0.5 49.0 2000 200 2\n', '323 CTM 0.5 24.0 2000 200 2\n', '324 CTM 0.5 46.0 2000 200 2\n', '325 CTM 0.5 27.0 2000 200 2\n', '326 CTM 0.5 45.0 2000 200 2\n', '327 CTM 0.5 48.0 2000 200 2\n', '328 CTM 0.5 41.0 2000 200 2\n', '329 CTM 0.5 27.0 2000 200 2\n', '330 CTM 0.5 41.0 2000 200 2\n', '331 CTM 0.5 47.0 2000 200 2\n', '332 CTM 0.5 23.0 2000 200 2\n', '333 CTM 0.5 38.0 2000 200 2\n', '334 CTM 0.5 37.0 2000 200 2\n', '335 CTM 0.5 24.0 2000 200 2\n', '336 CTM 0.5 45.0 2000 200 2\n', '337 CTM 0.5 26.0 2000 200 2\n', '338 CTM 0.5 37.0 2000 200 2\n', '339 CTM 0.5 40.0 2000 200 2\n', '340 CTM 0.5 35.0 2000 200 2\n', '341 CTM 0.5 42.0 2000 200 2\n', '342 CTM 0.5 33.0 2000 200 2\n', '343 CTM 0.5 38.0 2000 200 2\n', '344 CTM 0.5 40.0 2000 200 2\n', '345 CTM 0.5 45.0 2000 200 2\n', '346 CTM 0.5 27.0 2000 200 2\n', '347 CTM 0.5 49.0 2000 200 2\n', '348 CTM 0.5 46.0 2000 200 2\n', '349 CTM 0.5 24.0 2000 200 2\n', '350 CTM 0.5 32.0 2000 200 2\n', '351 CTM 0.5 26.0 2000 200 2\n', '352 CTM 0.5 39.0 2000 200 2\n', '353 CTM 0.5 46.0 2000 200 2\n', '354 CTM 0.5 32.0 2000 200 2\n', '355 CTM 0.5 30.0 2000 200 2\n', '356 CTM 0.5 31.0 2000 200 2\n', '357 CTM 0.5 26.0 2000 200 2\n', '358 CTM 0.5 22.0 2000 200 2\n', '359 CTM 0.5 31.0 2000 200 2\n', '360 CTM 0.5 32.0 2000 200 2\n', '361 1 99999 99999 99999 1\n', '362 1 99999 99999 99999 1\n', '363 1 99999 99999 99999 1\n', '364 1 99999 99999 99999 1\n', '365 1 99999 99999 99999 1\n', '366 1 99999 99999 99999 1\n', '367 1 99999 99999 99999 1\n', '368 1 99999 99999 99999 1\n', '369 1 99999 99999 99999 1\n', '370 1 99999 99999 99999 1\n', '371 1 99999 99999 99999 1\n', '372 1 99999 99999 99999 1\n', '373 1 99999 99999 99999 1\n', '374 1 99999 99999 99999 1\n', '375 1 99999 99999 99999 1\n', '376 1 99999 99999 99999 1\n', '377 1 99999 99999 99999 1\n', '378 1 99999 99999 99999 1\n', '379 1 99999 99999 99999 1\n', '380 1 99999 99999 99999 1\n', '381 1 99999 99999 99999 1\n', '382 1 99999 99999 99999 1\n', '383 1 99999 99999 99999 1\n', '384 1 99999 99999 99999 1\n', '385 1 99999 99999 99999 1\n', '386 1 99999 99999 99999 1\n', '387 1 99999 99999 99999 1\n', '388 1 99999 99999 99999 1\n', '389 1 99999 99999 99999 1\n', '390 1 99999 99999 99999 1\n', '391 1 99999 99999 99999 1\n', '392 1 99999 99999 99999 1\n', '393 1 99999 99999 99999 1\n', '394 1 99999 99999 99999 1\n', '395 1 99999 99999 99999 1\n', '396 1 99999 99999 99999 1\n', '397 1 99999 99999 99999 1\n', '398 1 99999 99999 99999 1\n', '399 1 99999 99999 99999 1\n', '400 1 99999 99999 99999 1\n', '401 1 99999 99999 99999 1\n', '402 1 99999 99999 99999 1\n', '403 1 99999 99999 99999 1\n', '404 1 99999 99999 99999 1\n', '405 1 99999 99999 99999 1\n', '406 1 99999 99999 99999 1\n', '407 1 99999 99999 99999 1\n', '408 1 99999 99999 99999 1\n', '409 1 99999 99999 99999 1\n', '410 1 99999 99999 99999 1\n', '411 1 99999 99999 99999 1\n', '412 1 99999 99999 99999 1\n', '413 1 99999 99999 99999 1\n', '414 1 99999 99999 99999 1\n', '415 1 99999 99999 99999 1\n', '416 1 99999 99999 99999 1\n', '417 1 99999 99999 99999 1\n', '418 1 99999 99999 99999 1\n', '419 1 99999 99999 99999 1\n', '420 1 99999 99999 99999 1\n', '421 1 99999 99999 99999 1\n', '422 1 99999 99999 99999 1\n', '423 1 99999 99999 99999 1\n', '424 1 99999 99999 99999 1\n', '425 1 99999 99999 99999 1\n', '426 1 99999 99999 99999 1\n', '427 1 99999 99999 99999 1\n', '428 1 99999 99999 99999 1\n', '429 1 99999 99999 99999 1\n', '430 1 99999 99999 99999 1\n', '431 1 99999 99999 99999 1\n', '432 1 99999 99999 99999 1\n', '433 1 99999 99999 99999 1\n', '434 1 99999 99999 99999 1\n', '435 1 99999 99999 99999 1\n', '436 1 99999 99999 99999 1\n', '437 1 99999 99999 99999 1\n', '438 1 99999 99999 99999 1\n', '439 1 99999 99999 99999 1\n', '440 1 99999 99999 99999 1\n', '441 1 99999 99999 99999 1\n', '442 1 99999 99999 99999 1\n', '443 1 99999 99999 99999 1\n', '444 1 99999 99999 99999 1\n', '445 1 99999 99999 99999 1\n', '446 1 99999 99999 99999 1\n', '447 1 99999 99999 99999 1\n']
['1 FWJ\n', '2 FWJ\n', '3 FWJ\n', '4 FWJ\n', '5 FWJ\n', '6 FWJ\n', '7 FWJ\n', '8 FWJ\n', '9 FWJ\n', '10 FWJ\n', '11 FWJ\n', '12 FWJ\n', '13 FWJ\n', '14 FWJ\n', '15 FWJ\n', '16 FWJ\n', '17 FWJ\n', '18 FWJ\n', '19 FWJ\n', '20 FWJ\n', '21 FWJ\n', '22 FWJ\n', '23 FWJ\n', '24 FWJ\n', '25 FWJ\n', '26 FWJ\n', '27 FWJ\n', '28 FWJ\n', '29 FWJ\n', '30 FWJ\n', '31 FWJ\n', '32 FWJ\n', '33 FWJ\n', '34 FWJ\n', '35 FWJ\n', '36 FWJ\n', '37 FWJ\n', '38 FWJ\n', '39 FWJ\n', '40 FWJ\n', '41 FWJ\n', '42 FWJ\n', '43 FWJ\n', '44 FWJ\n', '45 FWJ\n', '46 FWJ\n', '47 FWJ\n', '48 FWJ\n', '49 FWJ\n', '50 FWJ\n', '51 FWJ\n', '52 FWJ\n', '53 FWJ\n', '54 FWJ\n', '55 FWJ\n', '56 FWJ\n', '57 FWJ\n', '58 FWJ\n', '59 FWJ\n', '60 FWJ\n', '61 FWJ\n', '62 FWJ\n', '63 FWJ\n', '64 FWJ\n', '65 FWJ\n', '66 FWJ\n', '67 FWJ\n', '68 FWJ\n', '69 FWJ\n', '70 FWJ\n', '71 FWJ\n', '72 FWJ\n', '73 FWJ\n', '74 FWJ\n', '75 FWJ\n', '76 FWJ\n', '77 FWJ\n', '78 FWJ\n', '79 FWJ\n', '80 FWJ\n', '81 FWJ\n', '82 FWJ\n', '83 FWJ\n', '84 FWJ\n', '85 FWJ\n', '86 FWJ\n', '87 FWJ\n', '88 FWJ\n', '89 FWJ\n', '90 FWJ\n', '91 FWJ\n', '92 FWJ\n', '93 FWJ\n', '94 FWJ\n', '95 FWJ\n', '96 FWJ\n', '97 FWJ\n', '98 FWJ\n', '99 FWJ\n', '100 FWJ\n', '101 DMOND\n', '102 DMDND\n', '103 DMDND\n', '104 DMDND\n', '105 DMOND\n', '106 DMDND\n', '107 DMDND\n', '108 DMOND\n', '109 DMDND\n', '110 DMOND\n', '111 DMOND\n', '112 DMOND\n', '113 DMDND\n', '114 DMOND\n', '115 DMOND\n', '116 DMDND\n', '117 DMOND\n', '118 DMDND\n', '119 DMDND\n', '120 DMOND\n', '121 DMDND\n', '122 DMOND\n', '123 DMDND\n', '124 DMOND\n', '125 DMDND\n', '126 DMDND\n', '127 DMOND\n', '128 DMDND\n', '129 DMOND\n', '130 DMDND\n', '131 DMDND\n', '132 DMOND\n', '133 DMDND\n', '134 DMDND\n', '135 DMDND\n', '136 DMOND\n', '137 DMOND\n', '138 DMDND\n', '139 DMDND\n', '140 DMDND\n', '141 DMDND\n', '142 DMDND\n', '143 DMOND\n', '144 DMDND\n', '145 DMOND\n', '146 DMOND\n', '147 DMDND\n', '148 DMDND\n', '149 DMDND\n', '150 DMOND\n', '151 DMOND\n', '152 DMDND\n', '153 DMDND\n', '154 DMDND\n', '155 DMOND\n', '156 DMDND\n', '157 DMDND\n', '158 DMOND\n', '159 DMOND\n', '160 DMDND\n', '161 DMOND\n', '162 DMDND\n', '163 DMOND\n', '164 DMOND\n', '165 DMOND\n', '166 DMDND\n', '167 DMDND\n', '168 DMDND\n', '169 DMDND\n', '170 DMDND\n', '171 DMOND\n', '172 DMDND\n', '173 DMOND\n', '174 DMDND\n', '175 DMOND\n', '176 DMOND\n', '177 DMOND\n', '178 DMOND\n', '179 DMOND\n', '180 DMDND\n', '181 DMOND\n', '182 DMDND\n', '183 DMOND\n', '184 DMDND\n', '185 DMOND\n', '186 DMOND\n', '187 DMDND\n']
['1 1 2\n', '2 2 1\n', '3 1 11\n', '4 11 1\n', '5 2 3\n', '6 3 2\n', '7 2 12\n', '8 12 2\n', '9 3 4\n', '10 4 3\n', '11 3 13\n', '12 13 3\n', '13 4 5\n', '14 5 4\n', '15 4 14\n', '16 14 4\n', '17 5 6\n', '18 6 5\n', '19 5 15\n', '20 15 5\n', '21 6 7\n', '22 7 6\n', '23 6 16\n', '24 16 6\n', '25 7 8\n', '26 8 7\n', '27 7 17\n', '28 17 7\n', '29 8 9\n', '30 9 8\n', '31 8 18\n', '32 18 8\n', '33 9 10\n', '34 10 9\n', '35 9 19\n', '36 19 9\n', '37 10 20\n', '38 20 10\n', '39 11 12\n', '40 12 11\n', '41 11 21\n', '42 21 11\n', '43 12 13\n', '44 13 12\n', '45 12 22\n', '46 22 12\n', '47 13 14\n', '48 14 13\n', '49 13 23\n', '50 23 13\n', '51 14 15\n', '52 15 14\n', '53 14 24\n', '54 24 14\n', '55 15 16\n', '56 16 15\n', '57 15 25\n', '58 25 15\n', '59 16 17\n', '60 17 16\n', '61 16 26\n', '62 26 16\n', '63 17 18\n', '64 18 17\n', '65 17 27\n', '66 27 17\n', '67 18 19\n', '68 19 18\n', '69 18 28\n', '70 28 18\n', '71 19 20\n', '72 20 19\n', '73 19 29\n', '74 29 19\n', '75 20 30\n', '76 30 20\n', '77 21 22\n', '78 22 21\n', '79 21 31\n', '80 31 21\n', '81 22 23\n', '82 23 22\n', '83 22 32\n', '84 32 22\n', '85 23 24\n', '86 24 23\n', '87 23 33\n', '88 33 23\n', '89 24 25\n', '90 25 24\n', '91 24 34\n', '92 34 24\n', '93 25 26\n', '94 26 25\n', '95 25 35\n', '96 35 25\n', '97 26 27\n', '98 27 26\n', '99 26 36\n', '100 36 26\n', '101 27 28\n', '102 28 27\n', '103 27 37\n', '104 37 27\n', '105 28 29\n', '106 29 28\n', '107 28 38\n', '108 38 28\n', '109 29 30\n', '110 30 29\n', '111 29 39\n', '112 39 29\n', '113 30 40\n', '114 40 30\n', '115 31 32\n', '116 32 31\n', '117 31 41\n', '118 41 31\n', '119 32 33\n', '120 33 32\n', '121 32 42\n', '122 42 32\n', '123 33 34\n', '124 34 33\n', '125 33 43\n', '126 43 33\n', '127 34 35\n', '128 35 34\n', '129 34 44\n', '130 44 34\n', '131 35 36\n', '132 36 35\n', '133 35 45\n', '134 45 35\n', '135 36 37\n', '136 37 36\n', '137 36 46\n', '138 46 36\n', '139 37 38\n', '140 38 37\n', '141 37 47\n', '142 47 37\n', '143 38 39\n', '144 39 38\n', '145 38 48\n', '146 48 38\n', '147 39 40\n', '148 40 39\n', '149 39 49\n', '150 49 39\n', '151 40 50\n', '152 50 40\n', '153 41 42\n', '154 42 41\n', '155 41 51\n', '156 51 41\n', '157 42 43\n', '158 43 42\n', '159 42 52\n', '160 52 42\n', '161 43 44\n', '162 44 43\n', '163 43 53\n', '164 53 43\n', '165 44 45\n', '166 45 44\n', '167 44 54\n', '168 54 44\n', '169 45 46\n', '170 46 45\n', '171 45 55\n', '172 55 45\n', '173 46 47\n', '174 47 46\n', '175 46 56\n', '176 56 46\n', '177 47 48\n', '178 48 47\n', '179 47 57\n', '180 57 47\n', '181 48 49\n', '182 49 48\n', '183 48 58\n', '184 58 48\n', '185 49 50\n', '186 50 49\n', '187 49 59\n', '188 59 49\n', '189 50 60\n', '190 60 50\n', '191 51 52\n', '192 52 51\n', '193 51 61\n', '194 61 51\n', '195 52 53\n', '196 53 52\n', '197 52 62\n', '198 62 52\n', '199 53 54\n', '200 54 53\n', '201 53 63\n', '202 63 53\n', '203 54 55\n', '204 55 54\n', '205 54 64\n', '206 64 54\n', '207 55 56\n', '208 56 55\n', '209 55 65\n', '210 65 55\n', '211 56 57\n', '212 57 56\n', '213 56 66\n', '214 66 56\n', '215 57 58\n', '216 58 57\n', '217 57 67\n', '218 67 57\n', '219 58 59\n', '220 59 58\n', '221 58 68\n', '222 68 58\n', '223 59 60\n', '224 60 59\n', '225 59 69\n', '226 69 59\n', '227 60 70\n', '228 70 60\n', '229 61 62\n', '230 62 61\n', '231 61 71\n', '232 71 61\n', '233 62 63\n', '234 63 62\n', '235 62 72\n', '236 72 62\n', '237 63 64\n', '238 64 63\n', '239 63 73\n', '240 73 63\n', '241 64 65\n', '242 65 64\n', '243 64 74\n', '244 74 64\n', '245 65 66\n', '246 66 65\n', '247 65 75\n', '248 75 65\n', '249 66 67\n', '250 67 66\n', '251 66 76\n', '252 76 66\n', '253 67 68\n', '254 68 67\n', '255 67 77\n', '256 77 67\n', '257 68 69\n', '258 69 68\n', '259 68 78\n', '260 78 68\n', '261 69 70\n', '262 70 69\n', '263 69 79\n', '264 79 69\n', '265 70 80\n', '266 80 70\n', '267 71 72\n', '268 72 71\n', '269 71 81\n', '270 81 71\n', '271 72 73\n', '272 73 72\n', '273 72 82\n', '274 82 72\n', '275 73 74\n', '276 74 73\n', '277 73 83\n', '278 83 73\n', '279 74 75\n', '280 75 74\n', '281 74 84\n', '282 84 74\n', '283 75 76\n', '284 76 75\n', '285 75 85\n', '286 85 75\n', '287 76 77\n', '288 77 76\n', '289 76 86\n', '290 86 76\n', '291 77 78\n', '292 78 77\n', '293 77 87\n', '294 87 77\n', '295 78 79\n', '296 79 78\n', '297 78 88\n', '298 88 78\n', '299 79 80\n', '300 80 79\n', '301 79 89\n', '302 89 79\n', '303 80 90\n', '304 90 80\n', '305 81 82\n', '306 82 81\n', '307 81 91\n', '308 91 81\n', '309 82 83\n', '310 83 82\n', '311 82 92\n', '312 92 82\n', '313 83 84\n', '314 84 83\n', '315 83 93\n', '316 93 83\n', '317 84 85\n', '318 85 84\n', '319 84 94\n', '320 94 84\n', '321 85 86\n', '322 86 85\n', '323 85 95\n', '324 95 85\n', '325 86 87\n', '326 87 86\n', '327 86 96\n', '328 96 86\n', '329 87 88\n', '330 88 87\n', '331 87 97\n', '332 97 87\n', '333 88 89\n', '334 89 88\n', '335 88 98\n', '336 98 88\n', '337 89 90\n', '338 90 89\n', '339 89 99\n', '340 99 89\n', '341 90 100\n', '342 100 90\n', '343 91 92\n', '344 92 91\n', '345 92 93\n', '346 93 92\n', '347 93 94\n', '348 94 93\n', '349 94 95\n', '350 95 94\n', '351 95 96\n', '352 96 95\n', '353 96 97\n', '354 97 96\n', '355 97 98\n', '356 98 97\n', '357 98 99\n', '358 99 98\n', '359 99 100\n', '360 100 99\n', '361 101 1\n', '362 1 102\n', '363 2 103\n', '364 4 104\n', '365 105 5\n', '366 5 106\n', '367 9 107\n', '368 108 10\n', '369 10 109\n', '370 110 12\n', '371 111 13\n', '372 112 14\n', '373 15 113\n', '374 114 16\n', '375 115 17\n', '376 17 116\n', '377 117 18\n', '378 21 118\n', '379 22 119\n', '380 120 23\n', '381 24 121\n', '382 122 25\n', '383 26 123\n', '384 124 27\n', '385 27 125\n', '386 28 126\n', '387 127 30\n', '388 33 128\n', '389 129 34\n', '390 34 130\n', '391 36 131\n', '392 132 37\n', '393 37 133\n', '394 38 134\n', '395 39 135\n', '396 136 41\n', '397 137 42\n', '398 42 138\n', '399 44 139\n', '400 45 140\n', '401 46 141\n', '402 48 142\n', '403 143 49\n', '404 51 144\n', '405 145 53\n', '406 146 54\n', '407 54 147\n', '408 55 148\n', '409 56 149\n', '410 150 57\n', '411 151 58\n', '412 59 152\n', '413 61 153\n', '414 62 154\n', '415 155 65\n', '416 65 156\n', '417 66 157\n', '418 158 68\n', '419 159 69\n', '420 71 160\n', '421 161 72\n', '422 73 162\n', '423 163 74\n', '424 164 77\n', '425 165 79\n', '426 79 166\n', '427 81 167\n', '428 82 168\n', '429 83 169\n', '430 84 170\n', '431 171 85\n', '432 86 172\n', '433 173 88\n', '434 88 174\n', '435 175 89\n', '436 176 91\n', '437 177 92\n', '438 178 94\n', '439 179 95\n', '440 95 180\n', '441 181 96\n', '442 96 182\n', '443 183 98\n', '444 98 184\n', '445 185 99\n', '446 186 100\n', '447 100 187\n']
['1 101\n', '2 105\n', '3 108\n', '4 110\n', '5 111\n', '6 112\n', '7 114\n', '8 115\n', '9 117\n', '10 120\n', '11 122\n', '12 124\n', '13 127\n', '14 129\n', '15 132\n', '16 136\n', '17 137\n', '18 143\n', '19 145\n', '20 146\n', '21 150\n', '22 151\n', '23 155\n', '24 158\n', '25 159\n', '26 161\n', '27 163\n', '28 164\n', '29 165\n', '30 171\n', '31 173\n', '32 175\n', '33 176\n', '34 177\n', '35 178\n', '36 179\n', '37 181\n', '38 183\n', '39 185\n', '40 186\n']
['1 102\n', '2 103\n', '3 104\n', '4 106\n', '5 107\n', '6 109\n', '7 113\n', '8 116\n', '9 118\n', '10 119\n', '11 121\n', '12 123\n', '13 125\n', '14 126\n', '15 128\n', '16 130\n', '17 131\n', '18 133\n', '19 134\n', '20 135\n', '21 138\n', '22 139\n', '23 140\n', '24 141\n', '25 142\n', '26 144\n', '27 147\n', '28 148\n', '29 149\n', '30 152\n', '31 153\n', '32 154\n', '33 156\n', '34 157\n', '35 160\n', '36 162\n', '37 166\n', '38 167\n', '39 168\n', '40 169\n', '41 170\n', '42 172\n', '43 174\n', '44 180\n', '45 182\n', '46 184\n', '47 187\n']
{1: 1, 2: 5, 3: 10, 4: 12, 5: 13, 6: 14, 7: 16, 8: 17, 9: 18, 10: 23, 11: 25, 12: 27, 13: 30, 14: 34, 15: 37, 16: 41, 17: 42, 18: 49, 19: 53, 20: 54, 21: 57, 22: 58, 23: 65, 24: 68, 25: 69, 26: 72, 27: 74, 28: 77, 29: 79, 30: 85, 31: 88, 32: 89, 33: 91, 34: 92, 35: 94, 36: 95, 37: 96, 38: 98, 39: 99, 40: 100}

In [21]:
def add_demand_str(O, D):
    l = [str(O), str(D)]
    d = [str(demand) for i in range(assign_horizon)]
    l = l + d
    return ' '.join(l) + '\n'

In [34]:
# Origin_ID Destination_ID <demand by interval>
demand_str_list = []

for O, O_node in O_dict.iteritems():
    for D, D_node in D_dict.iteritems():
        if O_node != D_node:
            demand_str_list.append(add_demand_str(O, D))

In [35]:
f = file(link_file, 'w')
f.write("#ID Type LEN(mile) FFS(mile/h) Cap(v/hour) RHOJ(v/miles) Lane\n")
for line in link_str_list:
    f.write(line)
f.close()

f = file(node_file, 'w')
f.write('#ID Type\n')
for line in node_str_list:
    f.write(line)
f.close()

f = file(snap_file, 'w')
f.write('# EdgeID FromNodeId ToNodeId\n')
for line in snap_str_list:
    f.write(line)
f.close()

f = file(od_file, 'w')
f.write('#Origin_ID <-> node_ID\n')
for line in O_str_list:
    f.write(line)
f.write('#Dest_ID <-> node_ID\n')
for line in D_str_list:
    f.write(line)
f.close()

f = file(demand_file, 'w')
f.write('#Origin_ID Destination_ID <demand by interval>\n')
for line in demand_str_list:
    f.write(line)
f.close()

In [23]:
print 'maximum_interval:', assign_horizon
print 'num_of_link:', len(link_str_list)
print 'num_of_node:', len(node_str_list)
print 'num_of_O:', len(O_dict)
print 'num_of_D:', len(D_dict)
print 'num_of_od:', len(demand_str_list)


maximum_interval: 10
num_of_link: 442
num_of_node: 182
num_of_O: 41
num_of_D: 41
num_of_od: 1666