Advertencia
Posible bloqueo del servidor
Advertencia
Funciones experimentales
Contenido
Versiones anteriores de esta página
Problemas de Ruteo de Vehículos VRP son problemas de optimización NP-hard , que generaliza el problema del vendedor viajante (TSP).
pgRouting no intenta implementar todas las variantes.
Limitaciones
Problema: CVRPPDTW Problema de Ruteo de vehículos de recogida y entrega capacitado con Ventanas de Tiempo
Ambas implementaciones utilizan los siguientes parámetros:
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
orders_sql | TEXT |
Pick & Deliver Orders SQL consulta que contiene las órdenes que se van a procesar. | |
vehicles_sql | TEXT |
La consulta SQL de Vehículos de Recogida y Entrega contiene los vehículos que se van a utilizar. | |
factor | NUMERIC |
1 | (Opcional) Multiplicador de tiempo de viaje. Ver Manejo de Factores |
max_cycles | INTEGER |
10 | (Opcional) Número máximo de ciclos a realizar en la optimización. |
initial_sol | INTEGER |
4 | (Opcional) Solución inicial a utilizar.
|
La implementación no euclidiana, además tiene:
Columna | Tipo | Descripción |
---|---|---|
matrix_sql | TEXT |
La consulta Matriz SQL de Recogida y Entrega contiene la distancia o tiempos de viaje. |
columnas de retorno
En general, las columnas para las órdenes SQL es la misma tanto en la implementación de recogida como de entrega:
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
id | ANY-INTEGER | Identificador del par de órdenes recogida-entrega. | |
demanda | ANY-NUMERICAL | Número de unidades en la orden | |
p_open | ANY-NUMERICAL | La hora, en relación con 0, cuando se abre la ubicación de recogida. | |
p_close | ANY-NUMERICAL | La hora, en relación con 0, cuando se cierra la ubicación de recogida. | |
d_service | ANY-NUMERICAL | 0 | La duración de la carga en el lugar de recogida. |
d_open | ANY-NUMERICAL | La hora, en relación con 0, cuando se abre la ubicación de entrega. | |
d_close | ANY-NUMERICAL | La hora, en relación con 0, cuando se cierra la ubicación de entrega. | |
d_service | ANY-NUMERICAL | 0 | La duración de la carga en el lugar de entrega. |
Para la implementación no euclidiana, se necesitan los identificadores inicial y final:
Columna | Tipo | Descripción |
---|---|---|
p_node_id | ANY-INTEGER | El identificador de nodo de la recogida debe coincidir con un identificador de nodo en la tabla de matriz. |
d_node_id | ANY-INTEGER | El identificador de nodo de la entrega debe coincidir con un identificador de nodo en la tabla de matriz. |
Para la implementación euclidiana, se necesitan ubicaciones \((x,y)\) de recogida y entrega:
Columna | Tipo | Descripción |
---|---|---|
p_x | ANY-NUMERICAL | \(x\) valor de la ubicación de recogida |
p_y | ANY-NUMERICAL | \(y\) valor de la ubicación de recogida |
d_x | ANY-NUMERICAL | valor \(x\) de la ubicación de entrega |
d_y | ANY-NUMERICAL | valor \(y\) del lugar de entrega |
En general, las columnas para vehicles_sql son las mismas tanto en la implementación de recogida como en la entrega:
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
id | ANY-INTEGER | Identificador del par de órdenes recogida-entrega. | |
capacidad | ANY-NUMERICAL | Número de unidades en la orden | |
speed | ANY-NUMERICAL | 1 | Velocidad media del vehículo. |
start_open | ANY-NUMERICAL | La hora, en relación con 0, cuando se abre la ubicación inicial. | |
start_close | ANY-NUMERICAL | La hora, en relación con 0, cuando se cierra la ubicación inicial. | |
start_service | ANY-NUMERICAL | 0 | La duración de la carga en la ubicación inicial. |
end_open | ANY-NUMERICAL | start_open | La hora, en relación con 0, cuando se abre la ubicación final. |
end_close | ANY-NUMERICAL | start_close | La hora, en relación con 0, cuando se cierra la ubicación final. |
end_service | ANY-NUMERICAL | start_service | La duración de la carga en la ubicación final. |
Para la implementación no euclidiana, se necesitan los identificadores inicial y final:
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
start_node_id | ANY-INTEGER | El identificador de nodo de la ubicación inicial debe coincidir con un identificador de nodo en la tabla de la matriz. | |
end_node_id | ANY-INTEGER | start_node_id | El identificador de nodo de la ubicación final debe coincidir con un identificador de nodo en la tabla de matriz. |
Para la implementación euclidiana, se necesitan ubicaciones \((x,y)\) de inicio y finalización:
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
start_x | ANY-NUMERICAL | valor \(x\) de la coordenada de la ubicación inicial. | |
start_y | ANY-NUMERICAL | valor \(y\) de la coordenada de la ubicación de inicio. | |
end_x | ANY-NUMERICAL | start_x | valor \(x\) de la coordenada de la ubicación final. |
end_y | ANY-NUMERICAL | start_y | \(y\) valor de la coordenada de la ubicación final. |
Advertencia
TODO
RETURNS SET OF
(seq, vehicle_seq, vehicle_id, stop_seq, stop_type,
travel_time, arrival_time, wait_time, service_time, departure_time)
UNION
(summary row)
Columna | Tipo | Descripción |
---|---|---|
seq | INTEGER | Valor secuencial a partir de 1. |
vehicle_seq | INTEGER | Valor secuencial a partir de 1 para vehículos actuales. El vehículo \(n_{th}\) en la solución. |
vehicle_id | BIGINT | Identificador actual del vehículo. |
stop_seq | INTEGER | Valor secuencial a partir de 1 para las paradas realizadas por el vehículo actual. La parada \(m_{th}\) vdel vehículo actual. |
stop_type | INTEGER | Tipo de ubicación de parada en la que se encuentra el vehículo:
|
order_id | BIGINT | Identificador de par de órdenes Recogida-Entrega.
|
cargo | FLOAT | Unidades de carga del vehículo al salir de la parada. |
travel_time | FLOAT | Tiempo de viaje desde el
|
arrival_time | FLOAT | Anterior departure_time más actual travel_time . |
wait_time | FLOAT | Tiempo dedicado a la apertura de ubicación actual. |
service_time | FLOAT | Tiempo de servicio en la ubicación actual. |
departure_time | FLOAT | \(arrival\_time + wait\_time + service\_time\).
|
Fila de Resumen
Advertencia
TODO: Review the summary
Columna | Tipo | Descripción |
---|---|---|
seq | INTEGER | Continúa el valor Secuencial |
vehicle_seq | INTEGER | -2 para indicar es una fila de resumen |
vehicle_id | BIGINT | Total de Violaciones de Capacidad en la solución. |
stop_seq | INTEGER | Tiempo Total de Violaciones de la Ventana en la solución. |
stop_type | INTEGER | -1 |
order_id | BIGINT | -1 |
cargo | FLOAT | -1 |
travel_time | FLOAT | total_travel_time La suma de todo el tiempo_de_viaje |
arrival_time | FLOAT | -1 |
wait_time | FLOAT | total_waiting_time La suma de todo el tiempo_de_espera |
service_time | FLOAT | total_service_time La suma de todo el tiempo_de_servicio |
departure_time | FLOAT | total_solution_time = \(total\_travel\_time + total\_wait\_time + total\_service\_time\). |
RETURNS SET OF
(seq, vehicle_seq, vehicle_id, stop_seq, stop_type,
travel_time, arrival_time, wait_time, service_time, departure_time)
UNION
(summary row)
Columna | Tipo | Descripción |
---|---|---|
seq | INTEGER | Valor secuencial a partir de 1. |
vehicle_seq | INTEGER | Valor secuencial a partir de 1 para vehículos actuales. El vehículo \(n_{th}\) en la solución. |
vehicle_id | BIGINT | Identificador actual del vehículo. |
stop_seq | INTEGER | Valor secuencial a partir de 1 para las paradas realizadas por el vehículo actual. La parada \(m_{th}\) vdel vehículo actual. |
stop_type | INTEGER | Tipo de ubicación de parada en la que se encuentra el vehículo:
|
order_id | BIGINT | Identificador de par de órdenes Recogida-Entrega.
|
cargo | FLOAT | Unidades de carga del vehículo al salir de la parada. |
travel_time | FLOAT | Tiempo de viaje desde el
|
arrival_time | FLOAT | Anterior departure_time más actual travel_time . |
wait_time | FLOAT | Tiempo dedicado a la apertura de ubicación actual. |
service_time | FLOAT | Tiempo de servicio en la ubicación actual. |
departure_time | FLOAT | \(arrival\_time + wait\_time + service\_time\).
|
Fila de Resumen
Advertencia
TODO: Review the summary
Columna | Tipo | Descripción |
---|---|---|
seq | INTEGER | Continúa el valor Secuencial |
vehicle_seq | INTEGER | -2 para indicar es una fila de resumen |
vehicle_id | BIGINT | Total de Violaciones de Capacidad en la solución. |
stop_seq | INTEGER | Tiempo Total de Violaciones de la Ventana en la solución. |
stop_type | INTEGER | -1 |
order_id | BIGINT | -1 |
cargo | FLOAT | -1 |
travel_time | FLOAT | total_travel_time La suma de todo el tiempo_de_viaje |
arrival_time | FLOAT | -1 |
wait_time | FLOAT | total_waiting_time La suma de todo el tiempo_de_espera |
service_time | FLOAT | total_service_time La suma de todo el tiempo_de_servicio |
departure_time | FLOAT | total_solution_time = \(total\_travel\_time + total\_wait\_time + total\_service\_time\). |
Donde:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | SMALLINT, INTEGER, BIGINT, REAL, FLOAT |
Para definir un problema, hay que hacer varias consideraciones, para obtener resultados consistentes. En esta sección se proporciona una idea de cómo se deben considerar los parámetros.
La capacidad de un vehículo, se puede medir en:
La solicitud de demanda de las órdenes de recogida-entrega debe utilizar las mismas unidades que las utilizadas en la capacidad del vehículo.
Para manejar problemas como: 10 (dimensión igual) cajas de manzanas y 5 kg de plumas que se van a transportar (no embaladas en cajas).
Si la capacidad del vehículo se mide mediante cajas, se necesita una conversión de kg de plumas a número equivalente de cajas. Si la capacidad del vehículo se mide por kg, se necesita una conversión de caja de manzanas a número equivalente de kg.
Mostrar cómo se pueden hacer las 2 conversiones posibles
Sea: - \(f_boxes\): el número de cajas que se utilizarían para 1 kg de plumas. - \(a_weight\): peso de 1 caja de manzanas.
Unidades de Capacidad | Manzanas | plumas |
---|---|---|
cajas | 10 | \(5 * f\_cajas\) |
kg | \(10 * a\_peso\) | 5 |
Los tiempos son relativos a 0
Supongamos que el conductor de un vehículo comienza el turno a las 9:00 am y termina el turno a las 4:30 pm y la duración del tiempo de servicio es de 10 minutos con 30 segundos.
Todas las unidades de tiempo tienen que ser convertidas
Significado de 0 | unidades de tiempo | 9:00 am | 4:30 pm | 10 min 30 seg |
---|---|---|---|---|
0:00 am | horas | 9 | 16.5 | \(10.5 / 60 = 0.175\) |
9:00 am | horas | 0 | 7.5 | \(10.5 / 60 = 0.175\) |
0:00 am | minutos | \(9*60 = 54\) | \(16.5*60 = 990\) | 10.5 |
9:00 am | minutos | 0 | \(7.5*60 = 540\) | 10.5 |
Advertencia
TODO
Índices y tablas