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/