Алгоритмы для решения прикладной задачи маршрутизации транспорта
Древоподобные структуры транспортных коммуникаций. Частный случай, когда граф представлен в виде дерева. Слияние смежных маршрутов и добавления вершин выше по дереву. "Параллельная" обработка маршрутов. Общая сумма дистанций всех транспортных средств.
Рубрика | Транспорт |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 28.08.2018 |
Размер файла | 120,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
cur_route = get_route_by_id(Veh_routes, route_id_to_work_with)
if debug: print("-")
res, cur_route = step(cur_route, Veh_routes, the_Tree)
Veh_routes.remove(get_route_by_id(Veh_routes, cur_route.id))
Veh_routes.append(cur_route)
if debug: print("*")
if debug: output_all_routes(Veh_routes, the_Tree)
total_dist = count_total_dist_of_all_routes(Veh_routes)
impossible_total_dist = doubled_total_sum_by_arcs_weight(the_Tree.arcs)
total_dist_coef = total_dist / impossible_total_dist
if debug: print("**[main_iter]->finish")
return total_dist_coef
def revalidate_served_ids(Veh_routes, the_Tree):
for route in Veh_routes:
for n_id in route.nodes_to_take:
the_Tree.served_nodes_id.add(n_id)
def make_veh_route_to_every_not_served(not_served_ids, the_tree, routes):
global debug
if the_tree.matr == None:
make_graph(the_tree)
new_routes = {}
def get_highest_existing_id(routes):
highest_id = 0
f_f = True
for r in routes:
if f_f:
highest_id = r.id
f_f = False
continue
if r.id > highest_id:
highest_id = r.id
return highest_id + 1
id = get_highest_existing_id(routes)
for node in the_tree.nodes:
if not node.id in not_served_ids:
continue
node_id = node.id
the_tree.served_nodes_id.add(node_id)
if debug: print("node id: ", node_id)
if node_id == 1:
continue
way = go_for_BFS(the_tree, 1, node_id)
if debug: print("way: ", way)
new_routes[id] = way
id += 1
if debug: print("routes:", new_routes)
new_Veh_routes = []
for r_id in new_routes:
if debug: print("route id: ", r_id, " route: ", new_routes[r_id][0])
route_to_add = Veh_route(r_id, new_routes[r_id][0])
route_to_add.take_node(route_to_add.way[-1])
the_tree.served_nodes_id.add(route_to_add.way[-1]) # ?
new_Veh_routes.append(route_to_add)
for r in new_Veh_routes:
if debug: print("_____________")
r.sort_way(the_tree.nodes)
if debug: print("r id:", r.id, "way", r.way)
r.valuate_route(the_tree)
if debug:
print("distance: ", r.distance)
print("goods: ", r.goods)
def valuate_new_routes(new_routes, old_routes):
def get_routes_failed_to_add_current_node(cur_node_id, routes):
result = set()
for r in routes:
if cur_node_id in r.failed_to_add_vertexes_id:
result.add(r.id)
return result
for n_r in new_routes:
for ntt_id in n_r.nodes_to_take:
n_r.failed_to_merge_routs_id = get_routes_failed_to_add_current_node(ntt_id, old_routes)
valuate_new_routes(new_Veh_routes, routes)
return new_Veh_routes
def list_minus_list(list1, list2):
result_list = copy.deepcopy(list1)
for l in list1:
if l in list2:
result_list.remove(l)
return result_list
def main_base(amount_of_nodes, Cap):
global debug
debug = False
if debug: print("## [make_tree]->start")
the_Tree = make_tree(amount_of_nodes, Cap)
if debug: print("## [make_tree]->finish")
if debug: print("## [make_way_to_every_leaf_from_root]->start")
routes = make_way_to_every_leaf_from_root(the_Tree)
if debug: print("routes: ", routes)
if debug: print("## [make_way_to_every_leaf_from_root]->finish")
if debug: print("## [valuate_after_route_to_leafs]->start")
Veh_routes = valuate_after_route_to_leafs(routes, the_Tree)
if debug: print("## [valuate_after_route_to_leafs]->finish")
the_Tree.served_nodes_id.add(1)
if debug: print("## [step]->start")
dist_coef = main_iter(Veh_routes, the_Tree)
if debug: print("## [step]->finish")
return dist_coef
def main_main():
def min_max_avarage(one, two, type):
if type not in ["min", "max", "avarage"]:
print("Fail")
exit(0)
if type == "max":
return one if one > two else two
if type == "min":
return one if one < two else two
return (one + two) # /2 delim by 2 in the end
step = 10
multiple = 1
amount_of_nodes = step * multiple
data_collecting = {
"time": {},
"dist": {},
}
runs_for_every_step = 20
max_amount_of_nodes = 100
Cap = 10
while (amount_of_nodes < max_amount_of_nodes + step):
print("amount of nodes: ", amount_of_nodes)
time_collect_of_one_step = {
"min": None,
"max": None,
"avarage": None,
}
dist_collect_of_one_step = {
"min": None,
"max": None,
"avarage": None,
}
global debug
debug = False
for i in range(runs_for_every_step):
time_start = time.time()
if debug: print("## [main_base]->start")
dist_coef = main_base(amount_of_nodes, Cap)
if debug: print("## [main_base]->finish")
time_of_work = time.time() - time_start
if not time_collect_of_one_step["min"]:
time_collect_of_one_step["min"] = time_of_work
else:
time_collect_of_one_step["min"] = min_max_avarage(time_collect_of_one_step["min"], time_of_work, "min")
if not dist_collect_of_one_step["min"]:
dist_collect_of_one_step["min"] = dist_coef
else:
dist_collect_of_one_step["min"] = min_max_avarage(dist_collect_of_one_step["min"], dist_coef, "min")
if not time_collect_of_one_step["max"]:
time_collect_of_one_step["max"] = time_of_work
else:
time_collect_of_one_step["max"] = min_max_avarage(time_collect_of_one_step["max"], time_of_work, "max")
if not dist_collect_of_one_step["max"]:
dist_collect_of_one_step["max"] = dist_coef
else:
dist_collect_of_one_step["max"] = min_max_avarage(dist_collect_of_one_step["max"], dist_coef, "max")
if not time_collect_of_one_step["avarage"]:
time_collect_of_one_step["avarage"] = time_of_work
else:
time_collect_of_one_step["avarage"] = min_max_avarage(time_collect_of_one_step["avarage"], time_of_work,
"avarage")
if not dist_collect_of_one_step["avarage"]:
dist_collect_of_one_step["avarage"] = dist_coef
else:
dist_collect_of_one_step["avarage"] = min_max_avarage(dist_collect_of_one_step["avarage"], dist_coef,
"avarage")
time_collect_of_one_step["avarage"] /= runs_for_every_step
dist_collect_of_one_step["avarage"] /= runs_for_every_step
data_collecting["time"][amount_of_nodes] = time_collect_of_one_step
data_collecting["dist"][amount_of_nodes] = dist_collect_of_one_step
multiple += 1
amount_of_nodes = step * multiple
print("time data")
for amount_of_nodes in data_collecting["time"]:
print("amount of nodes: %s, min: %s, max: %s, avarage: %s" % (
amount_of_nodes, data_collecting["time"][amount_of_nodes]["min"],
data_collecting["time"][amount_of_nodes]["max"], data_collecting["time"][amount_of_nodes]["avarage"]))
print("dist data")
for amount_of_nodes in data_collecting["dist"]:
print("amount of nodes: %s, min: %s, max: %s, avarage: %s" % (
amount_of_nodes, data_collecting["dist"][amount_of_nodes]["min"],
data_collecting["dist"][amount_of_nodes]["max"], data_collecting["dist"][amount_of_nodes]["avarage"]))
if __name__ == "__main__":
main_main()
Размещено на Allbest.ur
Подобные документы
Задачи и структура транспортного хозяйства в составе предприятия. Определение грузооборотов предприятия, маршрутов транспорта и необходимого количества транспортных средств, диспетчирование работы. Способы решения транспортной задачи методами оптимизации.
реферат [408,0 K], добавлен 08.05.2009Автомобильные перевозки на территории Республики Беларусь. Международные автобусные маршруты. Выявление наименее прибыльных направлений и поиск путей увеличения экспорта транспортных услуг путем открытия новых международных пассажирских маршрутов.
дипломная работа [60,2 K], добавлен 07.02.2012Проблемы российского транспорта. Сведения о международных транспортных коридорах (МТК), история их развития. Критерии выбора транспортных коммуникаций. Задачи и алгоритм формирования МТК, их значение для России с точки зрения национальной безопасности.
курсовая работа [40,1 K], добавлен 27.06.2009Размещение оборудования в основных и вспомогательных цехах предприятия. Средства механизации погрузочно-разгрузочных и подъёмно-транспортных работ. Определение требуемого количества транспорта. Расчет тягового усилия тележки. Выбор транспортных средств.
дипломная работа [2,7 M], добавлен 08.03.2015Формирование маршрутов перевозок, выбор типа подвижного состава и расчет грузооборота. Расчет времени и скорости доставки грузов. Расчет технико-эксплуатационных и экономических показателей использования транспортных средств различных видов транспорта.
курсовая работа [997,7 K], добавлен 25.12.2010Роль транспорта и транспортных услуг в системе международных экономических отношений. Понятие транспорта, транспортных операций и международных транспортных услуг. Основные виды и классификация транспортных операций и международных транспортных услуг.
лекция [114,3 K], добавлен 10.05.2013Характеристика видов транспорта: сухопытный, водный, авиационный. Признаки классификации транспортных путешествий, рейтинг привлекательности транспортных средств. Анализ развития транспортной отрасли и и туристический потенциал Тверской области.
курсовая работа [25,4 K], добавлен 29.06.2010Основные положения по организации автобусных маршрутов. Анализ зарубежного опыта организации наземного пассажирского транспорта. Создание выделенных полос для городских маршрутов. Схема действующих полос по г. Москве. Обзор оценки свободного времени.
дипломная работа [2,0 M], добавлен 20.06.2013Активы автотранспортного предприятия. Резерв на ремонт транспортных средств. Ежемесячная сумма резервирования. Размер отчислений на дорогостоящие виды ремонта. Порядок отражения на счетах бухгалтерского учета. Долгосрочный ремонт грузовых автомобилей.
реферат [20,4 K], добавлен 07.03.2009Ознакомление с технико-эксплуатационными показателями работы автомобилей. Рассмотрение результатов решения задачи маршрутизации методом потенциалов. Анализ технологического расчета маршрутов. Характеристика сводных показателей сменно-суточного пробега.
курсовая работа [462,7 K], добавлен 29.10.2017