Nim:2014311028
1. Untuk menjaga agar usaha ini tidak sepi oleh pelanggan setiap penyedia jasa laundry memiliki
ciri khas dan cara promosi masing-masing, seperti menyediakan jasa antar jemput cucian.
Pelanggan laundry ada yang mempunyai waktu tertentu untuk mengambil dan menerima cucian
mereka. Melihat dari keadaan ini maka parameter waktu yang akan dihabiskan dijalan dapat
diperkirakan rute mana yang akan diambil oleh sopir antar jemput cucian agar bisa datang di
tempat sesuai dengan waktu yang di inginkan pelanggan.
Tentukan rute perjalanan yang optimal yaitu kondisi dimana terjadi kombinasi terbaik untuk jalur
yang akan dilalui dan waktu perjalanan yang cepat, serta semua pelanggan dapat terlayani.?
Jawaban:
data = {}
data['time_matrix'] = [
[7, 0, 8, 6, 6, 6],
data['time_windows'] = [
(8, 14), # 1
(14, 16), # 2
(12, 14), # 3
(9, 13), # 4
(8, 9), # 5
data['num_vehicles'] = 6
data['depot'] = 0
return data
print(f'Objective: {solution.ObjectiveValue()}')
time_dimension = routing.GetDimensionOrDie('Time')
total_time = 0
index = routing.Start(vehicle_id)
time_var = time_dimension.CumulVar(index)
manager.IndexToNode(index), solution.Min(time_var),
solution.Max(time_var))
index = solution.Value(routing.NextVar(index))
time_var = time_dimension.CumulVar(index)
solution.Min(time_var),
solution.Max(time_var))
print(plan_output)
total_time += solution.Min(time_var)
def main():
data = create_data_model()
manager = pywrapcp.RoutingIndexManager(len(data['time_matrix']),
data['num_vehicles'], data['depot'])
routing = pywrapcp.RoutingModel(manager)
from_node = manager.IndexToNode(from_index)
to_node = manager.IndexToNode(to_index)
return data['time_matrix'][from_node][to_node]
transit_callback_index = routing.RegisterTransitCallback(time_callback)
routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
time = 'Time'
routing.AddDimension(
transit_callback_index,
time)
time_dimension = routing.GetDimensionOrDie(time)
if location_idx == data['depot']:
continue
index = manager.NodeToIndex(location_idx)
time_dimension.CumulVar(index).SetRange(time_window[0], time_window[1])
depot_idx = data['depot']
index = routing.Start(vehicle_id)
time_dimension.CumulVar(index).SetRange(
data['time_windows'][depot_idx][0],
data['time_windows'][depot_idx][1])
for i in range(data['num_vehicles']):
routing.AddVariableMinimizedByFinalizer(
time_dimension.CumulVar(routing.Start(i)))
routing.AddVariableMinimizedByFinalizer(
time_dimension.CumulVar(routing.End(i)))
search_parameters = pywrapcp.DefaultRoutingSearchParameters()
search_parameters.first_solution_strategy = (
routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC)
# Solve the problem.
solution = routing.SolveWithParameters(search_parameters)
if solution:
if __name__ == '__main__':
main()
2. Seorang pejalan kaki ingin berjalan dari titik A ke J dengan graph sebagai berikut :
Tentukan rute dengan jarak terdekat yang harus ditempuh oleh pejalan kaki tersebut !
Jawaban:
def main():
max_flow = pywrapgraph.SimpleMaxFlow()
start_nodes = [0, 0, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8]
end_nodes = [1, 2, 4, 5, 3, 4, 5, 6, 8, 7, 8, 9]
capacities = [448, 633, 828, 878, 769, 476, 726, 377, 149, 165, 299, 545]
status = max_flow.Solve(0, 8)
if status != max_flow.OPTIMAL:
print(f'Status: {status}')
exit(1)
print('')
for i in range(max_flow.NumArcs()):
max_flow.Capacity(i)))
main()
3. Berapa arus maksimum dari jalan yang menghubungkan mess karyawan (A) dengan kantor (G)
bilamana data yang tersedia adalah sebagai berikut :
Cabang yang menghubungkan antara A → B yang memuat angka 7, maksudnya adalah arus
maksimal kendaraan yang dapat melintasi jalan dari A→ B adalah 700 mobil / jam, sedangkan
dari B → E memuat angka 4, maksudnya adalah besarnya arus maksimal kendaraan yang dapat
melintasi jalan dari B → E adalah 400 mobil/jam, begitu seterusnya.
Jawaban:
def main():
max_flow = pywrapgraph.SimpleMaxFlow()
# between each pair. For instance, the arc from node 0 to node 1 has a
# capacity of 20.
start_nodes = [0, 0, 0, 1, 2, 2, 2, 3, 4, 5]
end_nodes = [1, 2, 3, 4, 4, 3, 5, 5, 6, 6]
capacities = [7, 4, 1, 4, 1, 3, 5, 7, 5, 9]
status = max_flow.Solve(0, 6)
if status != max_flow.OPTIMAL:
print(f'Status: {status}')
exit(1)
print('')
for i in range(max_flow.NumArcs()):
max_flow.Capacity(i)))
if __name__ == '__main__':
main()
4. Waktu tempuh pengiriman paket data ke setiap titik adalah sebagai berikut :
Tentukan rute terdekat dengan waktu tempuh minimal dari titik A ke setiap node yang lainnya !
Jawaban:
This is a sample using the routing library python wrapper to solve a VRP
problem.
http://en.wikipedia.org/wiki/Vehicle_routing_problem.
"""
def create_data_model():
data = {}
data['distance_matrix'] = [
0, 6, 8, 8, 1
],
6, 0, 2, 2, 3
],
[
8, 2, 0, 1, 2
],
8, 2, 1, 0, 1
],
1, 3, 2, 1, 0
],
data['num_vehicles'] = 4
data['depot'] = 0
return data
print(f'Objective: {solution.ObjectiveValue()}')
max_route_distance = 0
index = routing.Start(vehicle_id)
route_distance = 0
while not routing.IsEnd(index):
previous_index = index
index = solution.Value(routing.NextVar(index))
route_distance += routing.GetArcCostForVehicle(
plan_output += '{}\n'.format(manager.IndexToNode(index))
print(plan_output)
def main():
data = create_data_model()
manager = pywrapcp.RoutingIndexManager(len(data['distance_matrix']),
data['num_vehicles'], data['depot'])
# Create Routing Model.
routing = pywrapcp.RoutingModel(manager)
from_node = manager.IndexToNode(from_index)
to_node = manager.IndexToNode(to_index)
return data['distance_matrix'][from_node][to_node]
transit_callback_index = routing.RegisterTransitCallback(distance_callback)
routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
dimension_name = 'Distance'
routing.AddDimension(
transit_callback_index,
0, # no slack
dimension_name)
distance_dimension = routing.GetDimensionOrDie(dimension_name)
distance_dimension.SetGlobalSpanCostCoefficient(100)
search_parameters = pywrapcp.DefaultRoutingSearchParameters()
search_parameters.first_solution_strategy = (
routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC)
solution = routing.SolveWithParameters(search_parameters)
if solution:
else:
main()