PROGRAMACIÓN DE PROYECTOS CON RECURSOS LIMITADOS (RESOURCE CONSTRAINED PROJECT SCHEDULING PROBLEM - RCPSP) Octavio Cambindo, Emmanuel Niño & Stephany Tovar. Marzo 2020. Universidad del Valle. Facultad de Ciencias de la Administración y Facultad de Ingenierías Maestría en Gerencia de Proyectos. Administración y Proyectos ii Índice Resumen 1 Capítulo 1 Generalidades del (RCPSP) 2 2 Capítulo 2 Algoritmos con enfoques Exactos Métodos heurísticas Métodos basados en reglas de prioridad Esquema de Generador de secuencia Reglas de prioridad Multipasada en reglas de prioridad Métodos aleatorizados Técnicas Metaheurísticas Clasificación de las técnicas Metaheurísticas Metaheurísticas basadas en la trayectoria Metaheurísticas basadas en población El enfriamiento o temple simulado (SA o “Simulated Annealing”) Búsqueda Tabú (TS o “Tabu Search”) Búsqueda Local (LS o “Local Search”) Algoritmos evolutivos La búsqueda Dispersa (BD o SS “Scatter Search”) Los sistemas basados en colonias de Hormigas (Ant Colony Optimization) Método de Mejora programación factible Forward y Backward para el RCPSP Métodos de Enumeración Implícita Métodos de Solución para el RCPSP 3 3 4 4 4 4 5 5 5 6 6 6 7 7 8 8 8 9 9 9 11 CONCLUSIONES 12 Bibliografía 13 1 Resumen Hasta el presente se han diseñado diversos algoritmos con el fin de resolver de manera exacta la programación de proyectos con recursos limitados (RCPSP). Entre estos algoritmos se encuentran los desarrollados por (Moder, Phillips y Davis, 1970; Gorenstein, 1972; Fisher, 1973; Stinson et al. 1978; Talbot and Patterson, 1978; Patterson, 1984; Christofides et al., 1987; Demeulemeester, 1992; Mingozzi et al., 1995; Simpson and Patterson, 1996; Brucker and Knust, 2000; Dorndorf et al., 2000; Erenguc et al., 2001). Los algoritmos anteriores tratan de resolver el RCPSP mediante técnicas como la programación lineal entera, programación lineal entera mixta, branch and bound (ramificación y acotamiento), relajación lagrangiana y programación dinámica. Sin embargo, la naturaleza combinatoria de estos problemas y su pertenencia a la clase NP-HARD (Blazewicz et al., 1983), hacen que sea prácticamente imposible resolverlos en tiempos razonables, aún mediante el uso de los computadores más potentes existentes en la actualidad. La tendencia actual es a desarrollar métodos generales para resolver de modo eficiente clases o categorías de problemas, aunque no necesariamente de manera óptima. Estos métodos son denominados Heurísticos. (Osman and Kelly, 1996) explican que los heurísticos son una clase de métodos aproximados que están diseñados para resolver problemas difíciles de optimización combinatoria. Los heurísticos proporcionan un marco general para crear nuevos algoritmos híbridos combinando diferentes conceptos derivados de la inteligencia artificial, evolución biológica y mecanismos estadísticos. En la literatura reciente se destacan para la búsqueda de soluciones del RCPSP, heurísticos como la búsqueda Tabú, recocido simulado, algoritmos genéticos, optimización de la colonia de Hormigas y métodos GRASP. 2 Capítulo 1 Generalidades del (RCPSP) La programación con recursos limitados nace de una preocupación real; cuando se programan los proyectos, el gerente de proyectos se enfrenta de entrada con que los recursos no son infinitos. Y ¿qué se ha planteado ante esa preocupación? ¿cómo se ha abordado?; con métodos matemáticos, lo cuales plantean modelos simples como del tipo programación lineal. Al considerar metodologías de programación de proyectos y en ellas analizar las restricciones de recursos, aparecen los clásicos modelos matemáticos, entre los cuales se encuentran las heurísticas, como por ejemplo las Heurísticas FIT (la manera en que los objetos o variables son tratados antes de ser acomodados y por la forma en que se elige el contenedor que almacenará a cada una) y Heurísticas FIFO (Una de las tres reglas de prioridad) que habla de “Primero en llegar, primero en ser atendido”. También se han formulado sistemas algorítmicos cercanos a los sistemas de expertos, los cuales desarrollan técnicas para resolver el problema de RCPSP en proyectos; creando modelos conceptuales computacionales como sistemas de red: redes neuronales, colonia de hormigas, entre otros. Lo anteriormente mencionado han sido básicamente, los caminos que se han seguido cuando se ha querido tratar el tema de programación de proyectos con recursos limitados. Y cabe resaltar que en el pasado y durante un tiempo considerable esta problemática fue un tema que trabajó fuertemente la ingeniería industrial, y que ahora se ha convertido en un tema más de orden computacional – informático, porque al hacer representaciones de proyectos cercanos a la realidad, ello demanda muchísima capacidad computacional. El problema sigue completamente vigente, evolucionando en su conceptualización y en una exploración continua desde el ámbito académico; y sobre todo por los profesionales informáticos, cuyo tema de investigación son los algoritmos computacionales para programar los proyectos con recursos limitados, entre otros. Actualmente no es muy común que las personas se involucren con la planeación de modelos matemáticos para resolver el tema RCPSP, porque contienen un tipo de problemas del tipo NP-HARD, no polinomiales duros. Es decir que, en determinado proyecto, cuando se presenta un aumento, aún incluso pequeño, de las variables de restricción, puede presentarse una “explosión”. Las “explosiones”, se presentan por las combinaciones posibles entre variables y por el aumento de las mismas, por ello se requiere de mucho consumo de recursos computacionales, hasta tal punto de llegar a necesitar “computadores cuánticos”. En parte por ello, el tema RCPSP y sus alternativas de solución con modelos matemáticos, seguirá teniendo un gran peso de tipo teórico- académico más que de tipo práctico. 3 Capítulo 2 Algoritmos con enfoques Exactos Son métodos creados con el objetivo fundamental de solucionar RCPSP. La característica principal de este tipo de algoritmos (métodos) es que garantizan la obtención de una solución óptima, cuando dicha solución existe. Dichos métodos están basados en técnicas de optimización como programación lineal entera mixta, branch and bound (ramificación y acotamiento), programación dinámica, entre otros. (Fisher, 1973) utiliza técnicas basadas en multiplicadores de lagrange en un algoritmo de branch and bound para hallar soluciones óptimas del problema. (Patterson & Huber, 1974) presentan un método basado en evaluaciones de factibilidad en un modelo de programación, también presentan un algoritmo de enumeración implícita basado en un modelo de programación entera. (Patterson & Roth, 1976) utilizan un algoritmo de enumeración implícita para resolver un modelo de programación binaria. Algoritmos de tipo Branch And Bound son propuestos por diferentes autores a mediados del siglo XIX y siglo XX. En el documento de Patterson y Simpson, publicado en 1996, se propone un algoritmo de búsqueda en árbol, el cual hace uso de procesamiento en paralelo para obtener soluciones en menor tiempo. Pritsker et al. 1969, y Mingozzi et al. 1998, Proponen modelos de programación lineal entera (MILP) para el RCPSP. Damay et al. 2007, también proponen un modelo MILP, el cual resuelve el problema con o sin interrupción de la ejecución de las actividades. Kopanos et al. 2014, proponen cuatro modelos de programación lineal entera considerando tiempos discretos y continuos. Koné et al. 2011, Hace una comparación de diferentes modelos MILP y propone dos nuevas formulaciones basadas en eventos. Artigues et al. 2013, presenta una modificación sobre uno de los modelos propuestos por Koné et al. 2011, demostrando que dicho modelo, bajo ciertas condiciones, puede presentar soluciones infactibles. Más recientemente Palacio & Larrea, 2017, presentan modelos MILP con un enfoque lexicográfico para hallar soluciones para el RCPSP minimizando la robustez sujeta a una duración óptima. No obstante, la combinatoria de estos problemas se hace matemáticamente imposible para resolver casos prácticos en tiempos razonables, aun mediante herramientas computacionales de alto rendimiento disponibles actualmente. De acuerdo a investigaciones previas (Valls, Ballestín, & Quintanilla, 2005), se ha encontrado que los métodos exactos actuales solo son capaces de garantizar la optimalidad de una solución para instancias de problemas con 60 actividades o menos. Sin embargo, proyectos con menos de 60 actividades son considerados pequeños comparados con casos 4 reales. Es por lo anterior que surge la necesidad de diseñar algoritmos eficientes que obtengan soluciones de buena calidad, aunque esta última no sea óptima. Métodos heurísticas Métodos basados en reglas de prioridad Para la determinación de la secuenciación más adecuada para una lista de actividades o tareas de un proyecto, normalmente se emplean métodos basados en reglas de prioridad. Estas permiten identificar cuál es la solución heurística de acuerdo a la regla que se efectúe para una adecuada ejecución del proyecto. Según Cervantes, (2010), los métodos de técnica de revisión y evaluación de programas PERT y métodos de ruta crítica CPM se enfocan en problemas de secuenciación de proyectos con restricción de recursos, dado que la información que proporcionan permite determinar qué regla se empleara. Los métodos basados en reglas de prioridad se basan en dos elementos correspondientes a un esquema generador de secuencias (SGS) y una regla de prioridad. Esquema de Generador de secuencia Esta metodología permite determinar a qué actividad se le da prioridad para generar una secuencia factible, esto se realiza por medio dos esquemas en serie y en paralelo. Según Kolisch, (1996) el esquema en serie usa un número de etapas igual al número de actividades del proyecto. Para cada etapa se selecciona una actividad de acuerdo a una regla de prioridad y posteriormente se programa rápidamente, teniendo en cuenta las restricciones de precedencias y de recursos. El esquema en paralelo, consta de programar tantas actividades como sea posible en cada instante en el tiempo, donde se cumpla las restricciones de recursos y de precedencias. El tiempo de decisión está asociado con la finalización de alguna actividad en ejecución. La definición de este esquema exige que no exista ningún período tal que una actividad que sea factible, en relación a las restricciones de recursos y precedencias, no sea programada (Kolisch, 1996). Reglas de prioridad Según Morillo, Moreno, & Javier, 2014, las reglas de prioridad permiten ordenar las actividades de la más a la menos importante, respetando las restricciones de precedencia de cada tarea. De acuerdo Alvarez-Valdés & Tamarit, 1989, los cuales han obtenido una clasificación de seis reglas que se consideran son las eficientes, a continuación, se presentan: 5 1. MTS (Most Total Successors): este heurístico elige primero aquella actividad con mayor número de sucesores, inmediatos o no, ya que el retraso de dicha actividad los retrasa a todos ellos. 2. GRP (Greatest Rank Positional Weight): esta regla selecciona las actividades de acuerdo con su peso posicional, obtenido sumando a la duración de la actividad de la duración de todos sus sucesores. 3. LST (Latest Start Time): esta regla asigna prioridad a aquella actividad que tiene un menor tiempo máximo de inicio. 4. LFT (Late Finish Time): se asigna prioridad a la actividad con menor fecha tardía de terminación. 5. RSM (Resource Scheduling Method): Se da prioridad a la actividad cuya procedencia tiene la mínima holgura total 6. CUMRED (Cumulative Resource Equivalent Duration): Suma las duraciones equivalentes por recursos de una actividad considerada y la de todos sus sucesores Multipasada en reglas de prioridad El método de una sola pasada consiste en generar como resultado una única solución, empleando sólo una regla de prioridad. Para el caso del método Multipasada, trata de brindar varias soluciones, por medio de la combinación de los esquemas de secuenciación, la secuenciación en varias direcciones y aplicando diversas reglas de prioridad. Se tiene que entre más secuencias se puedan generar en un tiempo computacional considerable, mejor será la solución (Kolisch, 1996). Métodos aleatorizados De acuerdo a Hernández & Poveda, (2014), este método se basa en asignarle a cada una de las actividades del conjunto de decisión elegible, una probabilidad de ocurrencia. Donde en que cada pasada se obtiene una secuencia diferente, y de todas estas se va guardando la mejor solución obtenida, hasta que el resultado no pueda ser mejorado. Se ha identificado que unos de los aleatorizados más eficaz corresponde al Regret Based Biased Random Sampling (RBRS) introducido por Drexl, (1991), este calcula la probabilidad de manera indirecta con unos valores llamados regret; el cual compara el valor de la prioridad de la actividad i con el valor más bajo de todas las actividades de análisis. Técnicas Metaheurísticas Las técnicas metaheurísticas son algoritmos de optimización de propósito general, capaces de proporcionar muy buenas soluciones en tiempo y con recursos razonables (Simón 6 Rodríguez, de la Peña Esteban, & Rincon Rincon, 2014). Están basados en procesos iterativos que persiguen siempre la mejor solución en el mejor ámbito de búsqueda. Entre sus principales propiedades se encuentran las siguientes: ▪ El objetivo es una búsqueda eficiente que encuentra soluciones casi óptimas. ▪ Son estrategias generales que guían el proceso de búsqueda. ▪ El procedimiento de cualquier metaheurística es genérico, no depende del problema. ▪ Intentan evitar la exploración en regiones del espacio de búsqueda no óptimas. ▪ Los métodos heurísticos empleados son específicos para cada caso. ▪ Una vez determinada una solución se desarrollarán funciones de bondad para valorar los resultados y poder estimar lo óptima que es la solución encontrada. Los métodos Metaheurísticos se caracterizan por su versatilidad para la implementación de soluciones de diversos tipos de problemas, por su relativa simplicidad de conceptos subyacentes y por su amplio espectro de variantes en sus aplicaciones. Es por esto que son métodos populares y exitosos para la programación con recursos limitados. Clasificación de las técnicas Metaheurísticas Según el espacio de búsqueda utilizado, las técnicas metaheurísticas pueden clasificarse en 2 tipos. Si se utiliza un único punto de espacio de búsqueda se habla de Metaheurísticas basadas en la trayectoria mientras que si se trabaja sobre un conjunto o una población se habla de metaheurísticas basadas en la población. Metaheurísticas basadas en la trayectoria Consiste en partir desde un punto inicial, formando una trayectoria la cual se mejora mediante el análisis del entorno más cercano. La búsqueda se dará por concluida una vez encontrada una solución suficientemente buena. No se pueden realizar más iteraciones por haber alcanzado el número máximo establecido o se produce un bloqueo en el proceso de búsqueda. Dentro de las técnicas metaheurísticas basadas en trayectoria se encuentran: ▪ El enfriamiento o temple simulado (Simulated Annealing). ▪ La búsqueda Tabú. ▪ La búsqueda Local. Metaheurísticas basadas en población Estas técnicas operan con cada una de las posibles soluciones de un conjunto de individuos denominado población. El tratamiento o la manipulación de la población en cada iteración determina la eficiencia de esta técnica. Los principales tipos de técnicas metaheurísticas basadas en población son las siguientes: ▪ Los algoritmos evolutivos. ▪ La búsqueda dispersa. 7 ▪ ▪ ▪ Los sistemas basados en colonias de hormigas. Algoritmos basados en nubes de partículas. GRASP (metaheurísticas híbridas). El enfriamiento o temple simulado (SA o “Simulated Annealing”) Es una técnica análoga al proceso de tratamiento térmico de metales (temple o recocido). A partir de una solución actual X0, se elegirá en cada iteración una solución X1. Esta solución X1, se tomará como solución actual y sustituirá a la solución X0 siempre que sea mejor que ella. En el caso de una nueva solución, X1, sea de peor calidad, no será descartada, sino que se le asignará una determinada probabilidad a fin de no caer en un óptimo local. Las características del método son: ▪ ▪ Modificar paulatinamente una solución mientras se produce una mejora, de modo que el proceso acaba en un óptimo local. Evitar quedar atrapado en un óptimo local, se permiten movimientos hacia soluciones peores. Estos movimientos de escape deben controlarse adecuadamente para no desviar la búsqueda cuando se dirija hacia una buena solución. Para ello se utiliza una función de probabilidad que disminuye la probabilidad de movimientos de escape cuando la búsqueda avanza. Búsqueda Tabú (TS o “Tabu Search”) Fue introducido por Fred Glover (1988 y 1990) y su principal característica es el uso de la memoria adaptativa que permite explorar diferentes regiones en el espacio de búsqueda (memoria de corto plazo) e intensificar la búsqueda en áreas promisorias (memoria de largo plazo). Lo que quiere decir que la búsqueda de las mejores soluciones está en función de la capacidad para buscar en diferentes regiones, memorizar y guardar dichas soluciones en una lista denominada “lista tabú”. El algoritmo comienza con una solución inicial aleatoria X0. Posteriormente, se define un vecindario inicial de soluciones alrededor de X0 y una lista tabú; luego, mediante reglas de movimiento, se generan nuevas soluciones las cuales se analizan para determinar si se seleccionan. La lista tabú se construye con las soluciones históricamente visitadas, las cuales quedan prohibidas, de manera que restringen el vecindario actual garantizado, hasta cierto punto, no volver a seleccionar aquellas soluciones visitadas antes, y así evitar quedar atrapado en un óptimo local. Esta lista tabú es de tamaño limitado, pues solo puede almacenar un número determinado de soluciones; cuando este se alcanza, se elimina la solución más antigua y se adiciona la nueva. 8 Búsqueda Local (LS o “Local Search”) El método consiste en la exploración del entorno siempre dentro del espacio de búsqueda para encontrar un óptimo local a partir de una solución completa. Partiendo de una solución inicial, se elige una mejor solución, examinando su entorno o vecindario. El proceso continuará hasta que en la búsqueda no exista un vecino mejor o el proceso quede estancado. Tras cada iteración, la solución actual será sometida a un cambio que la convierta en una solución intermedia. Para mejorarla, esta nueva solución será supeditada a una heurística. Tras el proceso de mejora y siempre que pase un test de aceptación, el nuevo óptimo local pasará a ser la nueva solución actual. Algoritmos evolutivos Los algoritmos evolutivos se basan en la posibilidad de que cada individuo representa una solución y en cómo cambian esas soluciones con los cambios de su entorno (se adaptan o se mueren). El proceso consiste en lo siguiente: los individuos que conforman la población serán elegidos aleatoriamente. Posteriormente a cada ser se le otorgará un valor en función del problema planteado, será un valor en función de sus capacidades, aptitudes, su capacidad para adaptarse. Ese valor de cada individuo será el punto de partida del algoritmo para realizar la búsqueda. Seleccionar, recombinar o mutar la población son las posibles acciones a tener en cuenta cuando se desea modificar la población. El algoritmo evolutivo se divide en 2 fases, en la primera fase se seleccionan buenas soluciones o individuos y en la segunda fase se buscan nuevas soluciones en regiones no exploradas anteriormente. La búsqueda Dispersa (BD o SS “Scatter Search”) El método fue propuesto por Fred Glover (1998) y descrita por Laguna & Martí (2002). Esta metaheurística se considera un proceso evolutivo donde se construye un conjunto de referencia de soluciones buenas, pero dispersas, es decir, soluciones distintas entre sí o significativamente diferentes. La busque dispersa consta de 5 elementos, a saber: primero, un método de generación diversificada para generar una colección de soluciones de pruebas diversas; segundo, un método de mejora que transforma una solución de prueba en una o más soluciones encontradas; cuarto, un método que, a partir del conjunto de referencia, genera subconjuntos con el fin de combinarlos para crear nuevas soluciones; quinto, un método de combinación de soluciones que transforma un subconjunto dado de estas en una o más soluciones. Este 9 método de combinación es el equivalente al operador genético que cruce en los algoritmos genéticos (Ballestín, 2002). Este método se sitúa en la literatura como un método tan competitivo como los algoritmos genéticos para este tipo de problemas. Los sistemas basados en colonias de Hormigas (Ant Colony Optimization) Método inspirado en las hormigas y en cómo buscan su comida. El proceso de cómo estos animales buscan su comida inicia con una escogencia arbitraria de una zona cercana al hormiguero. Si encuentran comida, la llevan a su hormiguero, dejando un rastro mediante la expulsión de una sustancia química denominada feromona, que permitiría al resto de hormigas encontrar dicha comida. Las hormigas de las siguientes generaciones son atraídas para realizar su búsqueda en el espacio de solución cercano a las buenas soluciones previas, encontradas en generaciones anteriores. La feromona sirve como mecanismo de comunicación, que las hormigas usan de forma probabilística para crear o construir soluciones a un problema que luego se adaptan para reflejar la experiencia de las hormigas. Consiste en una estrategia de búsqueda distribuida en la que un conjunto de agentes coopera en la búsqueda, transmitiendo e intercambiando la información con el resto. Método de Mejora programación factible Forward y Backward para el RCPSP Esta técnica, consiste en hacer al menos una pasada forward (Hacia adelante) y una backward (Hacia atrás) a una secuencia factible (diagrama de Gantt). En la pasada backward las actividades de un proyecto son re-ordenadas en orden decreciente de su tiempo de terminación y se aplica el esquema en serie a esta nueva secuencia. Como resultado las actividades se mueven a la derecha a la posición más lejana posible. En la pasada forward las actividades se mueven al momento más próximo posible que permita su holgura libre. Para ello las actividades de la secuencia factible son ordenadas en orden creciente de su tiempo de inicio y se aplica el esquema de generación EN serie a esta nueva secuencia. Según Tormos & Lova (2001), el método consiste en tomar una secuencia factible e iterativamente hacer pasadas backward/forward (BF) hasta que en dos pasadas BF consecutivas no hubiera mejora en el tiempo de duración del proyecto. Métodos de Enumeración Implícita Para asegurar que se encuentra una solución óptima al problema, el espacio de búsqueda debe ser examinado totalmente, resultando crucial descartar aquellas soluciones parciales que no conducen a soluciones óptimas. Por ello, la mayor parte de los métodos exactos para resolver este problema se basan en procedimientos de Branch and Bound (Ramificación y Poda). De forma general, estos procedimientos se basan en la enumeración de las diferentes soluciones posibles del problema a través del árbol de búsqueda. 10 La eficiencia de estos métodos depende de una “cota inferior” que se determine para el problema, la cual es obtenida por diferentes procedimientos, en particular “suavizando” las restricciones del problema en cuanto a los recursos y luego resolviendo óptimamente el problema “suavizado”. Cuanto más se “suavicen” dichas restricciones más fácilmente se resuelve el problema. Adicionalmente se utilizan reglas de dominancia que permiten “podar” el árbol de búsqueda, eliminando aquellas ramas que no pueden conducir a una buena solución. Los algoritmos de branch and bound para el problema de RCPSP se basan en el siguiente procedimiento: en cada etapa se va construyendo una secuencia parcial factible, en la cual están aquellas actividades de un proyecto a las que se les ha asignado un instante de comienzo (programadas). Cada vértice del árbol tiene asociado una secuencia parcial. El proceso de “Ramificación” del árbol consiste en extender dicha secuencia, para lo cual existen diversos métodos como el basado en el árbol de precedencias, el basado en las alternativas de retraso y el basado en las alternativas de extensión. Árbol de precedencias (A. Sprecher, S. Hartmann y A. Drexl. – 1997): Algoritmo que a cada nodo del “árbol de búsqueda” y que representa una secuencia factible; en cada nodo se puede definir un conjunto de actividades elegibles, formado por aquellas actividades que aún no han sido programadas pero cuyas actividades predecesoras están dentro de la secuencia factible. Se escoge una actividad elegible y se programa tan pronto como sea posible, expandiendo así una nueva rama del árbol. Por lo tanto, cada nodo del árbol tendrá tantas ramas como actividades elegibles haya en ese punto. Árbol de alternativas de Retraso (N. Christofides, R. Álvarez Valdés, and J.M. Tamarit – 1987): En este algoritmo, cada nodo tiene asociado un tiempo de secuenciación en el que pueden comenzar las actividades de un proyecto. En este caso, las actividades elegibles son aquellas que pueden comenzar en ese instante, entrando todas ellas al conjunto de actividades en proceso. Si la programación de estas actividades genera un conflicto de recursos, será necesario determinar los grupos de actividades en curso, cuyo retraso permite solucionar el conflicto originado. Estos grupos de actividades cuyo retraso resuelve el conflicto se les denomina alternativas de retraso. El instante de secuenciación viene determinado por el menor instante de entre los instantes de terminación de las actividades en proceso. Árbol de alternativas de extensión (J.P. Stinson, E.W. Davis, and B.M. Khumawala – 1978): Algoritmo que presenta una alternativa de extensión como un conjunto de actividades elegibles que podría ser secuenciado en el instante actual sin exceder las disponibilidades de los recursos. Cada nodo del árbol origina tantas ramas como alternativas de extensión puedan formarse desde este nodo. Para la poda, se utiliza el criterio de primero el mejor, por lo que las necesidades de memoria para almacenar las soluciones intermedias son elevadas. Para la selección del siguiente nodo y expandir la búsqueda, se utiliza un vector con distintas reglas de decisión y se implementan varias reglas de “dominancia y de poda”; 11 siendo la más eficiente la basada en la ruta crítica. A diferencia del método anterior, este no permite deshacer las decisiones tomadas previamente. En el caso del RCPSP existe una aproximación completamente diferente basada en los denominados conjuntos prohibidos mínimos, concepto introducido por G. Igelmund and F. G. Radermacher en 1983. Un conjunto prohibido se define como un conjunto de actividades que pueden ser programadas concurrentemente durante el proyecto (es decir, que no existen relaciones de precedencia entre ellas) y que si se ejecutan de forma paralela violarían las restricciones de recursos. El enfoque de conjuntos mínimos implica que se enumeran aquellos conjuntos prohibidos que no contienen dentro de sí otro conjunto prohibido o, lo que es lo mismo, aquellos conjuntos prohibidos que al sustraerles una actividad dejarían de ser prohibidos. Métodos de Solución para el RCPSP El enfoque de conjuntos mínimos implica que se enumeran aquellos conjuntos prohibidos que no contienen dentro de sí otro conjunto prohibido o, lo que es lo mismo, aquellos conjuntos prohibidos que al sustraerles una actividad dejarían de ser prohibidos. En su procedimiento primero se determinan los conjuntos prohibidos mínimos, luego se procede a la destrucción de los mismos para obtener secuencias factibles de actividades. Esta destrucción se hace añadiendo tiempos de espera (que se modelan como relaciones de precedencia) entre al menos dos actividades de cada conjunto. Las diferentes relaciones de precedencias que se añaden dan lugar a las diferentes secuencias factibles que pueden formarse. El enfoque desarrollado por Brucker, 1999, define que para toda secuencia factible de actividades únicamente pueden existir tres tipos de relaciones entre cada par de actividades i - j: i precede a j, j precede a i o ambas pueden ejecutarse simultáneamente durante al menos una unidad de tiempo. Es obvio que entre algunos pares de actividades la relación existente entre las mismas queda fijada por las relaciones entre las actividades o por las necesidades de recursos. El proceso de búsqueda explora las posibles relaciones que pueden establecerse entre cada par de actividades no relacionadas. 12 CONCLUSIONES ⮚ A la hora organizar las actividades de un proyecto, es de vital importancia ser muy riguroso, donde se debe tener en cuenta la prioridad de las actividades, la secuenciación y las precedencias, además de los recursos que se requieren cada una de estas. ⮚ Los métodos heurísticos proporcionan mediante la inteligencia artificial la solución de problemas de programación con recursos limitados, enfocándose en la mejor alternativa de solución sin ser la óptima. ⮚ Existen diversos métodos para la solución de problemas con recursos limitados, entre los cuales se encuentran los métodos exactos que permiten encontrar una solución óptima, pero requiere de grandes esfuerzos computacionales que pueden llegar a ser muy complejo. En la investigación se trató sobre métodos heurísticos o aproximados, que permiten llegar a la solución de problemas sin ser el resultado óptimo. En este método se pueden crear nuevos algoritmos híbrido por medio de combinaciones e iteraciones, donde los esfuerzos computacionales son menores, lo que los hace más atractivos para la implementación. ⮚ Los métodos anteriores permiten buscar las mejores soluciones factibles teniendo en cuenta las restricciones que se tienes para cada uno de las actividades con respecto al tiempo, recursos y precedencias. Todas estas plantean diferentes metodologías que buscan optimizar en gran medida los recursos, sin llegar a excederse; para lo cual es necesario evaluar qué método es el más conveniente de acuerdo a la situación que se quiera resolver. 13 Bibliografía Alvarez-Valdés, R., & Tamarit, J. (1989). Algoritmos heurísticos deterministas y aleatorios en secuenciación de proyectos con recursos limitados. Valencia : Qüestiió. Ballestin, F. (2002). “Nuevos Métodos de Resolución del Problema de Secuenciación de proyectos con Recursos Limitados. Ph.D. dissertation, Universidat, 211. Cervantes, M. (2010). Tesis doctoral: Nuevos Métodos Meta Heurísticos para la Asignación Eficiente, Optimizada y Robusta de Recursos Limitados, Universidad Politécnica de Valencia. España. Clements, J., Gido, J., & Baker, R. (2018). Successful Project Management, Seventh Edition. 214-234. Drexl, A. (1991). Scheduling of project networks by job assignment. Management Sciencies, 1590-1602. Fisher, M. L. (1973). Optimal Solution Of Scheduling Problems Using Lagrange Multipliers: Part I. Operations Research, 1114-1127. Garcia, J., Echceverry, D., & Mesa, H. (2013). En Gernecia de proyectos - Aplicacion a proyectos de construcción de edificaciones. (págs. 109-114). Bogota, Colombia. Hernández, F., & Poveda, J. (2014). Aplicación de la Metaheurística Cromática al Problema de Secuenciación de Proyectos con Recursos Limitados (RCPSP). Montería, Córdoba, Montería: Universidad de Córdoba. Intitute, P. M. (2017). A guide to the Project Management body ok knowledge (PMBOK Guide) (6ª. ed.). PMBOK Guide, 211-220. Kolisch, R. (1996). Serial and parallel resource-constrained project scheduling methods revisited: Theory and computation. European Journal of Operational Research, 320333. Maria Antonia , S., De la peña Esteban, F., & Rincón Rincón , P. (1-21). Metodologías Analíticas y Heurísticas para la Solución del Problema de Programación de Tareas con Recursos Restringidos (RCPSP): una revisión. Parte 2. Revista de ciencia, Tecnología y medio ambiente, 2014. Morillo, D., Moreno, L., & Javier, D. (2014). Medologías Analíticas y Heurísticas para la Solución del Problema de Programación de Tareas con Recursos Restringidos (RCPSP): una revisión. Parte 2. Ingeniería y Ciencia , 203-227. Patterson, J., & Huber, W. (1974). A Horizon-Varying, Zero-One Approach to Project. Management Science, 990-998. 14 Patterson, J., & Roth, G. (1976). Scheduling a Project Under Multiple Resource Constraints:. A I I E Transactions, 449-455. Rodriguez, H., & Rojas, P. (2015). Técnicas de estimación de costos para proyectos: revisión bibliográfica de 2005 a 2015. Simón Rodríguez, M., de la Peña Esteban, F., & Rincon Rincon , P. (2014). Análisis de los métodos heurísticos de resolución del problema de programación de proyectos con recursos limitados (RCPSP: Resource constrained project scheduling problem). Tecnologia y Desarrollo, VOLUMEN XII. Valls, V., Ballestín, F., & Quintanilla, S. (2005). Justification and RCPSP: A technique that pays. European Journal of Operational Research. 375-386. Viveros, r., & Rivera, J. (2017). Formulaciones matemáticas y heurísticos simples para solucionar problemas de programación de proyectos con recursos limitados. 1-23.