Supported versions:
pgr_pickDeliverEuclidean - Experimental¶
pgr_pickDeliverEuclidean
- Problema de Ruteo del Vehículo de Recogida y Entrega
Advertencia
Posible bloqueo del servidor
Estas funciones pueden crear un bloqueo del servidor
Advertencia
Funciones experimentales
No son oficialmente de la versión actual.
Es probable que oficialmente no formen parte de la siguiente versión:
Las funciones no podrían hacer uso de ANY-INTEGER ni ANY-NUMERICAL
El nombre puede cambiar.
La firma (declaración de funciones) podría cambiar.
La funcionalidad puede cambiar.
Las pruebas de pgTap pueden estar ausentes.
Posiblemente necesite codificación c/c++.
Puede haber carencia de documentación.
Hay documentación que, en dado caso, podría ser necesario reescribir.
Ejemplos de documentación que puede ser necesario generar automáticamente.
Puede ser necesaria más retroalimentación por parte de la comunidad.
Puede depender de una función propuesta de pgRouting.
Podría depender de una función obsoleta de pgRouting
Disponibilidad
Versión 3.0.0
Nueva función experimental
Sinopsis¶
Problema: Distribuya y optimice los pares de recogida-entrega en una flota de vehículos.
El problema de optimización es NP-hard.
Recogida y Entrega:
capacitado
con ventanas de tiempo.
Los vehículos
tienen (x, y) ubicaciones de inicio y finalización.
tener un inicio y un final de los tiempos de servicio.
tienen horarios de apertura y cierre para las ubicaciones de inicio y finalización.
Un pedido es para hacer una recogida y una entrega.
tiene (x, y) ubicaciones de recogida y entrega.
tiene horarios de apertura y cierre para los lugares de recogida y entrega.
tiene una recogida y entrega de tiempos de servicio.
Hay un cliente donde entregar una recogida.
tiempo de viaje entre los clientes es distancia / velocidad
La recogida y entrega se realizan con el mismo vehículo.
La recogida se realiza antes de la entrega.
Características¶
No hay varias ventanas de tiempo para una ubicación.
Menos vehículo utilizado se considera mejor.
Menos duración total es mejor.
Menos tiempo de espera es mejor.
Seis diferentes soluciones iniciales opcionales
la mejor solución encontrada será el resultado
Firma¶
pgr_pickDeliverEuclidean(orders_sql, vehicles_sql [,factor, max_cycles, initial_sol])
RETURNS SET OF (seq, vehicle_seq, vehicle_id, stop_seq, stop_type, order_id,
cargo, travel_time, arrival_time, wait_time, service_time, departure_time)
Parámetros¶
Los parámetros son:
orders_sql, vehicles_sql [,factor, max_cycles, initial_sol]
Donde:
Columna |
Tipo |
Valores predeterminados |
Descripción |
---|---|---|---|
orders_sql |
|
Pick & Deliver Orders SQL consulta que contiene las órdenes que se van a procesar. |
|
vehicles_sql |
|
La consulta Pick & Deliver Vehicles SQL contiene los vehículos que se van a utilizar. |
|
factor |
|
1 |
(Opcional) Multiplicador de tiempo de viaje. Ver Manejo de Factores |
max_cycles |
|
10 |
(Opcional) Número máximo de ciclos a realizar en la optimización. |
initial_sol |
|
4 |
(Opcional) Solución inicial a utilizar.
|
Pick & Deliver Orders SQL (Recoger y Entregar Pedidos)¶
Una instrucción SELECT que devuelve las siguientes columnas:
id, demand
p_x, p_y, p_open, p_close, [p_service, ]
d_x, d_y, d_open, d_close, [d_service, ]
Donde:
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 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 |
SQL de Vehículos de Recogida y Entrega¶
Una instrucción SELECT que devuelve las siguientes columnas:
id, capacity
start_x, start_y, start_open, start_close [, start_service, ]
[ end_x, end_y, end_open, end_close, end_service ]
Donde:
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 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. |
Descripción del resultado (TODO Disussion: Euclidean & Matrix)¶
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 |
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 |
|
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 |
|
order_id |
BIGINT |
|
cargo |
FLOAT |
|
travel_time |
FLOAT |
total_travel_time La suma de todo el tiempo_de_viaje |
arrival_time |
FLOAT |
|
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
Ejemplo¶
En este ejemplo se utilizan los siguientes datos: TODO put link
SELECT * FROM pgr_pickDeliverEuclidean(
'SELECT * FROM orders ORDER BY id',
'SELECT * from vehicles'
);
seq | vehicle_seq | vehicle_id | stop_seq | stop_type | order_id | cargo | travel_time | arrival_time | wait_time | service_time | departure_time
-----+-------------+------------+----------+-----------+----------+-------+---------------+---------------+-----------+--------------+----------------
1 | 1 | 1 | 1 | 1 | -1 | 0 | 0 | 0 | 0 | 0 | 0
2 | 1 | 1 | 2 | 2 | 3 | 30 | 1 | 1 | 1 | 3 | 5
3 | 1 | 1 | 3 | 3 | 3 | 0 | 1.41421356237 | 6.41421356237 | 0 | 3 | 9.41421356237
4 | 1 | 1 | 4 | 2 | 2 | 20 | 1.41421356237 | 10.8284271247 | 0 | 2 | 12.8284271247
5 | 1 | 1 | 5 | 3 | 2 | 0 | 1 | 13.8284271247 | 0 | 3 | 16.8284271247
6 | 1 | 1 | 6 | 6 | -1 | 0 | 1.41421356237 | 18.2426406871 | 0 | 0 | 18.2426406871
7 | 2 | 1 | 1 | 1 | -1 | 0 | 0 | 0 | 0 | 0 | 0
8 | 2 | 1 | 2 | 2 | 1 | 10 | 1 | 1 | 1 | 3 | 5
9 | 2 | 1 | 3 | 3 | 1 | 0 | 2.2360679775 | 7.2360679775 | 0 | 3 | 10.2360679775
10 | 2 | 1 | 4 | 6 | -1 | 0 | 2 | 12.2360679775 | 0 | 0 | 12.2360679775
11 | -2 | 0 | 0 | -1 | -1 | -1 | 11.4787086646 | -1 | 2 | 17 | 30.4787086646
(11 rows)
Ver también¶
Las consultas utilizan la red Datos Muestra .
Índices y tablas