Este tutorial describe el uso y las diferentes opciones de la aplicación UDESS.
Creando un nuevo proyecto
Con el fin de crear un nuevo proyecto en UDESS el primer paso es darle un nombre al nuevo proyecto y seleccionar una carpeta de trabajo, en algún lugar de nuestro ordenador. Cuando se ha seleccionado la carpeta de trabajo necesitamos entregar un archivo de texto con la información de las actividades. Una vez cargado este archivo el programa muestra las diez primeras líneas del mismo.
El archivo de actividades debe tener, al menos:
- Una columna con el nombre de la actividad (o ID de la actividad).
- Una columna con el valor de la actividad (ingreso total, si es positivo, o costo, si es negativo).
- Una columna con la tasa máxima realizable por mes de la actividad. Este valor se supone que es mayor que cero.
Además podemos utilizar columnas con los siguientes atributos:
- Pre Cost Attr: Costo de comenzar la actividad.
- Post Cost Attr: Costo de poner fin a la actividad.
- Length: Duración de la actividad (en metros, por ejemplo).
- MinRate: tasa mínima a realizar por mes si la actividad se inicia.
- SubActivity: Si la actividad es una sub-actividad esta columna debe tener el nombre de la actividad padre.
- Otros atributos numéricos.
La siguiente pestaña corresponde a "Time Periods", aquí podemos modificar el número de períodos del proyecto y la longitud (en meses) de cada uno. Además podemos seleccionar diferentes tasas de descuento por periodo, para nuestro proyecto.
La opción de "One Year, Monthly ...", añade doce periodo de longitud 1 y la opción "3 Months, Weekly ..." añade 12 períodos de longitud 0,25. Además, se pueden agregar o quitar periodos pulsando los botones "Add Period" y "Remove Period", respectivamente. En todos estos casos el valor por defecto para la tasa de descuento es cero. Para modificar la duración de un período o el valor de la tasa de descuento tienes que hacer doble clic en la casilla correspondiente y escribir el valor deseado. El separador decimal es el punto.
Una vez satisfecho con la configuración del proyecto haga clic en el botón "Next" y la pestaña "Precedence" aparecerá.
La forma más rápida de crear las precedencias es a través de un archivo de texto mediante la opción "Import from Textfile". La primera fila del archivo de precedencias archivo está reservada para los nombres de las columnas: "predecessor", "successor", "group". A continuación un ejemplo de archivo de precedencias.
La columna de grupo debe tener el índice asociado al grupo del par predecesor-sucesor. Cada actividad sucesora puede tener varios grupos con varias actividades predecesoras cada uno. El índice de grupo puede ser -1, 1, 2, 3, 4, ... El índice de -1 se utiliza cuando hay sólo arcos individuales. En este caso, en el proceso de optimización, estos grupos están asociados con el índice cero.
Además podemos añadir grupos utilizando la opción "Add Precedences". Para ello es necesario proporcionar el nombre de la actividad sucesora y el nombre de la actividad predecesora, en las casillas correspondientes y, a continuación, hacer clic en el botón "Add Precedences". Aparecerá la siguiente ventana de diálogo:
Si solamente vas a añadir arcos individuales haz clic en "No", en caso contrario presiona "Yes". En este caso, aparecerá la siguiente ventana de diálogo. La imagen muestra una actividad sucesora con un predecesor ya incorporado. Para el nuevo predecesor podemos asignar un nuevo grupo o añadirlo a un grupo existente. Una vez seleccionado el grupo del nuevo predecesor presiona "OK" y aparecerá en la lista de predecesores de la actividad.
También es posible guardar estos nuevos grupos, en un archivo, usando la opción "Save To TextFile".
Cuando guardamos el proyecto a este nivel o cuando nos movemos a la siguiente pestaña haciendo clic en "Next" los grupos de precedencia se guardan en un archivo llamado "nombreProyecto.prec".
En la pestaña de restricciones podemos agregar diferentes tipos de restricciones, las cuales se describen a continuación. En la pestaña de cualquier restricción se pueden añadir nuevas restricciones al pulsar el botón "+" y se pueden eliminar restricciones seleccionando la restricción que desea eliminar y haciendo clic en el botón "-".
- Operational Resource Constraint: Implementa una restricción que limita el consumo de todas las actividades, de un recurso dado. Debes seleccionar un atributo que represente el consumo, en base mensual, de las actividades del recurso en cuestión. Esta restricción se aplica a todas las actividades del proyecto. El atributo "None" corresponde a un consumo de uno.
- Starting Resource Capacity Constraint: Implementa una restricción que limita el consumo, de un recurso dado, al iniciar las actividades. Esta restricción se aplica a las variables de partida de las actividades. Debes seleccionar un atributo que represente el consumo, en base mensual, de las actividades del recurso en cuestión. Esta restricción se aplica a todas las actividades del proyecto. El atributo "None" corresponde a un consumo de uno.
- Progress Limit Constraint: Implementa una restricción que obliga un cierto progreso de una actividad en un rango de tiempo dado. "Minimum Progress" y "Maximum Progress" deben ser números entre cero y uno.
- Range Resource Constraint: Implementa una restricción que limita el consumo de las actividades, de un recurso dado. Debes seleccionar un atributo que represente el consumo, en base mensual, de las actividades del recurso en cuestión. A diferencia de la Operational Resource Constraint, esta restricción limita el consumo total en el rango de tiempo dado y no a cada periodo individual. Como se puede ver, para este tipo de restricción se puede seleccionar un subconjunto de actividades al cual se aplicará.
- Activity Incompatibility Constraint: Corresponde a una restricción que limita el desarrollo simultáneo de un grupo de actividades en un intervalo de tiempo dado. "Amount" se refiere al número máximo de actividades que se pueden realizar simultáneamente.
- Starting Period Constraint: Implementa una restricción que limita el intervalo de tiempo en el que un grupo de actividades debe comenzar.
Una vez haces clic en "Next" la información de las restricciones es guardada y la pestaña "Solver " aparece.
En la sección "Select Solver" puedes elegir cuál solver vas a usar entre los disponibles: Gurobi y CBC.
En la sección "Select Method" puedes escoger cuál método quieres usar para resolver el problema. El método "Full MIP" resuelve el problema de agendamiento solucionando un problema de programación entera mixto. Por el momento el método "Heuristic" no está disponible.
Dentro de las opciones avanzadas puedes escoger un MIPGap (el valor por defecto es 5%). También puedes verificar si quieres escribir el archivo LP asociado a este proyecto. En caso positivo un archivo de nombre "nombreProyecto.lp" se crea en el directorio de trabajo. Finalmente, puedes forzar a que las actividades que comiencen terminen dentro del horizonte del proyecto, chequeando la última casilla dentro de las opciones avanzadas.
En la sección "Output" puedes elegir un nombre para el archivo que guarda el agendamiento encontrado. El nombre por defecto para este archivo es "output.txt" y el archivo se crea en el directorio de trabajo. En la primera línea de este archivo aparece el valor del VAN. A continuación se encuentra la lista de las actividades con los periodos de inicio y término de las mismas y el progreso desarrollado en cada periodo.
Si se encuentra un óptimo para el modelo, la opción "View Schedule" está disponible. La primera parte de esta vista muestra el progreso de cada actividad en cada periodo de tiempo, en escala 0-1. Si hay Operational Resource Constraints, Range Resource Constraints o Starting Capacity Constraints en el modelo, los recursos usados están disponibles en la segunda parte de esta vista. Cuando se añade uno de estos recursos, la segunda tabla muestra el consumo acumulado del recurso en cada periodo.
Cargando un Proyecto
Puedes cargar un proyecto a través de la opción "Load Project" de la ventana "Project". El proyecto se abre en la última pestaña que estuviste trabajando. Puedes ver pestañas anteriores y puedes editar su contenido haciendo clic en "Edit", pero una vez lo haces toda la información posterior se borra.