Vous êtes sur la page 1sur 3

1) Descripción del problema

El problema consiste en modelar una red de distribución de gasolina a cierta cantidad de estaciones de
servicio, que se encuentran georeferenciadas, mediante la simulación de camiones que hacen la entrega del
combustible. El recorrido de los camiones se hace buscando optimizar el recorrido, teniendo en cuenta el
problema del viajero. Para solucionar dicho problema, se hacen soluciones aleatorias y heurísticas (menor
distancia y mayor distancia).

2) Parámetros, variables, restricciones y función objetivo del modelo.

Para modelar el problema se hace uso de varias clases que cuentan con sus propios atributos y métodos.

Las clase se enumeran a continuación:

Camión: esta clase es una implementación de la interfaz Comparable, por lo cual impone un orden sobre los
objetos propios de esta clase. Como atributos tiene el costo por hora por conductor, el costo de viaje fijo,
el costo de viaje por kilómetro, una lista de compartimentos, el numero de camión, la cantidad de viajes, el
tiempo, la estación actual, el tipo de camión, la distancia total recorrida, la cantidad de salidas desde la
estación y la presencia de gasolina en el tanque. Cuenta con un constructor que usando el tipo y el número de
camión, da valores a los atributos al instanciar un objeto de la clase. De igual manera, implementa métodos
que simulan el envío a las estaciones y los distribuidores, así como la creación de una clase interna llamada
Costos, que realiza los cálculos de costos e impresión de los mismos. Además, implementa el método compareTo,
que es propio de la interfaz Comparable.

Compartimiento: esta clase tiene únicamente dos atributos, capacidad y cantidad restante. También, implementa
el constructor de la misma, permitiendo modelar los compartimientos presentes en los camiones que se modelan
en la simulación.

Coordenada: Clase que modela la georreferenciación de las estaciones, sus atributos son latitud y longitud.
Presenta dos constructores, uno vacío y otro que usa dos parámetros para instanciar la ubicación de cada
estación.

DistanciaYDuracion: como lo indica su nombre, esta clase modela la distancia y la duración de cada uno de los
recorridos realizados por los camiones. Presenta dos constructores, al igual que Coordenada, y un método para
convertir en String los valores e imprimir resultados.

Distribuidor: modela el distribuidor de combustible, teniendo en cuenta su ubicación mediante Coordenada, y


una lista de camiones asociada al distribuidor. Implementa un constructor y el método toString
Estacion: Esta clase tiene cuatro atributos, posicion (que permite ubicar la estación), demanda, número de
estación y un booleano que permite saber si ha cumplido o no con su labor. Esta clase presenta sobrecarga en
el constructor, un método para acceder a la demanda, implementa el toString y un método orientado a suplir la
demanda que se presenta en la estación.

Heuristicas: esta clase no presenta atributos, sino que mediante la implementación de tres métodos, que
retornan una estación en particular , simula encontrar estaciones aleatoriamente, o encontrar la menor
distancia, o la mayor distancia, de acuerdo al método empleado. En el caso de la heurística aleatoria se
genera un número aleatorio dentro de un ciclo, hasta que se tome una estación. Para los casos de menor y mayor
distancia, se toma una lista de estaciones y mediante comparaciones dentro de ciclos se encuentra la distancia
deseada.

ObtenerDistancia: esta clase hace uso de objetos y arreglos JSON (Java Script Object Notation), formato ligero
para el intercambio de datos, que es de fácil lectura y escritura tanto como para los humanos como para las
máquinas (sin importar el lenguaje de programación que se utilice).

De manera general, JSON está constituido por dos estructuras:

 Una colección de pares de nombre/valor. En varios lenguajes esto es conocido como un objeto, registro,
estructura, diccionario, tabla hash, lista de claves o un arreglo asociativo.

 Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa como arreglos,
vectores, listas o secuencias.

Esta clase implementa únicamente un método llamado ObtenerDistancia, que retorna un tipo de dato
DistanciaYDuracion mediante el uso de la API de google para representar las coordenadas en google maps
mediante objetos JSON. Se hace la conexión con la API y se concatenan los datos obtenidos en un String llamado
output. Dicho String es convertido en objetos JSON, que se organizan en arreglos de acuerdo al atributo a
tener en cuenta (routes, legs, duration y distance), retornando finalmente un objeto del tipo
DistanciaYDuracion.

ProblemaTSP: esta clase simula el problema del viajero, usa atributos como el número de nodos, el tiempo y
matrices de coordenadas y de distancias. Implementa los get de sus atributos y en su constructor realiza la
lectura de un archivo llamado Berlin52.txt. Para la lectura del archivo, crea un lector, un buffer de lectura
que lee línea por linea. Posteriormente mediante la clase StringTokenizer consigue tomar una a una las
subcadenas del String leído en el archivo. Luego, mediante el uso de ciclos llena las matrices hasta la
cantidad de nodos definida por el archivo. También, esta clase cuenta con un método que permite imprimir la
solución.

SolucionAleatoria: la clase tiene como atributos un ProblemaTSP, un arreglo de enteros para la solución y la
funcionObjetivo. En el constrictor se instancias los valores de los atributos, y la función se inicia en 0.0.
También, se implementa un método llamado generarSolucion(), que instancia un ArrayList de enteros llamado
nodosNoConectados. Inicialmente se llena el ArrayList mediante un ciclo. A continuación, se elige
aleatoriamente un nodo llamado nodoInicialy mediante otro ciclo se van tomando uno a uno los nodos del
ArrayList, cambiando el valor de funcionObjetivo, de acuerdo a la matriz de distancias. Finalmente se imprime
el vector solucion y el valor de la distancia total (funcionObjetivo)
VecinoMasCercano: esta clase tiene un atributo del tipo ProblemaTSP, un arreglo de enteros llamado solucion y
una funcionObjetivo. Al igual que la clase SolucionAleatoria, en el constructor instancia los atributos y da
un valor de 0.0 a la funcionObjetivo. También implementa el método generarSolucion(). Este método, funciona de
manera similar al de la SolucionAleatoria, pues utiliza un ArrayList de nodos y lo recorre teniendo en cuenta
la distancia entre ellos y buscando el vecino más cercano en cada iteración de los ciclos.

3) Descripción de como se genera la solución aleatoria. Deben presentar la parte del código de su
programa en donde esto es implementado.

TSP: la clase principal del modelo. Esta clase cuenta con métodos para la Solución aleatoria, la solución con
menor distancia y con mayor distancia. También, implementa un método llamado solucionado, que es de tipo
booleano, y permite verificar si el problema ha sido o no resuelto. Los métodos para soluciones mencionados,
crean un archivo .txt donde guardan los valores, y mediante FileWritter y BufferedWritter escriben en él. Se
crea un String con el restulatdo, que mediante un ciclo que verifica si el problema se ha o no solucionado y
la implementación de estructuras de selección if-else de acuerdo a la cantidad de viajes y la presencia o no
de gasolina en los camiones envía el camión al distribuidor o hace uso de la Heuristica definida anteriormente.
A continuación, se ordenan los camiones y se hace un ciclo para que cada camión sea enviado al distribuidor,
totalizando el tiempo, la duración y la distancia. Finalmente, se calculan los costos totales y se imprimen.
La principal diferencia entre las soluciones es la heurística utilizada dentro de ellas.

4) Descripción de como se genera la solución heurística. Deben presentar la parte del código de su
programa en donde esto es implementado.

Vous aimerez peut-être aussi