Está en la página 1de 9

22.

506 · Modelaje y Optimitzación · PEC4


2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Presentación

¿Existe alguna manera de colocar 8 reinas en un tablero de ajedrez sin que se amenacen entre ellas?
¿Cómo lo hace Amazon para llevar un producto hasta nuestra casa, desde la otra punta del mundo
en menos de una semana? ¿Cuál es la estrategia de inversión en bolsa que nos permite maximizar
los beneficios o reducir los riesgos?

Estas preguntas tienen en común que las organizaciones y personas que se las plantean utilizan
herramientas de programación lineal que les ayudan a tomar decisiones. Ası́, el objetivo de este
reto es conocer y aprender a utilizar herramientas que permitan resolver problemas de decisión, y
especı́ficamente de programación lineal y de programación lineal entera y mixta. En concreto, este
reto tiene una vertiente más teórica, para aprender algunas técnicas de resolución de programas
lineales, y una vertiente más práctica, para utilizar herramientas informáticas que sistematicen el
proceso de resolución.

Competencias

En esta práctica se trabajan las siguientes competencias del Grado en Ciencia de Datos Aplicada:

Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para
emprender estudios posteriores con un alto grado de autonomı́a.
Utilizar de forma combinada los fundamentos matemáticos, estadı́sticos y de programación
para desarrollar soluciones a problemas en el ámbito de la ciencia de los datos.
Resumir, interpretar, presentar y contrastar de forma crı́tica los resultados obtenidos utili-
zando las herramientas de análisis y visualización más adecuadas.

Objetivos

Los objetivos concretos de esta PEC son:

Conocer las fases y la terminologı́a básica relacionada con los algoritmos Sı́mplex y Ramifi-
cación y Acotamiento.

1
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Saber utilizar manualmente y con R el algoritmo Sı́mplex para resolver problemas de pro-
gramación lineal.
Saber utilizar manualmente y con R el algoritmo Ramificación y Acotamiento para resolver
problemas de programación lineal entera y mixta.
Ser capaz de interpretar las soluciones obtenidas con la aplicación de los algoritmos.

Descripción de la PEC a realizar

En esta actividad aprenderemos la teorı́a y la práctica de diferentes técnicas para resolver modelos
de optimización, manualmente y con herramientas informáticas. En concreto, deberemos:

Responder un cuestionario de preguntas relacionadas con la teorı́a de los algoritmos Sı́mplex


y Ramificación y Acotamiento. Cada pregunta tiene dos posibles respuestas (cierto o falso)
y es necesario justificar brevemente (máximo 1 frase) la respuesta.
Resolver un modelo dado de programación lineal utilizando el algoritmo Sı́mplex, tanto ma-
nualmente como con el complemento LINPROG de R, y comparar las soluciones obtenidas.

Resolver un modelo dado de programación lineal entera y mixta utilizando el algoritmo de


Ramificación y Acotamiento, tanto manualmente como con el complemento RGLPK de R, y
comparar las soluciones obtenidas.
Programar con R una iteración del algoritmo Sı́mplex.

Recursos

Recursos Básicos
Documento ”Guı́a de estudio de optimización lineal”.
Referencia ”Hillier Lieberman (2015) Introduction to operations research, McGraw-Hill”.

2
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Recursos Complementarios
Documento ”Hands-On Programming with R”

Curso ”Introduction to R”
Curso ”Intermediate R”

Criterios de valoración
La práctica se debe resolver de manera individual.
Para los ejercicios 1 y 2 es necesario justicar los resultados de los cuestionarios.
Para los ejercicios 3, 4 y 5 es necesario incluir explicaciones en los códigos desarrollados.

Tened en cuenta que esta actividad representa un 25 % sobre el total de la nota de las PEC. Para
más información sobre el modelo de evaluación de la asignatura, consultad el plan docente.

Formato y fecha de entrega

Hace falta entregar un único fichero *.zip que incluya: (1) un documento pdf con la justificación
del ejercicio 1 (además de responder el cuestionario a través del campus virtual) y (2) una carpeta
con los códigos pedidos en los ejercicios 2, 3 y 4. Hay que realizar la PEC con un procesador de
textos o RMarkdown y no se aceptarán soluciones a mano y escaneadas.

El nombre del fichero final debe ser PEC4Apellido1Apellido2Nombre.zip. Este documento se debe
entregar en el espacio de Entrega y Registro AC del aula antes de las 23:59 del dı́a 09/01/2023
(esta fecha lı́mite también es válida para los cuestionarios). Recordad que la PEC es individual.
La detección de falta de originalidad será penalizada de acuerdo con la normativa vigente de la
UOC. Además, al hacer la entrega, aseguraos de comprobar que el archivo colgado es el correcto;
pues es responsabilidad del alumnado hacer la entrega correctamente. No se aceptaran entregas
fuera de plazo.

3
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Nota importante para el ejercicio 1:

Este ejercicio consiste en resolver un cuestionario (al que se accede a través del campus vir-
tual). La nota se basará en las respuestas marcadas, pero no se considerará ninguna respuesta
que no esté debidamente justificada en el documento pdf entregado a través del RAC.
El cuestionario permite realizar 2 intentos, de forma que si alguien tiene una incidencia,
la pueda rectificar. A efectos de la nota, únicamente se considerará el intento con mayor
puntuación.

Nota importante para los ejercicios 2, 3 y 4:

Estos ejercicios consisten en desarrollar códigos informáticos con R. Es necesario entregar los
3 códigos en ficheros separados.
Para la evaluación de estos ejercicios, se valorará que los programas desarrollados incluyan
comentarios explicativos de los pasos realizados. Asimismo, los programas se ejecutarán tal
cual se entreguen y, si no funcionan, se penalizará en la nota de los ejercicios.

Responde a las siguientes preguntas de forma razonada.

1. [3.5p] Accede al espacio Cuestionarios (Moodle) del campus virtual y resuelve el cuestionario
titulado ”PEC4. Ejercicio 1”. Justifica tus respuestas en el fichero pdf entregado.

2. [1.5p] Resuelve un modelo de programación lineal inventado por ti mismo/a, utilizando el


complemento Linprog de R. Encontrarás un manual de Linprog al final de este documento.
El modelo propuesto debe tener, al menos, 5 variables y 3 restricciones (además de las de
no-negatividad).

3. [1.5p] Resuelve un modelo de programación lineal entera inventado por ti mismo/a, utilizando
el complemento Rglpk de R. Encontrarás un manual de Rglpk al final de este documento. El
modelo propuesto debe tener, al menos, 5 variables (combinando variables enteras y binarias)
y 3 restricciones.

4. [3.5p] Uno de los problemas básicos de optimización combinatoria es el problema de la mochi-


la. La descripción del problema es: dada una mochila con capacidad K (en kg) y un conjunto
de N objetos, cada uno con un peso Pi en kg y un valor Vi en € (i = 1, . . . , N ), se quiere

4
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

determinar el subconjunto de objetos a cargar en la mochila sin superar la capacidad y de


forma que el valor del contenido sea el máximo posible, teniendo en cuenta que cada objeto
sólo se puede cargar una vez. El modelo de programación lineal para resolver este problema
es el siguiente:
Variables:
xi ∈ {0; 1} 1 si se carga el objeto i en la mochila; y 0 en caso contrario (i = 1, ..., N )

Función objetivo:
Se maximiza el valor de los objetos cargados en la mochila:
N
X
maximize V i · xi
i=1

Restricciones:
El peso de los objetos cargados no supera la capacidad de la mochila:
N
X
Pi · x i ≤ K
i=1

Para un ejemplo con N = 10 objetos, proponer unos valores cualesquiera para los datos
K; Pi ; Vi . Con dichos valores, se pide:
Desarrollar un algoritmo que pruebe todas las combinaciones posibles de objetos a
introducir dentro de la mochila y devuelva la mejor combinación. En el desarrollo de
este algoritmo, no se pueden utilizar librerı́as de R.
Comparar el resultado anterior con la resolución del modelo utilizando la librerı́a Rglpk
y comparad los tiempos de cálculo.

5
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Manual paquete LINPROG de R


El paquete LINPROG permite resolver modelos de programación lineal. Veamos un ejemplo:

maximize x1 + x2
2x1 + x2 ≤ 9, 5
x2 ≤ 4
x1 ; x2 ≥ 0

El código para resolver el modelo es:


1 > # Instalar el paquete
2 > install . packages ( " linprog " )
3 > library ( linprog )
4
5 > # Definir la funcion objetivo y , si queremos , el nombre de las variables
6 > FO <- c (1 ,1)
7 > names ( FO ) <- c ( " x1 " ," x2 " )
8
9 > # Definir los terminos ind ependie ntes y , si queremos , el nombre de las
restricciones
10 > TI <- c (9.5 ,4)
11 > names ( TI ) <- c ( " R1 " ," R2 " )
12
13 > # Definir los coeficientes de las restricciones como una matriz
14 > CR <- rbind ( c (2 ,1) ,c (0 ,1) )
15
16 > # Definir el sentido de las restricciones
17 > DIR <- c ( " <= " ," <= " )
18
19 > # Ejecutar el paquete y mostrar los resultados
20 > RES <- solveLP ( FO , TI , CR , maximum = TRUE , const . dir = c ( " <= " ," <= " ) )
21 > print ( RES )

El paquete muestra los siguientes resultados:


1 Results of Linear Programming / Linear Optimization
2
3 Objective function ( Maximum ) : 6.75
4
5 Iterations in phase 1: 0
6 Iterations in phase 2: 2
7 Solution
8 opt
9 x1 2.75

6
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

10 x2 4.00
11
12 Basic Variables
13 opt
14 x1 2.75
15 x2 4.00
16
17 Constraints
18 actual dir bvec free dual dual . reg
19 1 9.5 <= 9.5 0 0.5 5.5
20 2 4.0 <= 4.0 0 0.5 4.0
21
22 All Variables ( including slack variables )
23 opt cvec min . c max . c marg marg . reg
24 x1 2.75 1 0.0 2.0 NA NA
25 x2 4.00 1 0.5 Inf NA NA
26 S 1 0.00 0 - Inf 0.5 -0.5 5.5
27 S 2 0.00 0 - Inf 0.5 -0.5 4.0

Como se puede observar, el paquete retorna mucha información del modelo. Veámoslo lı́nea por
lı́nea:

L3. Valor de la función objetivo para la solución óptima del problema.


L5-6. Número de iteraciones en cada fase del proceso de cálculo interno (Sı́mplex).
L7-10. Valor de las variables para la solución óptima del problema.
L12-15. Valor de las variables básicas; es decir, no nulas. En este ejemplo, coincide con las
variables del problema (L7-10).
L17-20. Para cada restricción, el detalle y el precio sombra (columna dual), que indica la
mejora de la función objetivo para un incremento unitario del término independiente.
L22-27. Para cada variable (incluyendo las del problema y las de margen), su valor y su
margen, que indica el rango de valores en que se pueden mover manteniendo constante la
base óptima.

En la documentación del paquete podéis encontrar en detalle el significado de cada elemento de


los resultados.

7
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

Manual paquete RGLPK de R


El paquete RGLPK permite resolver modelos de programación lineal entera y mixta. Veamos un
ejemplo:
maximize x1 + x2
2x1 + x2 ≤ 9, 5
x2 ≤ 4
x1 ; x2 ≥ 0 enteras

El código para resolver el modelo es:


1 > # Instalar el paquete
2 > install . packages ( " Rglpk " )
3 > library ( Rglpk )
4
5 > # Definir la funcion objetivo
6 > FO <- c (1 ,1)
7
8 > # Definir los terminos ind ependie ntes
9 > TI <- c (9.5 ,4)
10
11 > # Definir los coeficientes de las restricciones como una matriz
12 > CR <- rbind ( c (2 ,1) ,c (0 ,1) )
13
14 > # Definir el sentido de las restricciones
15 > DIR <- c ( " <= " ," <= " )
16
17 > # Definir la tipologia de las variables
18 > TYPES <- c ( " I " ," I " )
19
20 > # Ejecutar el paquete y mostrar los resultados
21 > RES <- Rglpk _ solve _ LP ( FO , CR , DIR , TI , types = TYPES , max = TRUE )
22 > print ( RES )

El paquete muestra los siguientes resultados:


1 $ optimum
2 [1] 6
3
4 $ solution
5 [1] 3 3
6
7 $ status
8 [1] 0
9

8
22.506 · Modelaje y Optimitzación · PEC4
2022-23-Sem.1 · Grado en Ciencia de Datos Aplicada
Estudios de Informática, Multimedia y Telecomunicación

10 $ solution _ dual
11 [1] 0 0
12
13 $ auxiliary
14 $ auxiliary $ primal
15 [1] 9 3
16
17 $ auxiliary $ dual
18 [1] NA
19
20 $ sensitivity _ report
21 [1] NA

Como se puede observar, el paquete devuelve mucha información del modelo. Veámosla lı́nea por
lı́nea:

L1-2. Valor de la función objetivo para la solución óptima del problema.


L4-5. Valor de las variables para la solución óptima del problema.
L7-8. Estado final del sistema, que debe ser 0 cuando se ha alcanzado la solución óptima.
L10-21. Hace referencia a aspectos del dual que quedan fuera del alcance de la asignatura.

En la documentación del paquete podéis encontrar en detalle el significado de cada elemento de


los resultados.

También podría gustarte