• Like
Ruta critica
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Ruta critica

  • 3,649 views
Published

En el presente trabajo se describe un ejercicio de ruta critica y como adjunto se encuentra el codigo en java del metodo de floyd (solo muestra ruta minima)

En el presente trabajo se describe un ejercicio de ruta critica y como adjunto se encuentra el codigo en java del metodo de floyd (solo muestra ruta minima)

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,649
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
77
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. TECNOLOGICO DE ESTUDIOS SUPERIORES TIENGUISTENCODIVISION DE INGENIERIA EN SISTEMAS COMPUTACIONALES ASIGNATURA: Investigación de Operaciones ALUMNO: Eduardo González Ortiz MATRICULA: 201123042 GRUPO: 3302 PROFESOR: Rodrigo Tapia Zapote “RUTAS CRITICAS”
  • 2. IntroducciónHas pensado todo lo que implica realizar una tarea o proceso de manera adecuada, si turespuesta es no imagina una situación tan cotidiana como el asistir a la escuela o trabajo,esta es una actividad tan simple que en ocasiones no se le presta mucha atención a loque realizas pero tan solo detente y piensa en la secuencia de las actividades que llevas acabo antes de partir de tu hogar, si te das cuenta todo lleva un orden y por más simpleque parezca la actividad consume tiempo y en ocasiones este puede ser crucial parallegar a tu destino en tiempo y forma..Pero en problemas de mayor magnitud/complejidad cada tarea tienen un papel importantealgunas con mayor importancia que otros, esto nos da a entender que no pueden serretrasadas, en caso de ser así afectarían las posteriores actividades impidiendo cumplirlos objetivos incluso llegar a ocasionar perdidas.Pongamos el ejemplo de empresas que proveen materias a otras instituciones, si estasufriera de un contratiempo en su línea de producción no solo se afectaría a si misma sino a los que les provee de sus servicios reflejando una perdida fatal en tiempo y cotostanto para ella como para los consumidores.Con este pequeño ejemplo ya tendrás en cuenta lo importante que es organizar tiemposy decidir a qué actividades darles mayor importancia por lo cual se requiere de unaorganización casi perfecta.En el presente escrito se redacta un proyecto que consta de la implementación deprocesos que nos permiten visualizar el orden en que se llevan a cabo tales tareasllegando así a una solución que nos mostrara la importancia e influencia que tiene unaactividad.
  • 3. JustificaciónLa realización de una tarea implica primordialmente definir lo que se desea obtener, por locual en el presente trabajo se busca exponer al lector la importancia que tiene ladeterminación de tiempos, pretendiendo ser una guía para los alumnos y docentes quetoman o imparten la materia de Investigación de Operaciones para planificar y desarrollarel siguiente tema.La Asignatura de Investigación de Operaciones, tiene como objetivo desarrollar elAlgoritmo del Floyd por medio de análisis, investigación y complementar la parte teóricavista en clase para resolver algún problema de este tema. Además de construir modelosde decisión basadas en descripciones matemáticas, con el objetivo de proporcionar alalumno la madurez y los conocimientos necesarios para enfrentar una gran variedad deproblemas que se les presentan.El método ya mencionado anteriormente será aplicado en compañía del tema visto enclase que es llamado ruta crítica al igual que de la materia de programación, llevando acabo la elaboración de un programa el cual nos mostrara como hoy en día el avancetecnológico y de conocimientos llegan a facilitar tareas, con fines de poner en práctica lospasos pertenecientes al tema (Ruta critica), la elaboración del programa no solo constarade su creación si no que mostraremos todo lo que implico su elaboración redactando lasacciones a seguir y el cómo cada una llega a tener una influencia muy resaltada o poconotable pero no menos importante.ALCANCES Y LIMITACIONESComo ya tenemos entendido la realización de un proyecto implica de una buenaorganización aunque en ocasiones nos llegaremos a topar con obstáculos que nosimpidan la creación de un proyecto perfecto en su totalidad.En esta ocasión no fue la excepción pero como equipo hemos tratado de realizar unproyecto respetable y entendible hacia el público.
  • 4. AlcancesCon la creación de este trabajo no pretendemos realizar un proyecto detallado en sutotalidad si no solo mostrar a los alumnos de Investigación de Operaciones un ejemploque desde nuestro punto de vista es más comprensible a los mostrados en otras fuentes.LimitacionesPara cumplir con la presentación de este trabajo nos llegamos a encontrar con variosobstáculos que impidieron que creáramos un proyecto que describa en su totalidad elcomportamiento del método Floyd y ruta critica, pero que posiblemente resolverá algunasdudas obtenidas en clase.Como limitantes nos encontramos con el hecho de que al ser un trabajo en equipo nosiempre los integrantes contaremos con una disposición total de tiempo, afectando así ensu totalidad el desarrollo del trabajo, aunque se nos informó sobre el proyecto conantelación y se comenzó casi de inmediato con su elaboración nos topamos con un granobstáculo el cual es la comprensión total o parcial de la programación, aunqueactualmente nos encontramos cursando el 3er semestres de la carrera en ISC (Ingenieríaen Sistemas Computacionales) y que por lógica debemos manipular este aspecto alderecho y al revés pues no ha sido fácil ya que carecemos de ciertos fundamentosrelacionados al tema por lo cual se nos ha dificultado un poco la elaboración de unprogramas funcional en su totalidad, ya que al hacer uso de matrices fue necesaria laInvestigación de este tema y el cómo implementar el algoritmo de Floyd en un ambientede programación, se buscó en diferentes fuentes Bibliográfica pero no obtuvimosrespuestas muy constructivas por lo cual tuvimos que investigar más afondo con asesoresde la institución y otras fuentes para poder realizando, esto represento un gran consumode tiempo.A pesar de las limitantes mencionadas anteriormente hemos puesto un gran empeño en larealización de esta encomienda, por lo cual nos enfocaremos más en hacer mejorentendible el tema.
  • 5. PLANTEAMIENTO DEL PROBLEMAComo problema o reto tenemos la elaboración de un programa que sea capaz de haceruso del método de Floyd pero durante su creación se tiene que hacer uso de laherramienta ruta crítica.Ósea que se tendrá que resumir paso a paso como se ha logrado llegar a la creación detal proyecto y que actividades han influido con mayor intensidad.A continuación solo se describirá lo realizado ya posteriormente se le dará un enfoque conuso del tema de rutas críticas.En el área de programación el error más grave que se puede cometer en querer realizarun proyecto sin antes haber analizado el problema que se nos pide solucionar, es aquídonde comienza a tomar parte el tema de ruta crítica, el cual nos dice que para lograr lasolución de un problema se debe de empezar por definir nuestro objetivo posteriormenteenlistar las acciones a realizar mientras se hace esto es recomendable darles un orden ytiempos que tardara cada actividad en ser realizada.A sí que comencemos por definir qué queremos que lleve a cabo nuestra aplicación,según el método Floyd es un algoritmo de análisis sobre grafos para encontrar el caminomínimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos lospares de vértices en una única ejecución. El algoritmo de Floyd-Warshall es un ejemplode programación dinámica.Esto nos quiere decir que en un grafo contaremos con nodos los cuales interactuaran conotros nodos, los cuales estarán comunicados por una serie de arcos con distancias, comose muestra a continuación: NOTA: Este tipo de grafos es posible representarlos de manera matricial para una mejor comprensión.
  • 6. En esta parte es donde entra el razonamiento como resolver o trasladar un problema deeste tipo a un entorno de programación.Bueno primero investiguemos un poco sobre el comportamiento de una matriz, trasinvestigar tenemos que existen conjuntos de datos que por su naturaleza son mejorrepresentados mediante tablas o matrices multidimensionales que por vectores.Por ejemplo, se puede representar las calificaciones de 4 asignaturas cursadas por 6estudiantes mediante una tabla como la que abajo se ilustra: Columna 1 Columna 2 Columna 3 Columna 4 Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 Fila 6donde cada fila correspondería a un estudiante y cada columna a una asignatura. Cadadato individual (la calificación de un estudiante en una asignatura dada) es un elementode esta tabla y ocupa una celda identificable por el número de la fila y el número de lacolumna.
  • 7. Columna 1 Columna 2 Columna 3 Columna 4 Fila 1 M(1,1) M(1,2) M(1,3) M(1,4) Fila 2 M(2,1) M(2,2) M(2,3) M(2,4) Fila 3 M(3,1) M(3,2) M(3,3) M(3,4) Fila 4 M(4,1) M(4,2) M(4,3) M(4,4) Fila 5 M(5,1) M(5,2) M(5,3) M(5,4) Fila 6 M(6,1) M(6,2) M(6,3) M(6,4)De esta manera, cada elemento de la tabla queda completamente identificado mediantedos subíndices: el primero para identificar la fila y el segundo para identificar la columna.M( i , j )Cada elemento de la matriz representaría la calificación de un estudiante dado en unaasignatura dada. Por ejemplo:M(4,2) = CSignifica que el estudiante número 4 obtuvo C en la asignatura 2. La posición delelemento dentro de la matriz corresponde a la celda sombreada en la tabla de la figura dearriba.La matriz de arriba representa un arreglo bidimensional con (6x4) 24 elementos, donde i = 1, 2, 3,4,5,6 j = 1, 2, 3, 4En una matriz multidimensional cada dimensión tiene su propio rango.Con frecuencia se manejan arreglos de más de dos dimensiones, correspondiendo unsubíndice a cada dimensión.El programador debe tener presente que la memoria de las computadoras es lineal, por loque la mayoría de los compiladores almacenan en memoria los elementos de una matrizlinealizandola por filas; es decir, todos los elementos de la primera fila primero, los de lasegunda después y así sucesivamente.Ahora que tenemos noción de cómo funcionan las matrices mostraremos como secomportó esta parte en nuestra aplicación.
  • 8. El algoritmo de Floyd compara todos los posibles caminos a través del grafo entre cadapar de vértices. El algoritmo es capaz de hacer esto con sólo comparaciones (esto esnotable considerando que puede haber hasta aristas en el grafo, y que cadacombinación de aristas se prueba). Lo hace mejorando paulatinamente una estimación delcamino más corto entre dos vértices, hasta que se sabe que la estimación es óptima.Sea un grafo G con conjunto de vértices V, numerados de 1 a N. Sea además unafunción caminocorto(i,j,k) que devuelve el camino mínimo de i a j usando únicamentelos vértices de 1 a k como puntos intermedios en el camino. Ahora, dada esta función,nuestro objetivo es encontrar el camino mínimo desde cada i a cada j usando únicamentelos vértices de 0 hasta k-1.Hay dos candidatos para este camino: un camino mínimo, que utiliza únicamente losvértices del conjunto (0…k); o bien existe un camino que va desde i hasta k-1, y dek-1 hasta j, que es mejor. Sabemos que el camino óptimo de i a j que únicamente utilizalos vértices de 0 hasta k está definido por camino Mínimo(i,j,k), y está claro que sihubiera un camino mejor de i a k-1 a j, la longitud de este camino sería la concatenacióndel camino mínimo de i a k-1 (utilizando vértices de(0….k)) y el camino mínimo de k-1 a j(que también utiliza los vértices en (0…k)).Por lo tanto, podemos definir camino Mínimo (i, j, k) de forma recursiva:caminoMinimo(i,j,k)=min(caminoMinimo(i,j,k)),caminoMinimo(i,k,)+caminoMinimo(k,j));Camino Mínimo (i,j,0)=Arista(i,j),Esta fórmula es la base del algoritmo Floyd Funciona ejecutando primero camino Mínimo(i,j,0) para todos los pares (i,j), usándolos para después hallar camino Mínimo(i,j,2) paratodos los pares (i,j)... Este proceso continúa hasta que k=n, y habremos encontrado elcamino más corto para todos los pares de vértices (i,j) usando algún vértice intermedio.
  • 9. Ahora pasaremos a la explicación de cómo se creó la aplicación haciendo uso de Métodos deRutas críticas empezando por:Delimitación de tareas. Actividades Tiempo(minutos) A Investigación del tema 180 B Análisis del tema 60 C Delimitación del problema (objetivo) 90 D Análisis del problema (objetivos) 160 E Creación de algoritmo 220 F Realización de prueba de escritorio 50 G Codificación del algoritmo en un ambiente de 180 programación H Corrección de errores 120 I Realización de escrito (parte teórica). 240 J Revisión y Análisis del Escrito (Tenga 90 coherencia) K Presentación del Proyecto (Finalización) 160
  • 10. A B C D 0 180 180 240 0 90 90 250 580 760 760 820 -120 -30 -30 130 580 580 120 120 E F G H 250 470 470 520 520 700 700 820 130 350 350 400 400 580 580 700 120 120 120 120 I J K 820 1010 1010 1100 1100 1260 820 1010 1010 1100 1100 1260 0 0 0COMO CONCLUSION TENEMOS QUE NUESTRO PROYECTO CONSUMIO UN TOTAL DE 21hrs.ADJUNTOSAlgoritmo:Dado un grafo se puede aplicar el algoritmo de Floyd para resolver el problema de encontrar elcamino más corto de todos los vértices entre sí, a continuacion se muestra el comportamiento decada uno de los for mensionados anteriormente.InicioArmar la matriz de distancias minimas Floyd, teniendo en cuenta que F(i,j)=0. Además dónde noexista camino se debe indicar con infinito.Para k desde 0 hasta n-1Para i desde 0 hasta n-1Para j desde 0 hasta n-1
  • 11. Floyd[i,j]=min(F[i,j], F[i,k] + F[k,j])Fin para jFin para iFin para kEn la k-esima vuelta F[i, j] contendrá el valor del camino más corto que una al vértice i con el j talque dicho camino no pase por un vértice con número mayor que k.La matriz resultante es la de los mínimos caminos entre cada nodo. Si se quiere saber cual esdicho camino, se debe armar un árbol a medida tomando como numero de nodo a k cada vez quese detecta que hubo una optimización.PseudocodigoInicioCreación de matriz (Floyd)Declaración de variables de tipo entero y su inicialización i, j, n;Imprime “Nota; El infinito se presenta por un -1Solicita Dato “Dimensión de la Matriz “Almacena Dato n;Inicio de la Matriz Bidimensional;Para i desde 0; i menor a n; hasta j;Para j desde 0; j menor a n; hasta j;Solicita Dato “Distancia del Nodo i al nodo j;Almacena Dato matriz;Para k desde 0 hasta n-1; // Comienzo del avance posición kPara i desde 0 hasta n-1; // Avance En filas en La Matriz;Para j desde 0 hasta n-1; // Avance el Columnas en La matriz; Si Floyd i, k es diferente o igual que -1 y si Floyd k, j es diferente o igual que -1;
  • 12. Imprime Floyd i, j;Imprime “Nuevas Distancias”; Para i desde 0; i menor a n hasta i; Para j desde 0 j menor a n hasta j;Imprime “Valor de la Posicion (i,j) Floyd posición i j“;Declaración de Clase Comparaciones parámetros A, B;// A almacena el dato altual de la celda i, j// B almacena la suma de los valores de la sumas adyacentes al valor que se esta Evaluando; Imprime “” A , “”B; Si A es menor que -1 && B es igual que -1 Retorna -1 si A es igual que -1 Retorna B Si no B es igual que -1; Retorna A; Si no A es mayor que B; Retorna B;Si no Retorna A;FINCódigo fuenteA continuación se muestra el Código del Programa que tuvo como fin Implementar elAlgoritmo de Floyd.import java.io.*;
  • 13. public class FloydAlgoritmo {static int [][] Floyd; static BufferedReader leer=new BufferedReader(new InputStreamReader(System.in));public static void main(String[]a) { /** * Delclaracion E inicializacion de Las Varibles * k Realiza comparaciones Entre celdas * i Recorre Filas de la Matriz * j Recorre Columnas de La Matriz */ int i=0,j=0,k=0; int n=0; try{ System.err.println("NOTA: El infinito se representa por un -1"); /** * Ingresa La Dimension de la Matriz */ System.out.println("DIMENSION DE MATRIZ"); n=Integer.parseInt(leer.readLine()); /* * Recorrido de La Matriz */ Floyd=new int [n][n]; for( i=0; i<n; i++)
  • 14. for( j=0; j<n; j++) { /* * Muestra La discia del vertice i al vetice j */ System.out.println("Distancia del nodo( "+i+ ")al nodo ("+j+")"); Floyd[i][j]=Integer.parseInt(leer.readLine()); }//for avance}//trycatch (Exception e ){}for( k=0; k<=n-1 ; k++){ for( i=0; i<=n-1; i++){ for( j=0; j<=n-1; j++) if ((Floyd[i][k]!=-1)&&(Floyd[k][j]!=-1)){ Floyd[i][j]=comparaciones(Floyd[i][j],Floyd[i][k]+Floyd[k][j]); System.out.println(""+Floyd[i][j]); } } } /** * Muestra las nuevas Distancias q existen entre i & j */ System.out.println("Nuevas distancias:"); for ( i=0; i<n; i++){
  • 15. for( j=0; j<n; j++) /** * Imprime los Valores de las Posiciones */ System.out.println("VALOR DE LA POSICION("+i+")("+j+")es: "+Floyd[i][j]); System.out.println(); }}/**** @param A Valor de la celda en la q se Encuentra el Avance* @param B Guarda la Sumapublic static int comparaciones(int A,int B){ System.out.println(""+A+" "+B); if((A==-1)&&(B==-1)) return -1; else if(A==-1) return B; else if (B==-1) return A; else if (A>B) return B; else return A;}}