0% encontró este documento útil (0 votos)
35 vistas14 páginas

Optimización de Rutas de Entrega

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Temas abordados

  • secuencia de entregas,
  • entrega de mercancías,
  • pseudocódigo,
  • sistemas de información,
  • interacción del usuario,
  • eficiencia logística,
  • programación de entregas,
  • teoría de grafos,
  • interfaz de usuario,
  • programación de sistemas
0% encontró este documento útil (0 votos)
35 vistas14 páginas

Optimización de Rutas de Entrega

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Temas abordados

  • secuencia de entregas,
  • entrega de mercancías,
  • pseudocódigo,
  • sistemas de información,
  • interacción del usuario,
  • eficiencia logística,
  • programación de entregas,
  • teoría de grafos,
  • interfaz de usuario,
  • programación de sistemas

Asignatura

Programación estructurada

Licenciatura
Licenciatura en ingeniería en sistemas computacionales.

Nombre
Vázquez Molina Rubén Alejandro

Matrícula
010676831

Tarea
Actividad con el Asesor Académico Virtual

Semana
2

Docente
Castillo López Sandra

Fecha
07/15/2024
Actividad Inicial con el Asesor Académico Virtual

E nlace de la presentación o video

Coloca aquí el enlace de tu presentación o video, para ello borra este texto.

C apturas de pantalla de los prompts


Actividad Inicial con el Asesor Académico Virtual
Actividad Inicial con el Asesor Académico Virtual
Actividad Inicial con el Asesor Académico Virtual
Actividad Inicial con el Asesor Académico Virtual
Actividad Inicial con el Asesor Académico Virtual
Actividad Inicial con el Asesor Académico Virtual

Contenido temático
 Una pequeña empresa de logística necesita un sistema para calcular rutas
óptimas de entrega.

Objetivos del Sistema


1. Calcular Rutas Óptimas: Determinar la mejor secuencia de entregas para minimizar la
distancia y el tiempo de viaje.
2. Gestionar Restricciones: Considerar capacidades de vehículos y ventanas de tiempo de
entrega.
3. Facilidad de Uso: Proporcionar una interfaz sencilla para que los operadores ingresen
datos de entrega y obtengan las rutas optimizadas.
Metodología para la Solución de Problemas
1. Análisis del Problema
o Datos de Entrada:

 Lista de destinos con coordenadas geográficas.


 Capacidad de los vehículos.
 Ventanas de tiempo para las entregas.
o Restricciones:

 Capacidad máxima de carga por vehículo.


 Horarios específicos de entrega en ciertos destinos.
o Objetivo:

 Minimizar la distancia total recorrida y el tiempo de entrega.


2. Algoritmo
o Utilizar algoritmos de optimización como el algoritmo de Dijkstra para calcular
las rutas más cortas y el algoritmo de Clarke-Wright para el ahorro de rutas.
o Implementar un método de búsqueda tabú para mejorar la solución inicial
considerando las restricciones.
Actividad Inicial con el Asesor Académico Virtual

Situación práctica
Pseudocódigo
funcion calcular_distancia(puntoA, puntoB):
retornar sqrt((puntoA.x - puntoB.x)^2 + (puntoA.y - puntoB.y)^2)

funcion obtener_rutas_optimas(destinos, capacidad_vehiculo, ventanas_tiempo):


inicializar matriz_distancias[destinos][destinos]
para cada i en destinos:
para cada j en destinos:
si i != j:
matriz_distancias[i][j] = calcular_distancia(destinos[i], destinos[j])

rutas = aplicar_algoritmo_dijkstra(matriz_distancias)
rutas_optimas = aplicar_algoritmo_clarke_wright(rutas, capacidad_vehiculo)
rutas_finales = ajustar_rutas_por_restricciones(rutas_optimas, ventanas_tiempo)

retornar rutas_finales

funcion main():
destinos = obtener_destinos()
capacidad_vehiculo = obtener_capacidad_vehiculo()
ventanas_tiempo = obtener_ventanas_tiempo()

rutas_optimas = obtener_rutas_optimas(destinos, capacidad_vehiculo,


ventanas_tiempo)
mostrar_rutas_optimas(rutas_optimas)

iniciar main()

Código
import java.util.*;
Actividad Inicial con el Asesor Académico Virtual

public class Logistica {

// Método para calcular la distancia entre dos puntos


public static double calcularDistancia(double[] puntoA, double[] puntoB) {
return Math.sqrt(Math.pow(puntoA[0] - puntoB[0], 2) + Math.pow(puntoA[1] -
puntoB[1], 2));
}

// Método para obtener rutas óptimas (simplificado)


public static List<int[]> obtenerRutasOptimas(double[][] destinos, int
capacidadVehiculo, int[][] ventanasTiempo) {
int n = destinos.length;
double[][] matrizDistancias = new double[n][n];

// Calcular matriz de distancias


for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j) {
matrizDistancias[i][j] = calcularDistancia(destinos[i], destinos[j]);
}
}
}

// Aplicar algoritmo de Dijkstra (simplificado)


List<int[]> rutas = aplicarAlgoritmoDijkstra(matrizDistancias);

// Aplicar algoritmo de Clarke-Wright (simplificado)


Actividad Inicial con el Asesor Académico Virtual

List<int[]> rutasOptimas = aplicarAlgoritmoClarkeWright(rutas,


capacidadVehiculo);

// Ajustar rutas por restricciones (simplificado)


List<int[]> rutasFinales = ajustarRutasPorRestricciones(rutasOptimas,
ventanasTiempo);

return rutasFinales;
}

// Algoritmo de Dijkstra (simplificado)


public static List<int[]> aplicarAlgoritmoDijkstra(double[][] matrizDistancias) {
// Lógica simplificada del algoritmo de Dijkstra
// ...
return new ArrayList<>();
}

// Algoritmo de Clarke-Wright (simplificado)


public static List<int[]> aplicarAlgoritmoClarkeWright(List<int[]> rutas, int
capacidadVehiculo) {
// Lógica simplificada del algoritmo de Clarke-Wright
// ...
return new ArrayList<>();
}

// Ajustar rutas por restricciones (simplificado)


public static List<int[]> ajustarRutasPorRestricciones(List<int[]> rutasOptimas, int[][]
ventanasTiempo) {
Actividad Inicial con el Asesor Académico Virtual

// Lógica simplificada para ajustar rutas por restricciones


// ...
return new ArrayList<>();
}

public static void main(String[] args) {


// Definir destinos como arreglos de coordenadas (x, y)
double[][] destinos = {
{0, 0}, {2, 3}, {5, 2}, {7, 7}
};

// Capacidad del vehículo


int capacidadVehiculo = 10;

// Ventanas de tiempo para entregas


int[][] ventanasTiempo = {
{8, 12}, {9, 14}, {10, 15}, {11, 16}
};

// Obtener rutas óptimas


List<int[]> rutasOptimas = obtenerRutasOptimas(destinos, capacidadVehiculo,
ventanasTiempo);

// Mostrar rutas óptimas


System.out.println("Rutas Óptimas: " + rutasOptimas);
}
}
Actividad Inicial con el Asesor Académico Virtual

Referencias bibliográficas
Tit, M. L. M. P. (s. f.). 1 Introducción a la Programación | Introducción a la Programación.
https://mpru.github.io/introprog/introducci%C3%B3n-a-la-programaci%C3%B3n.html
ChloeCodesThings. (s. f.). Introducción a la programación - Training. Microsoft Learn.
https://learn.microsoft.com/es-es/training/modules/web-development-101-introduction-
programming/
Actividad Inicial con el Asesor Académico Virtual

ISCyP, G. D. (s. f.). Programación estructurada. https://webs.um.es/ldaniel/iscyp17-18/10-


programacionEstructurada.html
Walther. (2023, 31 mayo). ¿Qué es la Programación Estructurada? - Conoce 10 Claves
para iniciar tu carrera de programador. Tutoriales Dongee.
https://www.dongee.com/tutoriales/que-es-la-programacion-estructurada-conoce-10-claves-
para-iniciar-tu-carrera-de-programador/

También podría gustarte