La metodología que vamos a utilizar será implementar de forma sucesiva modelos cada vez más ajustados a las características del problema. Iremos describiendo, en cada modelo, las caracterís-ticas que lo definen.
En el primer y segundo modelo definimos una única Base y Estación de Transferencia. En el primero la hacemos coincidir, despreciando el desplazamiento entre ambas, haciendo que los recorridos empiecen y terminen en la Estación de Transferencia. En el segundo modelo, sin embargo, ya los vehículos parten de la base, donde también terminan su jornada aunque descarguen siempre en las Estaciones de Transferencia. El tercer modelo usa una única Base de vehículos pero con dos Estacio-nes de Transferencia. En este modelo estableceremos dos variantes, una primera en el que no for-zamos el uso de ambas Estaciones y una segunda en que si lo hacemos. El cuarto modelo, el más completo del estudio, se plantea con una única base de vehículos y con un número variable de Estaciones de Transferencia. Con este cuarto modelo se podrían abordar todos los casos.
Figura 4.1: Esquema Primer Modelo
Consideraciones particulares del modelo:
En este primer modelo, que mostramos en la figura 4.1, introducimos las siguientes consideraciones particulares:
- la función objetivo será principalmente la distancia recorrida por los vehículos de recogida (modificada, como ya veremos)
- considerando que los vehículos parten y terminan en las Estaciones de transferencia o Bases de vehículos, ya que estas, supuestamente, coincidirían. El supuesto obliga a que los vehícu-los vayan y vuelvan de las Estaciones de Transferencia, reduciendo el tiempo disponible en el empleado en recorrer este tramo. La distancia y el tiempo empleado entre la Estación de Transferencia y la Base de Vehículos se desprecia.
- No se considera la distancia recorrida ni el tiempo dentro de las poblaciones
A este supuesto podríamos aproximar las siguientes Bases que trabajan con una Estación de Trans-ferencia exclusivamente:
BASE |
ESTACIÓN DE TRANSFERENCIA |
Aracena |
Linares de la Sierra |
Condado |
Villarrasa |
Cuenca Minera |
El Campillo |
Isla Cristina |
La Redondela |
Tabla 4.1: Bases de vehículos asociadas al Primer Modelo
En estos casos todos los vehículos y contenedores son del mismo tipo: de carga trasera.
No se tendrá en cuenta otros criterios de coste.
Los índices indican los municipios desde el 1 al NP, siendo NP el número de municipios a considerar en el caso. El subíndice 0 se reserva a la estación de transferencia, de donde salen los vehículos y donde vuelven para su vaciado y, si acaso, vuelta a salir con el vehículo vacío.
Cuando el índice vaya de 1 a número de poblaciones hablaremos de poblaciones o municipios y cuando el índice vaya de cero al número de poblaciones hablaremos de puntos (que incluiría la esta-ción de transferencia y los municipios).
Usaremos los subíndices i y j para las poblaciones y estación de transferencia, k para los vehículos y v para los viajes.
El número de vehículos no se optimiza sino que entra al modelo como parámetro.
NP |
int |
Número de poblaciones o municipios
|
NC |
int |
Número de vehículos asociados a la Estación de Transferen-cia
|
NV |
int |
Número máximo de viajes por vehículo
|
dij |
float |
Distancia entre el el punto i al j. Tanto i como j van desde 0 a NP. En kilómetros
|
TR |
float |
Tiempo (en horas) que se tarda en recoger un contenedor
|
RMi |
int |
Cantidad de basura generada en la población i. En número de contenedores. i entre 1 y NP.
|
U |
int |
Cota superior de RM(i)
|
CargaMaxk |
int |
Carga máxima de cada vehículo en número de contenedores; k entre 1 y NV
|
TJork |
int |
Tiempo (horas) máximo de disponibilidad de cada vehículo
|
VMk |
float |
Velocidad media de cada vehículo en carretera
|
T_Vaciado |
float |
Tiempo que tardamos en dejar el camión listo para la si-guiente recogida
|
PesoNumViajes |
Int |
Valor utilizado con la variable n_viaj en la función objetivo
|
PesoNumVisitas |
int |
Valor utilizado con la suma de las variables n_visj en la fun-ción objetivo
|
xijkv |
bin |
Si es 1, el vehículo recorre el tramo del punto i al j, entrando en ambos lugares que, si son municipios, es para recoger basura. Tanto i como j varían entre 0 y NP.
|
yjkv |
Int |
Cantidad de basura (número de contenedores) que el vehículo k en el viaje v recoge del municipio j; j varía entre 1 y NP
|
uj |
Int |
Variable auxiliar que utilizamos para evitar subitinerarios desco-nectados
|
zijkv |
int |
Variable auxiliar que utilizamos para linealizar una restricción; i varía entre 0 y NP, j entre 1 y NP
|
Estas variables las utilizamos para recoger datos que nos indican el funcionamiento del servicio y que normalmente las volcamos en la hoja de cálculo auxiliar.
t_reckv |
float |
Tiempo empleado, exclusivamente en el recorrido, por cada ve-hículo k en cada viaje v:
|
t_conkv |
float |
Tiempo empleado por cada vehículo (k) en recoger todos los contenedores durante un viaje (v):
|
t_vack |
float |
Tiempo que emplea cada vehículo en estar disponible:
|
t_vehk |
float |
Tiempo total empleado por cada vehículo:
|
c_vehkv |
int |
Basura (número de contenedores) recogida por un vehículo (k) en cada viaje (v):
|
d_vehkv |
float |
Distancia recorrida (en kms) por el vehículo k en cada viaje v:
|
d_Recorrida |
float |
Distancia recorrida por todos los vehículos:
|
|
|
|
y_TVik |
int |
Cantidad recogida en cada municipio por población y vehículo. Almacenamos el número de contenedores que recogemos por cada camión y en cada municipio:
|
n_viaj |
int |
Número total de viajes. Es el número total de viajes realizados por todos los vehículos:
|
n_visj |
Int |
Número de visitas a la población. El número de veces que una población es visitada por camiones para que le recogen toda o parte de la basura:
|
Minimizar la distancia recorrida por todos los vehículos en todos los viajes que realicen para recoger los residuos influenciada con el número de vehículos y de viajes. Es decir, tenemos que minimizar la siguiente función de coste:
Para poder monitorizar algunos valores vamos a descomponer la función:
Minimizar d_Recorrida, siendo esta:
Desde cualquier punto solo podremos ir a otro, con un determinado vehículo y viaje:
A cualquier punto solo podemos llegar desde uno, con un determinado vehículo y viaje:
Para evitar recorridos inconexos como 3 → 7, 7 → 3 y 0 → 4, 4 → 8, 8 → 9, 9 → 0. Lo que evitamos con esta restricción es que si un tramo i-j se recorre no se pueda hacer el inverso: j-i. Hemos excep-tuado el índice 0 ya que si admitimos ir desde la estación de transferencia a un municipio y volver:
Se ha de recoger toda la basura generada en cada municipio. La suma de los productos de yjkv (can-tidad de basura que el vehículo k en su viaje v recoge del municipio j) por xijkv (que nos indica que el vehículo k en su viaje v llega al municipio j procedente del punto i) para todos los vehículos y duran-te todos los viajes sebe ser igual a la demanda del municipio j. Es necesario multiplicar los valores de y por x para que esta variable no trabaje de forma independiente de x. Si no lo hiciéramos así, estaríamos contabilizando basura recogida de los municipios sin haber pasado por ellos:
El problema que nos encontramos es que el producto de dos variables (una entera y la otra bi-naria) ya no nos permite plantear un sistema de ecuaciones lineales. Podemos cambiar esta restricción por las siguientes cuatro restricciones lineales, utilizando una variable auxiliar z:
En vez de la restricción anterior, esta opción es más sencilla:
Y para evitar que x valga continuamente 0 a pesar de valer y > 0:
Siendo U una cota superior de RM
Para evitar recorrer lugares donde no se recoge
basura, es decir para evitar situaciones como : (no
recojo basura a pesar de haber llegado):
Para evitar tramos de recorridos que no sean consecutivos, es decir llegar a un municipio determi-nado y luego no salir de él. Impondríamos la siguiente restricción:
Que viene a indicar que para un vehículo y viaje determinado, salgo del municipio s si y solo si llego a él.
Introduzcamos ahora la limitación de la capacidad de los vehículos haciendo que la suma de las cantidades recogidas por los vehículos no supere su capacidad máxima:
En cada viaje de cada vehículo, todas las cantidades de basura recogidas en los diferentes munici-pios no pueden superar la capacidad máxima del vehículo. Esta restricción la vamos a descomponer para poder dejar registro de las cantidades recogidas:
El tiempo que emplea cada vehículo no puede superar su tiempo de disponibilidad, que si va asociado a un conductor específico, este tiempo coincidiría con la jornada de trabajo. El tiempo lo emplea en:
i. Recorrer desde la estación de transferencia al primer municipio, recorrer los municipios donde recoge basura, regresar a la estación. (t_rec):
ii. Recoger los contenedores (t_con):
iii. Preparación de camión para su uso en el siguiente viaje (vaciar la basura, fundamentalmente) (t_vac):
La restricción sería:
Para que los vehículos vuelvan a la estación de transferencia que es de donde salieron, imponemos la siguiente restricción:
El primer miembro representa la salida y el segundo la llegada. Si el primer miembro vale 1 (el vehí-culo en ese viaje salió) el segundo miembro también valdrá 1 (el vehículo en ese viaje, regresa).
- Hay municipios que solo recoge un contenedor
- Utiliza un nuevo camión aunque tenga viajes disponibles de otro
- Usa un viaje 2 sin haber usado el 1
Figura 4.2: Esquema del Segundo Modelo
Consideraciones particulares del modelo:
Un esquema de este modelo podemos verlo en la figura 4.2. Seguimos tratando:
- Los vehículos comienzan y terminan su jornada en las bases, y descargan los residuos en una única Estación de Transferencia, de donde parten en el siguiente viaje.
- Consideramos la distancia recorrida y el tiempo empleado dentro de las poblaciones, base a un parámetro relacionado con el tamaño de la población y en una velocidad media única para todos los vehículos.
- La función objetivo se compone de tres sumandos: distancia recorrida total, número total de vi-sitas (modificado con un peso) y número total ve viajes (modificado con un peso).
- Las distancias entre los puntos las calculamos a partir de las coordenadas geográficas que nos entran como parámetros, es decir, son distancias geométricas.
- El tiempo medio de recogida de un contenedor lo asociamos al sistema de recogida, dependien-do por tanto del tipo de vehículo.
- Al no disponer de los tracks de los vehículos, se ha supuesto que el recorrido de los vehículos dentro de la población es nueve veces su diámetro medio.
- Al no disponer de los datos actuales de recogida, se ha supuesto que la capacidad de un conte-nedor, una vez prensado en el vehículo es inferior. Este factor de compresión se introduce como parámetro del modelo; en general 1/15.
- En este modelo consideramos las siguientes bases (ver tabla 4.2):
-
Base |
Estaciones de Transferencia |
Aracena Condado Cuenca Minera Isla Cristina |
Linares de la Sierra Villarrasa El Campillo La Redondela |
Tabla 4.2: Bases de vehículos asociadas al Segundo Modelo
NP |
int |
Número de poblaciones o municipios
|
NC |
int |
Número de vehículos asociados a la estación de transferencia
|
NV |
int |
Número máximo de viajes por vehículo
|
muni |
range |
1..NP. Solo Municipios
|
aMuni |
string |
Array con los municipios
|
sMuni |
{string} |
Conjunto con los municipios
|
base |
range |
0..NP. Municipios y Base de vehículos. El subíndice 0 correspon-de a la Base de vehículos.
|
aBase |
string |
Array con la Base de vehículos y los municipios.
|
sBase |
{string} |
Conjunto con la Base de vehículos y los municipios.
|
tran |
range |
1..NP+1. Municipios y Estación de Transferencia. El subíndice NP+1 corresponde a la Estación de Transferencia
|
aTran |
string |
Array con la Estación de Transferencia y los municipios.
|
sTran |
{string} |
Conjunto con la Estación de Transferencia y los municipios
|
punt |
range |
0..NP+1. Municipios, Estación de Transferencia y Base de vehí-culos. El subíndice 0 corresponde a la Base de vehículos. El NP+1 corresponde s la Estación de Transferencia.
|
aPunt |
string |
Array con la Base de vehículos, la Estación de Transferencia y los municipios
|
sPunt |
{string} |
Conjunto con la Base de vehículos, la Estación de Transferencia y los municipios
|
vehi |
range |
1..NC
|
aVehi |
string |
Array con las matrículas de los vehículos
|
sVehi |
{string} |
Conjunto con las matrículas de los vehículos
|
viaj |
range |
1..NV
|
viaT |
range |
1..(NV+1): Incluimos el viaje de regreso a la Base.
|
dij |
float |
Distancia entre el el punto i al j. Tanto i como j van desde 0 a NP+1, (kilómetros)
|
TR(vehi) |
float |
Tiempo (horas) que se tarda en recoger un contenedor. Depen-de del sistema de recogida (tipo de contenedor y vehículo) que usemos.
|
RM(sMuni) |
int |
Cantidad de basura generada en la población i (número de con-tenedores).
|
U |
Int |
Cota superior de RM(i) y, por tanto, de y.
|
CargaMax(vehi) |
int |
Carga máxima permitida de cada vehículo (número de contene-dores).
|
TJor(vehi) |
int |
Tiempo (horas) máximo de disponibilidad de cada vehículo.
|
VM(vehi) |
float |
Velocidad media (km/h) de cada vehículo en carretera
|
VP |
float |
Velocidad media (km/h) de los vehículos en población. La consi-deramos igual para todos los vehículos y en todas las poblacio-nes.
|
T_Vaciado |
float |
Tiempo (horas) que tardamos en descargar el vehículo y dejarlo listo para la siguiente recogida. Existirá siempre después de ca-da recogida, incluida la última.
|
DiamMed(sMuni) |
float |
Diámetro (kilómetros) medio de cada población. Recorrido aproximado que realizamos cada vez que entremos en la po-blación.
|
RecPob(sMuni) |
float |
Recorrido (kilómetros) que realizaríamos si recogiéramos todos los contenedores de la población. Se contabiliza una vez que es-tamos dentro de la población y se termina al recoger el último contenedor.
|
PesoNumViajes |
Int |
Valor utilizado con la variable n_viaj en la función objetivo para decidir su influencia en esta.
|
PesoNumVisitas |
int |
Valor utilizado con la variable n_vis_tot en la función objetivo para decidir su influencia en esta.
|
lat(sPunt) |
float |
Latitud geográfica (en grados) de la Base de vehículos, Estación de Transferencia y municipios
|
lon(sPunt) |
float |
Longitud geográfica (en grados) de la Base de vehículos, Esta-ción de Transferencia y municipios
|
dij |
float |
Distancia entre puntos
|
latRd |
float |
Latitud de cada punto en radianes
|
lonRd |
float |
Longitud de cada punto en radianes |
xijkv |
bin |
Si es 1, el vehículo recorre el tramo del punto i al j, entrando en ambos lugares, que si son municipios para recoger basura. Tanto i como j pueden entre 0 y NP+1, dependiendo del caso.
|
yjkv |
Int |
Cantidad de basura (número de contenedores) que el vehículo k en el viaje v recoge del municipio j; j varía entre 1 y NP
|
uj |
Int |
Variable auxiliar que utilizamos para evitar subitinerarios desco-nectados. j entre 0 y NP. uj entre 0 y 100.
|
zijkv |
int |
Variable auxiliar que utilizamos para linealizar una restricción; i varía entre 0 y NP+1, j entre 1 y NP.
|
Estas variables las utilizamos para recoger datos que nos indican el funcionamiento del servicio y que algunas de ellas las volcamos en la hoja de cálculo auxiliar.
t_reckv |
float |
Tiempo empleado para recorrer todos los tramos (incluidos Ba-se de vehículos y Estación de Transferencia), por cada vehículo k en cada viaje v, excluyendo el de regreso a la base:
|
t_regk |
float |
Tiempo empleado en regresar a la Base de vehículos (desde la Estación de Transferencia) una vez terminada la recogida:
|
t_conk |
float |
Tiempo empleado por cada vehículo (k) en recoger los contene-dores de las poblaciones que recorre y durante todos sus viajes:
|
t_vack |
float |
Tiempo que emplea cada vehículo en estar disponible. Observemos que contamos las veces que se llega a la Estación de Transferencia (siempre con el vehículo cargado) y lo multiplicmos por el tiempo medio de vaciado de un vehículo:
|
t_pobk |
float |
Tiempo de recorrido por vehículo en el interior de las pobla-ciones. Excluimos el tiempo dedicado a recoger los contenedo-res:
|
t_vehk |
float |
Tiempo total empleado por cada vehículo:
|
c_vehkv |
int |
Carga (número de contenedores) recogida por un vehículo k en cada viaje v:
|
d_vehkv |
float |
Distancia recorrida (en kms) por el vehículo k en cada viaje v:
|
d_veh_tot |
float |
Distancia total recorrida (kms) por todos los vehículos en todos sus viajes en los recorridos de recogida:
|
d_pobk |
float |
Distancia recorrida por vehículo dentro de poblaciones. Desde que entra hasta que sale de cada una de ellas. Sumamos las visi-tas del vehículo a cada población (por la distancia de entrada a cada una) y el recorrido por la población recogiendo los contenedores:
|
d_reg_tot |
float |
Distancia recorrida por todos los vehículos al regresar a la Base de vehículos (desde la estación de Transferencia):
|
|
|
|
d_Recorrida |
float |
Distancia total recorrida por todos los vehículos y durante todos los viajes:
|
|
|
|
y_TVik |
int |
Cantidad recogida en cada municipio por población y vehículo. Almacenamos el número de contenedores que recogemos por cada camión y en cada municipio:
|
n_viaj |
int |
Número total de viajes. Es el número total de viajes realizados por todos los vehículos, incluidos los de vuelta a la Base de vehí-culos. Lo calculamos con tres sumandos: Los que salen de la Base (pri-mer viajes, todos: NC), los que salen de la Estación de Transferen-cia (a partir del segundo viajes) para continuar la recogida y los que regresan a la Base desde la Estación(todos: NC):
Otra manera de calcularlo es con dos sumandos: número de lle-gadas a la Estación de transferencia (para descargar) más los via-jes de regreso a la Base de vehículos (todos: NC):
|
n_visjk |
Int |
Número de visitas a la población. El número de veces que una población j es visitada por un vehículo k para que le recojan toda o parte de la basura:
|
n_vis_tot |
Int |
Número total de visitas a las poblaciones. Sencillamente, total-zamos todas la visitas de todos los vehículos a totas la poblacio-nes:
|
Minimizar la distancia recorrida por todos los vehículos en todos los viajes que realicen para recoger los residuos con un cierto apoyo en el número total de viajes y de visitas. Es decir, tenemos que mi-nimizar la siguiente función de coste:
Desde cualquier población solo podremos ir a otra, con un determinado vehículo y viaje:
Desde la Base de vehículos, con cada vehículo y en el primer viaje, iremos a una población y solo a una:
En el resto de viajes, desde la Estación de Transferencia podremos ir a un solo municipio, si el vehículo sale en ese viaje:
A cualquier población solo podemos llegar desde otra, con un determinado vehículo y viaje:
A la Estación de Transferencia solo se puede llegar desde una única población excepto en el viaje de regreso:
El primer viaje nunca se llega a la Base de vehículos:
Para evitar recorridos inconexos entre poblaciones como 3 → 7, 7 → 3. Lo que evitamos con esta restricción es que si un tramo i-j se recorre no se pueda hacer el inverso: j-i. Hemos exceptuado el índice NP+1 ya que sí admitimos ir desde la Estación de Transferencia a un municipio y volver:
Se ha de recoger toda la basura generada en cada municipio. La suma de los productos de yjkv (can-tidad de basura que el vehículo k en su viaje v recoge del municipio j) por xijkv (que nos indica que el vehículo k en su viaje v llega al municipio j procedente del punto i) para todos los vehículos y duran-te todos los viajes sebe ser igual a la demanda del municipio j. Es necesario multiplicar los valores de y por x para que esta variable no trabaje de forma independiente de x. Si no lo hiciéramos así, estaríamos contabilizando basura recogida de los municipios sin haber pasado por ellos:
El problema que nos encontramos es que el producto de dos variables (una entera y la otra binaria) ya no nos permite plantear un sistema de ecuaciones lineales. Podemos cambiar esta restricción por las siguientes cuatro restricciones lineales, utilizando una variable auxiliar z:
Además, se debe satisfacer:
Para evitar recorrer lugares donde no se recoge
basura, es decir para evitar situaciones como : (no
recojo basura a pesar de haber llegado):
Para evitar tramos de recorridos que no sean consecutivos, es decir llegar a un municipio determi-nado y luego no salir de él. Imponemos la siguiente restricción:
Que viene a indicar que para un vehículo y viaje determinado, se sale del municipio s si y solo si se llega a él.
Introduzcamos ahora la limitación de la capacidad de los vehículos haciendo que la suma de las cantidades recogidas por los vehículos no supere su capacidad máxima:
En cada viaje de cada vehículo, todas las cantidades de basura recogidas en los diferentes munici-pios no pueden superar la capacidad máxima del vehículo.
El tiempo que emplea cada vehículo no puede superar su tiempo de disponibilidad, que si va aso-ciado a un conductor específico, este tiempo coincidiría con la jornada de trabajo:
En el primer viaje, cada vehículo que sale de la Base, regresa a la Estación de Transferencia:
En los viajes siguientes, excepto el último, cada vehículo sale y vuelve a la Estación de Transferencia:
El primer miembro representa la salida y el segundo la llegada. Si el primer miembro vale 1 (el vehí-culo en ese viaje salió) el segundo miembro también valdrá 1 (el vehículo en ese viaje, regresa).
Los vehículos nunca van de la base a la estación (ya salen vacíos):
El último viaje (NV+1), cada vehículo lo emplea, exclusivamente, en volver a la base desde la Esta-ción de Transferencia, ya vacío:
Y ninguno, en el último viaje (NV+1) vuelve a la Estación de Transferencia:
En el resto de viajes, ninguno se realiza desde la estación de Transferencia a la Base de vehículos:
Los vehículos no vuelven a la base desde ningún municipio (con basura):
Solo en el primer viaje se sale de la base:
En el resto de viajes, ningún vehículo sale de la Base de vehículos:
Tabla 4.3: Bases de vehículos asociadas al Tercer Modelo
Consideraciones particulares del modelo:
En la figura 4.3 vemos una representación de este modelo, en el que en este caso:
- La diferencia con el segundo modelo es que en este, los vehículos de recogida pueden des-cargar en DOS Estaciones de Transferencia.
- No limitamos la cantidad descargada en cada Estación de Transferencia
- A partir del segundo viaje, el vehículo inicia su recorrido en la Estación de Transferencia don-de llegó en el viaje anterior.
- En este modelo podríamos incluir las bases de vehículos recogidas en la tabla 4.3.
Base |
Estaciones de Transferencia |
Andévalo Punta Umbría (NORD) Punta Umbría (TRASERA) |
Andévalo y La Redondela Huelva y La Redondela Huelva y La Redondela |
Figura 4.3: Esquema Tercer Modelo
Son los mismos que el segundo modelo
Son los mismos que el segundo modelo
Son las mismas que el segundo modelo
Es la misma que el segundo modelo.
Estas variables las utilizamos para recoger datos que nos indican el funcionamiento del servicio y que algunas de ellas las volcamos en la hoja de cálculo auxiliar.
t_reckv |
float |
Tiempo empleado para recorrer todos los tramos (incluidos Base de vehículos y Estaciones de Transferencia), por cada vehículo k en cada viaje v, excluyendo el de regreso a la base:
|
t_regk |
float |
Tiempo empleado en regresar a la Base de vehículos (desde las Estaciones de Transferencia ) una vez terminada la recogida:
|
t_conk |
float |
Tiempo empleado por cada vehículo (k) en recoger los contene-dores de las poblaciones que recorre y durante todos sus viajes.:
|
t_vack |
float |
Tiempo que emplea cada vehículo en estar disponible. Observemos que contamos las veces que se llega a la Estación de Transferencia (siempre con el vehículo cargado) y lo multiplica-mos por el tiempo medio de vaciado de un vehículo.
|
t_pobk |
float |
Tiempo de recorrido por vehículo en el interior de las poblacio-nes. Excluimos el tiempo dedicado a recoger los contenedores:
|
t_vehk |
float |
Tiempo total empleado por cada vehículo
|
c_vehkv |
int |
Carga (número de contenedores) recogida por un vehículo k en cada viaje v:
|
d_vehkv |
float |
Distancia recorrida (en kms) por el vehículo k en cada viaje v:
|
d_veh_tot |
float |
Distancia total recorrida (kms) por todos los vehículos en todos sus viajes en los recorridos de recogida:
|
d_pobk |
float |
Distancia recorrida por vehículo dentro de poblaciones. Desde que entra hasta que sale de cada una de ellas. Sumamos las visitas del vehículo a cada población (por la distancia de entrada a cada una) y el recorrido por la población recogiendo los contenedores:
|
d_reg_tot |
float |
Distancia recorrida por todos los vehículos al regresar a la Base de vehículos (desde las Estaciones de Transferencia):
|
|
|
|
d_Recorrida |
float |
Distancia total recorrida por todos los vehículos y durante todos los viajes, incluido el de regreso a la base:
|
|
|
|
y_TVik |
int |
Cantidad recogida en cada municipio por población y vehículo. Almacenamos el número de contenedores que recogemos por cada camión y en cada municipio:
|
n_viaj |
int |
Número total de viajes. Es el número total de viajes realizados por todos los vehículos, incluidos los de vuelta a la Base de vehí-culos. Lo calculamos con tres sumandos: Los que salen de la Base (primer viajes, todos: NC), los que salen de las Estaciones de Transferencia (a partir del segundo viaje) para continuar la reco-gida y los que regresan a la Base desde las Estaciones (todos: NC):
Otra manera de calcularlo es con dos sumandos: número de llegadas a las Estaciones de Transferencia (para descargar) más los viajes de regreso a la Base de vehículos (todos: NC):
|
n_visjk |
Int |
Número de visitas a la población. El número de veces que una población j es visitada por un vehículo k para que le recojan toda o parte de la basura:
|
n_vis_tot |
Int |
Número total de visitas a las poblaciones. Sencillamente, totalzamos todas la visitas de todos los vehículos a todas las poblaciones:
|
Y_kx |
Int |
Cantidades recogidas por cada vehículo y viaje. Para poder sacar a la hoja auxiliar las cantidades recogidas en cada población por cada vehículo y viaje. La x se sustituye por el número de vehículo:
|
Desde cualquier población solo podremos ir a otra, con un determinado vehículo y viaje:
Desde la Base de vehículos, con cada vehículo y en el primer viaje, iremos a una población y solo a una:
En el resto de viajes, desde una Estación de Transferencia podremos ir a un solo municipio, si el ve-hículo sale en ese viaje y de esa Estación:
A cualquier población solo podemos llegar desde otra, con un determinado vehículo y viaje:
A una Estación de Transferencia solo se puede llegar desde una única población excepto en el viaje de regreso:
El primer viaje nunca se llega a la Base de vehículos:
Para evitar recorridos inconexos entre poblaciones como 3 → 7, 7 → 3. Lo que evitamos con esta restricción es que si un tramo i-j se recorre no se pueda hacer el inverso: j-i. Hemos exceptuado el índice NP+1 ya que sí admitimos ir desde la Estación de Transferencia a un municipio y volver.
Esta restricción es la misma que en Segundo Modelo:
Se ha de recoger toda la basura generada en cada municipio. La suma de los productos de yjkv (cantidad de basura que el vehículo k en su viaje v recoge del municipio j) por xijkv (que nos indica que el vehículo k en su viaje v llega al municipio j procedente del punto i) para todos los vehículos y durante todos los viajes sebe ser igual a la demanda del municipio j. Es necesario multiplicar los valores de y por x para que esta variable no trabaje de forma independiente de x. Si no lo hiciera-mos así, estaríamos contabilizando basura recogida de los municipios sin haber pasado por ellos:
El problema que nos encontramos es que el producto de dos variables (una entera y la otra binaria) ya no nos permite plantear un sistema de ecuaciones lineales. Podemos cambiar esta restricción por las siguientes cuatro restricciones lineales, utilizando una variable auxiliar z:
Además, se debe satisfacer:
Para evitar recorrer lugares donde no se recoge basura es decir, para evitar situaciones como :
(no
recojo basura a pesar de haber llegado) introducimos la siguiente restricción:
Para evitar tramos de recorridos que no sean consecutivos, es decir llegar a un municipio determi-nado y luego no salir de él. Impondríamos la siguiente restricción:
Que viene a indicar que para un vehículo y viaje determinado, salgo del municipio s si y solo si llego a él.
Introduzcamos ahora la limitación de la capacidad de los vehículos haciendo que la suma de las can-tdades recogidas por los vehículos no supere su capacidad máxima:
En cada viaje de cada vehículo, todas las cantidades de basura recogidas en los diferentes munici-pios no pueden superar la capacidad máxima del vehículo.
Esta restricción es la misma que en el Segundo Modelo.
El tiempo que emplea cada vehículo no puede superar su tiempo de disponibilidad, que si va asocia-do a un conductor específico, este tiempo coincidiría con la jornada de trabajo:
Esta restricción es la misma que en el Segundo Modelo.
En el primer viaje, cada vehículo que sale de la Base, llega a una de las Estaciones de Transferencia, después de hacer el recorrido:
En los viajes siguientes, excepto el último de cada vehículo, cada uno sale de una Estación de transferencia llega a la misma o a otra:
El primer miembro representa la salida y el segundo la llegada. Si el primer miembro vale 1 (el vehículo en ese viaje salió de una Estación de Transferencia) el segundo miembro también valdrá 1 (el vehículo en ese viaje llega a una u otra Estación de Transferencia).
Los vehículos nunca van de la base a una Estación de Transferencia directamente (ya salen vacíos):
El último viaje (NV+1), cada vehículo lo emplea, exclusivamente, en volver a la base desde una de las Estaciones de Transferencia, ya vacío:
Y ninguno, en el último viaje (NV+1) vuelve a una Estación de Transferencia:
En el resto de viajes, ninguno se realiza desde una Estación de Transferencia a la Base de vehículos:
En el último viaje a la base solo se puede llegar desde una Estación de Transferencia , nunca desde las poblaciones:
Los vehículos no vuelven a la base desde ningún municipio (con basura):
Esta restricción es la misma que en el Segundo Modelo.
Solo en el primer viaje se sale de la base:
En el resto de viajes, ningún vehículo sale de la Base de vehículos:
Esta restricción es la misma que en el Segundo Modelo.
No existen viajes directos entre Estaciones de Transferencia:
No puedo salir de una si no he llegado previamente. Puedo no salir:
El número de vehículos que llegan a las estaciones de Transferencia es igual que el que sale:
Esta restricción la hemos usado de forma opcional, concretamente en las opciones B de cada Base de este modelo:
Figura 4.4: Esquema del Cuarto Modelo
Consideraciones particulares del modelo:
Multi-estaciones de Transferencia. En la figura 4.4 vemos un esquema de este modelo y en la tabla 4.4, la base que al relacionarse con tres Estaciones de Transferencia se adapta a este modelo.
En este modelo el número de estaciones es un parámetro de entrada. Diríamos que este modelo podría abarcar, conceptualmente, todos los casos tratados con los modelos anteriores pero añadiría complejidad innecesaria.
El único caso en el que es imprescindible utilizarlo es con la Base de Trigueros que actualmente tra-baja con tres Estaciones de Transferencia.
La función objetivo, las variables de decisión y los parámetros calculados son como en el modelo 2 y 3, pero las restricciones y las variables auxiliares cambian. Se incluye a continuación los nuevos pa-rámetros que habría que añadir a los que ya usábamos en el modelo 3 y la lista completa de varia-bles auxiliares y restricciones.
Base |
Estaciones de Transferencia |
Trigueros |
Huelva, Linares de la Sierra y Villarrasa |
Tabla 4.4: Bases de vehículos asociadas al Cuarto Modelo
Son los mismos que el segundo y tercer modelo, añadiendo las siguientes:
NE |
int |
Número de Estaciones de Transferencia
|
esta |
range |
1..NE. Estaciones de Transferencia
|
aEsta |
string |
Array con las Estaciones de Transferencia
|
sEsta |
{string} |
Conjunto con las Estaciones de Transferencia |
Son los mismos que el segundo y tercer modelo.
Son las mismas que el segundo y tercer modelo.
Es la misma que el segundo y tercer modelo.
Estas variables las utilizamos para recoger datos que nos indican el funcionamiento del servicio y que algunas de ellas las volcamos en la hoja de cálculo auxiliar.
t_reckv |
float |
Tiempo empleado para recorrer todos los tramos (incluidos Ba-se de Vehículos y Estaciones de Transferencia), por cada vehículo k en cada viaje v, excluyendo el de regreso a la base:
|
t_regk |
float |
Tiempo empleado en regresar a la Base de vehículos (desde las Estaciones de Transferencia ) una vez terminada la recogida y en el último viaje (NV+1):
|
t_conk |
float |
Tiempo empleado por cada vehículo (k) en recoger los contene-dores de las poblaciones que recorre y durante todos sus viajes:
|
t_vack |
float |
Tiempo que emplea cada vehículo en estar disponible. Observemos que contamos las veces que se llega a la Estación de Transferencia (siempre con el vehículo cargado) y lo multiplica-mos por el tiempo medio de vaciado de un vehículo:
|
t_pobk |
float |
Tiempo de recorrido por vehículo dentro de las poblaciones. Excluimos el tiempo dedicado a recoger los contenedores:
|
t_vehk |
float |
Tiempo total empleado por cada vehículo:
|
c_vehkv |
int |
Carga (número de contenedores) recogida por un vehículo k en cada viaje v:
|
d_vehkv |
float |
Distancia recorrida (en kms) por el vehículo k en cada viaje v:
|
d_veh_tot |
float |
Distancia total recorrida (kms) por todos los vehículos en todos sus viajes en los recorridos de recogida:
|
d_pobk |
float |
Distancia recorrida por vehículo dentro de poblaciones. Desde que entra hasta que sale de cada una de ellas. Sumamos las visi-tas del vehículo a cada población (por la distancia de entrada a cada una) y el recorrido por la población recogiendo los contenedores:
|
d_reg_tot |
float |
Distancia recorrida por todos los vehículos al regresar a la Base de Vehículos (desde las Estaciones de Transferencia):
|
d_Recorrida |
float |
Distancia total recorrida por todos los vehículos y durante todos los viajes, incluido el de regreso a la base:
|
y_TVik |
int |
Cantidad recogida en cada municipio por población y vehículo. Almacenamos el número de contenedores que recogemos por cada camión y en cada municipio:
|
n_viaj |
int |
Número total de viajes. Es el número total de viajes realizados por todos los vehículos, incluidos los de vuelta a la Base de vehí-culos. Lo calculamos con tres sumandos: Los que salen de la Base (primer viajes, todos: NC), los que salen de las Estaciones de Transferencia (a partir del segundo viaje) para continuar la reco-gida y los que regresan a la Base desde las Estaciones (todos: NC):
Otra manera de calcularlo es con dos sumandos: número de llegadas a las Estaciones de Transferencia (para descargar) más los viajes de regreso a la Base de vehículos (todos: NC):
|
n_visjk |
Int |
Número de visitas a la población. El número de veces que una población j es visitada por un vehículo k para que le recojan toda o parte de la basura:
|
n_vis_tot |
Int |
Número total de visitas a las poblaciones. Sencillamente, totali-zamos todas la visitas de todos los vehículos a totas la poblacio-nes:
|
Y_kx |
Int |
Cantidades recogidas por cada vehículo y viaje. Para poder sacar a la hoja auxiliar las cantidades recogidas en cada población por cada vehículo y viaje. La x se sustituye por el número de vehículo:
|
Las restricciones en este nuevo modelo quedan como sigue:
Desde cualquier población solo podremos ir a otra, con un determinado vehículo y viaje:
Desde la Base de vehículos, con cada vehículo y en el primer viaje, iremos a una población y solo a una:
En el resto de viajes, desde una Estación de Transferencia podremos ir a un solo municipio, si el vehículo sale en ese viaje y de esa Estación:
A cualquier población solo podemos llegar desde otra, con un determinado vehículo y viaje:
A una Estación de Transferencia solo se puede llegar desde una única población excepto en el viaje de regreso:
El primer viaje nunca se llega a la Base de vehículos:
Para evitar recorridos inconexos entre poblaciones como 3 → 7, 7 → 3. Lo que evitamos con esta restricción es que si un tramo i-j se recorre no se pueda hacer el inverso: j-i. Hemos exceptuado el índice NP+1 ya que sí admitimos ir desde la Estación de Transferencia a un municipio y volver.
Esta restricción es la misma que en Segundo Modelo:
Se ha de recoger toda la basura generada en cada municipio. La suma de los productos de yjkv (cantidad de basura que el vehículo k en su viaje v recoge del municipio j) por xijkv (que nos indica que el vehículo k en su viaje v llega al municipio j procedente del punto i) para todos los vehículos y durante todos los viajes sebe ser igual a la demanda del municipio j. Es necesario multiplicar los valores de y por x para que esta variable no trabaje de forma independiente de x. Si no lo hiciera-mos así, estaríamos contabilizando basura recogida de los municipios sin haber pasado por ellos:
El problema que nos encontramos es que el producto de dos variables (una entera y la otra binaria) ya no nos permite plantear un sistema de ecuaciones lineales. Podemos cambiar esta restricción por las siguientes cuatro restricciones lineales, utilizando una variable auxiliar z:
Además, se debe satisfacer:
Para evitar recorrer
lugares donde no se recoge basura, es decir para evitar situaciones como :
(no
recojo basura a pesar de haber llegado):
Para evitar tramos de recorridos que no sean consecutivos, es decir llegar a un municipio determi-nado y luego no salir de él. Impondríamos la siguiente restricción:
Que viene a indicar que para un vehículo y viaje determinado, salgo del municipio s si y solo si llego a él.
Introduzcamos ahora la limitación de la capacidad de los vehículos haciendo que la suma de las cantidades recogidas por los vehículos no supere su capacidad máxima:
En cada viaje de cada vehículo, todas las cantidades de basura recogidas en los diferentes munici-pios no pueden superar la capacidad máxima del vehículo. Esta restricción es la misma que en el Segundo Modelo.
El tiempo que emplea cada vehículo no puede superar su tiempo de disponibilidad, que si va asocia-do a un conductor específico, este tiempo coincidiría con la jornada de trabajo:
Esta restricción es la misma que en el Segundo Modelo.
En el primer viaje, cada vehículo que sale de la Base, llega a una de las Estaciones de Transferencia, después de hacer el recorrido:
En los viajes siguientes, excepto el último de cada vehículo, cada uno sale de una Estación de Trans-ferencia llega a la misma o a otra:
El primer miembro representa la salida y el segundo la llegada. Si el primer miembro vale 1 (el vehí-culo en ese viaje salió de una Estación de Transferencia) el segundo miembro también valdrá 1 (el vehículo en ese viaje llega a una u otra Estación de Transferencia).
Los vehículos nunca van de la base a una Estación de Transferencia directamente (ya salen vacíos):
El último viaje (NV+1), cada vehículo lo emplea, exclusivamente, en volver a la base desde una de las Estaciones de Transferencia, ya vacío:
Y en el último viaje (NV+1) ninguno vuelve a una Estación de Transferencia:
En el resto de viajes, ninguno se realiza desde una Estación de Transferencia a la Base de vehículos:
En el último viaje a la base solo se puede llegar desde una Estación de Transferencia, nunca desde las poblaciones:
Los vehículos no vuelven a la base desde ningún municipio (con basura):
Esta restricción es la misma que en el Segundo Modelo.
Solo en el primer viaje se sale de la base:
En el resto de viajes, ningún vehículo sale de la Base de vehículos:
Esta restricción es la misma que en el Segundo Modelo.
No existen viajes directos entre Estaciones de Transferencia:
No puedo salir de una si no he llegado previamente. Puedo no salir:
El número de vehículos que llegan a las estaciones de Transferencia es igual que el que sale:
Esta restricción la hemos usado de forma opcional. En caso de la Base de Trigueros, no la hemos utilizado. El modelo por sí mismo ya utiliza las tres Estaciones de Transferencia:
Capítulo 2: Especificación del problema
Capítulo 3: Modelo MILP básico