Está en la página 1de 40

Programación Lineal

1. Dibuje el recinto definido por las siguientes inecuaciones:


𝑥 − 𝑦 ≤ 1; 𝑥 + 2𝑦 ≥ 7; 𝑥 ≥ 0; 𝑦 ≤ 5
a) Determine los vértices de este recinto.
b) ¿Cuáles son los valores máximo y mínimo de la función objetivo 𝐹(𝑥, 𝑦) = 2𝑥 + 4𝑦 − 5 y en qué puntos alcanza
dichos valores?

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 2𝑥 + 4𝑦 − 5
Restricciones:

𝑥−𝑦 ≤1
𝑥 + 2𝑦 ≥ 7
𝑥≥0
𝑦≤5

Recinto y vértices:
import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y',upBound=5) #crea la variable y<=5

#restricciones
r1 = 1*x - 1*y <= 1
r2 = 1*x + 2*y >= 7

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 2 #coeficiente de x
b = 4 #coeficiente de y
c = -5 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre}={resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


problema("mínimo",pl.LpMinimize)#resuelve para valor minimo
2. Una empresa monta dos tipos de ordenadores: fijos y portátiles. La empresa puede montar como máximo 10 fijos y
15 portátiles a la semana, y dispone de 160 horas de trabajo a la semana. Se sabe que el montaje de un fijo requiere
4 horas de trabajo, y reporta un beneficio de 100 euros, mientras que cada portátil necesita 10 horas de trabajo y
genera un beneficio de 150 euros. Calcule el número de ordenadores de cada tipo que deben montarse semanalmente
para que el beneficio sea máximo, y obtenga dicho beneficio.

𝑓 = fijos; 𝑝 = portátiles
0 ≤ 𝑓 ≤ 10
0 ≤ 𝑝 ≤ 15
4𝑓 + 10𝑝 ≤ 160
𝐹(𝑓, 𝑝) = 100𝑓 + 150𝑝

import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
f = pl.LpVariable('f',0,10,cat="Integer")#crea la variable 0<=f<=10, int
p = pl.LpVariable('p',0,15,cat="Integer")#crea la variable 0<=p<=15, int

#restricciones
r1 = 4*f + 10*p <= 160 #horas de trabajo

#se añaden las restricciones al problema


problema += r1

#ecuacion objetivo
a = 100 #coeficiente de f
b = 150 #coeficiente de p
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*f + b*p + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*f.varValue + b*p.varValue +c

#mostrar resultado
print(f"Beneficio máximo={beneficio} euros, montando semanalmente:\n"
f"{f.varValue} ordenadores fijos\n"
f"{p.varValue} ordenadores portátiles")
3. Sea el sistema de inecuaciones siguiente:
𝑥 + 𝑦 ≤ 600; 𝑥 ≤ 500; 𝑦 ≤ 3𝑥; 𝑥 ≥ 0; 𝑦 ≥ 0
a) Represente gráficamente el conjunto de soluciones del sistema y calcule sus vértices.
b) Halle el punto del recinto anterior en el que la función 𝐹(𝑥, 𝑦) = 38𝑥 + 27𝑦 alcanza su valor máximo.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 38𝑥 + 27𝑦


Restricciones:

𝑥 + 𝑦 ≤ 600
𝑦 ≤ 3𝑥
0 ≤ 𝑥 ≤ 500
𝑦≥0
Recinto y vértices:

import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Valor_máximo",pl.LpMaximize)

#variables
x = pl.LpVariable('x',0,500)#crea la variable 0<=x<=10, int
y = pl.LpVariable('y',0)#crea la variable 0<=y<=15, int

#restricciones
r1 = x + y <= 600
r2 = y <= 3*x

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 38 #coeficiente de x
b = 27 #coeficiente de y
c = 0 #coeficiente independiente
#se añade la ecuación objetivo al problema
problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor máximo={beneficio} en el punto({x.varValue},{y.varValue})")
4. El estadio del Mediterráneo, construido para la celebración de los “Juegos Mediterráneos Almería 2005”, tiene una
capacidad de 20,000 espectadores. Para la asistencia a estos juegos se han establecido las siguientes normas: El
número de adultos no debe superar al doble del número de niños; el número de adultos menos el número de niños
no será superior a 5000. Si el precio de la entrada de niño es de 10 euros y la de adulto 15 euros ¿cuál es la composición
de espectadores que proporciona mayores ingresos? ¿A cuánto ascenderán esos ingresos?

𝑎 = adultos; 𝑛 = niños
Restricciones:

𝑎 + 𝑛 ≤ 20,000
𝑎 ≤ 2𝑛
𝑎 − 5𝑛 ≤ 5,000
𝑎≥0
𝑛≥0
Ecuación objetivo

𝐹(𝑎, 𝑛) = 15𝑎 + 10𝑛


import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
A = pl.LpVariable('A',0,cat="Integer")#crea la variable 0<=A, int
n = pl.LpVariable('n',0,cat="Integer")#crea la variable 0<=n, int

#restricciones
r1 = A + n <= 20_000 #capacidad de espectadores
r2 = A <= 2*n
r3 = A + 5*n <= 5_000

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 15 #coeficiente de A
b = 10 #coeficiente de n
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*A + b*n + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*A.varValue + b*n.varValue +c

#mostrar resultado
print(f"Ingreso máximo={beneficio} euros, con espectadores compuestos por:\n"
f"{int(A.varValue)} adultos\n"
f"{int(n.varValue)} niños")
5. a) Represente la región definida por las siguientes inecuaciones y calcule sus vértices:
𝑥 𝑦
𝑥 + 2𝑦 ≥ 6; 𝑥 ≤ 10 − 2𝑦; + ≥ 1; 𝑥 ≥ 0
12 3
b) Calcule el máximo y el mínimo de la función 𝐹(𝑥, 𝑦) = 4 − 3𝑥 − 6𝑦 en la región anterior e indique en qué
puntos se alcanzan.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = −3𝑥 − 6𝑦 + 4
Restricciones:

𝑥 + 2𝑦 ≥ 6
𝑥 ≤ 10 − 2𝑦
𝑥 𝑦
+ ≥1
12 3
𝑥≥0
import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y') #crea la variable y

#restricciones
r1 = x + 2*y >= 6
r2 = x <= 10 - 2*y
r3 = x*1/12 + y*1/3 >= 1

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = -3 #coeficiente de x
b = -6 #coeficiente de y
c = 4 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre}={resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


problema("mínimo",pl.LpMinimize)#resuelve para valor minimo
6. Sea el siguiente sistema de inecuaciones:
2𝑥 − 3𝑦 ≤ 6; 𝑥 ≥ 2𝑦 − 4; 𝑥 + 𝑦 ≤ 8; 𝑥 ≥ 0; 𝑦 ≥ 0
a) Dibuje la región y calcule sus vértices.
b) Halle los puntos de esa región en los que la función 𝐹(𝑥, 𝑦) = 2𝑥 + 3𝑦 alcanza los valores máximo y mínimo y
calcule dichos valores.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 2𝑥 + 3𝑦
Restricciones:

2𝑥 − 3𝑦 ≤ 6
𝑥 ≥ 2𝑦 − 4
𝑥+𝑦 ≤8
𝑥≥0
𝑦≥0
import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y',0) #crea la variable y>=0

#restricciones
r1 = 2*x - 3*y <= 6
r2 = x >= 2*y - 4
r3 = x + y <= 8

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 2 #coeficiente de x
b = 3 #coeficiente de y
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre} = {resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


problema("mínimo",pl.LpMinimize)#resuelve para valor minimo
7. Una fábrica produce bombillas de bajo consumo que vende a 1 € cada una, y focos halógenos que vende a 1.5 €. La
capacidad máxima de fabricación es de 1000 unidades, entre bombillas y focos, si bien no se pueden fabricar más de
800 bombillas ni más de 600 focos. Se sabe que la fábrica vende todo lo que produce. Determine cuántas bombillas y
cuántos focos debe producir para obtener los máximos ingresos posibles y cuáles serían éstos.

𝑏 = bombillas; 𝑓 = 𝑓𝑜𝑐𝑜𝑠
Ecuación objetivo:

𝐹(𝑏, 𝑓) = 𝑏 + 1.5𝑓
Restricciones:

𝑏 + 𝑓 ≤ 1000
0 ≤ 𝑏 ≤ 800
0 ≤ 𝑓 ≤ 600
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
B = pl.LpVariable('B',0,800,cat="Integer")#Bombillas 0<=B<=800, int
f = pl.LpVariable('f',0,600,cat="Integer")#focos 0<=f<=600, int

#restricciones
r1 = B + f <= 1000 #capacidad máxima de producción

#se añaden las restricciones al problema


problema += r1

#ecuacion objetivo, ganancia por bombillas y focos


a = 1 #coeficiente de B
b = 1.5 #coeficiente de f
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*B + b*f + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*B.varValue + b*f.varValue +c

#mostrar resultado
print(f"Beneficio máximo={beneficio} euros, fabricando:\n"
f"{int(B.varValue)} bombillas de bajo consumo\n"
f"{int(f.varValue)} focos halógenos")
8. Una imprenta local edita periódicos y revistas. Para cada periódico necesita un cartucho de tinta negra y otro de color,
y para cada revista uno de tinta negra y dos de color. Si sólo dispone de 800 cartuchos de tinta negra y 1100 de color,
y si no puede imprimir más de 400 revistas, ¿cuánto dinero ingresará como máximo, si vende cada periódico a 0.90 €
y cada revista a 1.20 €?

periódico revista límite


negro 1 1 800
color 1 2 1100
𝑝 = periódico; 𝑟 = revista
Ecuación objetivo:

𝐹(𝑝, 𝑟) = 0.9𝑝 + 1.2𝑟


Restricciones:

𝑝 + 𝑟 ≤ 800
𝑝 + 2𝑟 ≤ 1100
𝑝≥0
𝑟≥0
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
p = pl.LpVariable('p',0,cat="Integer")#periodico 0<=p, int
r = pl.LpVariable('r',0,cat="Integer")#revista 0<=r, int

#restricciones
r1 = p + r <= 800
r2 = p + 2*r <= 1100

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 0.9 #coeficiente de p
b = 1.2 #coeficiente de r
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*p + b*r + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*p.varValue + b*r.varValue +c

#mostrar resultado
print(f"Beneficio máximo = {beneficio} euros,imprimiendo:\n"
f"{int(p.varValue)} periódicos\n"
f"{int(r.varValue)} revistas")
9. Un laboratorio farmacéutico vende dos preparados, A y B, a razón de 40 y 20 euros el kg, respectivamente. Su
producción máxima es de 1000 kg de cada preparado. Si su producción total no puede superar los 1700 kg, ¿cuál es la
producción que maximiza sus ingresos? Calcule dichos ingresos máximos.

Ecuación objetivo:

𝐹(𝐴, 𝐵) = 40𝐴 + 20𝐵


Restricciones:

0 ≤ 𝐴 ≤ 1000
0 ≤ 𝐵 ≤ 1000
𝐴 + 𝐵 ≤ 1700
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
A = pl.LpVariable('A',0,1000,cat="Integer")#preparadoA 0<=A<=1000, int
B = pl.LpVariable('B',0,1000,cat="Integer")#preparadoB 0<=B<=1000, int

#restricciones
r1 = A+ B <= 1700 #límite de producción total en kg

#se añaden las restricciones al problema


problema += r1

#ecuacion objetivo, ganancia por preparado


a = 40 #coeficiente de A
b = 20 #coeficiente de B
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*A + b*B + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*A.varValue + b*B.varValue +c

#mostrar resultado
print(f"Beneficio máximo = {int(beneficio)} euros, produciendo:\n"
f"{int(A.varValue)} kg de preparado A\n"
f"{int(B.varValue)} kg de preparado B")
10. Represente la región definida por las siguientes inecuaciones y calcule sus vértices:
𝑥 ≥ 0; 𝑦 ≥ 0; − 𝑥 + 2𝑦 ≤ 6; 𝑥 + 𝑦 ≤ 6; 𝑥 ≤ 4
Calcule el máximo de la función 𝐹(𝑥, 𝑦) = 2𝑥 + 2𝑦 + 1 en la región anterior e indique dónde se alcanza.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 2𝑥 + 2𝑦 + 1
Restricciones:

−𝑥 + 2𝑦 ≤ 6
𝑥+𝑦 ≤6
0≤𝑥≤4
𝑦≥0
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Valor_máximo",pl.LpMaximize)

#variables
x = pl.LpVariable('x',0,4)#crea la variable 0<=x<=4, int
y = pl.LpVariable('y',0)#crea la variable 0<=y, int

#restricciones
r1 = -1*x + 2*y <= 6
r2 = x + y <= 6

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 2 #coeficiente de x
b = 2 #coeficiente de y
c = 1 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor máximo={beneficio} en el punto({x.varValue},{y.varValue})")
11. Represente gráficamente el recinto definido por el siguiente sistema de inecuaciones:
𝑥 ≥ 3(𝑦 − 3); 2𝑥 + 3𝑦 ≤ 36; 𝑥 ≤ 15; 𝑥 ≥ 0; 𝑦 ≥ 0
Calcule los vértices del recinto.
Obtenga el valor máximo de la función 𝐹(𝑥, 𝑦) = 8𝑥 + 12𝑦 en este recinto e indique dónde se alcanza.
Ecuación objetivo:
𝐹(𝑥, 𝑦) = 8𝑥 + 12𝑦
Restricciones:
𝑥 ≥ 3𝑦 − 9
2𝑥 + 3𝑦 ≤ 36
0 ≤ 𝑥 ≤ 15
𝑦 ≥ 0

import pulp as pl #importa la libreria de programacion lineal

def problema(nombre, op):


#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0,15) #crea la variable 0<=x<=15
y = pl.LpVariable('y',0) #crea la variable y>=0

#restricciones
r1 = x >= 3*y - 9
r2 = 2*x + 3*y <= 36

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 8 #coeficiente de x
b = 12 #coeficiente de y
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre}={resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


12. La candidatura de un determinado grupo político para las elecciones municipales debe cumplir los siguientes
requisitos: el número total de componentes de la candidatura debe estar comprendido entre 6 y 18 y el número de
hombres (x) no debe exceder del doble del número de mujeres (y). Represente el recinto asociado a estas restricciones
y calcule sus vértices. ¿Cuál es el mayor número de hombres que puede tener una candidatura que cumpla esas
condiciones?
𝑥 = hombres; 𝑦 = mujeres
Restricciones:
𝑥+𝑦 ≥6
𝑥 + 𝑦 ≤ 18
𝑥 ≤ 2𝑦
𝑥≥0
𝑦≥0
Ecuación objetivo:
𝐹(𝑥, 𝑦) = 𝑥

import pulp as pl #importa la libreria de programacion lineal

def problema(nombre, op):


#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0,cat="Integer") #crea la variable x>=0
y = pl.LpVariable('y',0,cat="Integer") #crea la variable y>=0

#restricciones
r1 = x + y >= 6
r2 = x + y <= 18
r3 = x <= 2*y

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 1 #coeficiente de x
b = 0 #coeficiente de y
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor máximo en ({int(x.varValue)},{int(y.varValue)})\n"
f"puede haber como máximo {int(resultado)} hombres")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


13. Una empresa fabrica lunas para coches. Cada luna delantera requiere 2,5 m2 de cristal, mientras que cada luna trasera
requiere 2 m2. La producción de una luna delantera precisa 0,3 horas de máquina de corte y cada luna trasera 0,2
horas. La empresa dispone de 1750 m2 de cristal por semana y 260 horas semanales de máquina de corte. La empresa
fabrica siempre, como mínimo, el doble de lunas delanteras que de lunas traseras. Calcule cuántas lunas de cada tipo
debe fabricar semanalmente para que el número total de lunas sea máximo.

delantera trasera limite


Cristal 2.5 2 1750
Tiempo 0.3 0.2 260
𝑑 = delantera; 𝑡 = trasera
Restricciones:
2.5𝑑 + 2𝑡 ≤ 1750
0.3𝑑 + 0.2𝑡 ≤ 260
𝑑 ≥ 2𝑡
𝑑≥0
𝑡≥0
Ecuación objetivo:
𝐹(𝑑, 𝑡) = 𝑑 + 𝑡
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
d = pl.LpVariable('d',0,cat="Integer")#crea la variable 0<=d, int
t = pl.LpVariable('t',0,cat="Integer")#crea la variable 0<=t, int

#restricciones
r1 = 2.5*d + 2*t <= 1750 #metros cuadrados de cristal
r2 = 0.3*d + 0.2*t <= 260 #tiempo de corte
r3 = d >= 2*t #siempre se fabrica el doble

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 1 #coeficiente de d
b = 1 #coeficiente de t
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*d + b*t + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*d.varValue + b*t.varValue +c

#mostrar resultado
print(f"Número total de lunas máximo={int(beneficio)}, fabricando semanalmente:\n"
f"{int(d.varValue)} lunas delanteras\n"
f"{int(t.varValue)} lunas traseras")
14. Un Ayuntamiento concede licencia para la construcción de una urbanización de a lo sumo 120 viviendas, de dos tipos
A y B. Para ello la empresa constructora dispone de un capital máximo de 15 millones de euros, siendo el coste de
construcción de la vivienda de tipo A de 100,000 euros y la de tipo B 300,000 euros. Si el beneficio obtenido por la
venta de una vivienda de tipo A asciende a 20,000 euros y por una de tipo B a 40,000 euros, ¿cuántas viviendas de
cada tipo deben construirse para obtener un beneficio máximo?

Ecuación objetivo:
𝐹(𝐴, 𝐵) = 20,000𝐴 + 40,000𝐵
Restricciones:
𝐴 + 𝐵 ≤ 120
100,000𝐴 + 300,000𝐵 ≤ 15,000,000
𝐴≥0
𝐵≥0
import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
A = pl.LpVariable('A',0,cat="Integer")#crea la variable 0<=A, int
B = pl.LpVariable('B',0,cat="Integer")#crea la variable 0<=B, int

#restricciones
r1 = A + B <= 120 #maximo número de viviendas
r2 = 100_000*A + 300_000*B <= 15_000_000 #costo y límite de presupuesto

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo, ganancia por tipo de vivienda


a = 20_000 #coeficiente de A
b = 40_000 #coeficiente de B
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*A + b*B + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*A.varValue + b*B.varValue +c

#mostrar resultado
print(f"Beneficio máximo = {int(beneficio)} euros, construyendo:\n"
f"{int(A.varValue)} viviendas tipo A\n"
f"{int(B.varValue)} viviendas tipo B")
15. Consideramos el recinto del plano limitado por las siguientes inecuaciones:
𝑦 − 𝑥 ≤ 4; 𝑦 + 2𝑥 ≥ 7; −2𝑥 − 𝑦 + 13 ≥ 0; 𝑥 ≥ 0; 𝑦 ≥ 0
a) Represente el recinto y calcule sus vértices.
b) Halle en qué puntos de ese recinto alcanza los valores máximo y mínimo la función 𝐹(𝑥, 𝑦) = 4𝑥 + 2𝑦 − 1.

Ecuación objetivo:
𝐹(𝑥, 𝑦) = 4𝑥 + 2𝑦 − 1
Restricciones:
𝑦−𝑥 ≤4
𝑦 + 2𝑥 ≥ 7
2𝑥 + 𝑦 ≤ 13
𝑥≥0
𝑦≥0

import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y',0) #crea la variable y>=0

#restricciones
r1 = y - x <= 4
r2 = y + 2*x >= 7
r3 = 2*x + y <= 13

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 4 #coeficiente de x
b = 2 #coeficiente de y
c = -1 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre} = {resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


problema("mínimo",pl.LpMinimize)#resuelve para valor minimo
16. Una empresa produce botellas de leche entera y de leche desnatada y tiene una capacidad de producción máxima de
6000 botellas al día. Las condiciones de la empresa obligan a que la producción de botellas de leche desnatada sea, al
menos, la quinta parte de las de leche entera y, como máximo, el triple de la misma. El beneficio de la empresa por
botella de leche entera es de 20 céntimos y por botella de leche desnatada es de 32 céntimos. Suponiendo que se
vende toda la producción, determine la cantidad de botellas de cada tipo que proporciona un beneficio máximo y el
importe de este beneficio.
𝑒 = entera; 𝑑 = desnatada
Restricciones:
𝑒 + 𝑑 ≤ 6,000
𝑒
𝑑≥
5
𝑑 ≤ 3𝑒
𝑑≥0
𝑒≥0
Ecuación objetivo:
𝐹(𝑒, 𝑑) = 0.20𝑒 + 0.32𝑑

import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
e = pl.LpVariable('e',0,cat="Integer")#leche entera 0<=e, int
d = pl.LpVariable('d',0,cat="Integer")#leche desnatada 0<=d, int

#restricciones
r1 = e + d <= 6_000 #capacidad de producción al día
r2 = d >= e*1/5 #al menos la quinta parte de las de leche entera
r3 = d <= 3*e #maximo el triple de la misma

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo, beneficio de cada botella


a = 0.20 #coeficiente de e
b = 0.32 #coeficiente de d
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*e + b*d + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*e.varValue + b*d.varValue +c

#mostrar resultado
print(f"Beneficio máximo = {beneficio} euros, produciendo diariamente:\n"
f"{int(e.varValue)} botellas de leche entera\n"
f"{int(d.varValue)} botellas de leche desnatada")
17. De un problema de programación lineal se deducen las siguientes restricciones:
10 + 𝑦
4𝑥 + 3𝑦 ≥ 60; 𝑦 ≤ 30; 𝑥 ≤ ; 𝑥 ≥ 0; 𝑦 ≥ 0
2
a) Represente gráficamente la región factible del problema y calcule sus vértices.
b) Maximice en esa región la función objetivo 𝐹(𝑥, 𝑦) = 𝑥 + 3𝑦
c) ¿Pertenece el punto (11,10) a la región factible?

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 𝑥 + 3𝑦
Restricciones:

4𝑥 + 3𝑦 ≥ 60
𝑥 ≤ 5 + 𝑦/2
0 ≤ 𝑦 ≤ 30
𝑥≥0
import pulp as pl #importa la libreria de programacion lineal

#resolver para el valor maximo de la función objetivo


problema = pl.LpProblem("maximizar", pl.LpMaximize)

#variables
x = pl.LpVariable('x',0) #crea la variable 0<=x
y = pl.LpVariable('y',0,30) #crea la variable 0<=y<=30

#restricciones
r1 = 4*x + 3*y >= 60
r2 = x <= 5 + (1/2)*y

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo
a = 1 #coeficiente de x
b = 3 #coeficiente de y
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor máximo = {resultado} en el punto ({x.varValue},{y.varValue})")
18. De las restricciones que deben cumplir las variables x e y en un problema de programación lineal se deduce el siguiente
conjunto de inecuaciones:
2𝑦 − 𝑥 ≤ 8; 𝑥 + 𝑦 ≥ 13; 𝑦 + 4𝑥 ≤ 49; 𝑥 ≥ 0; 𝑦 ≥ 0
Represente gráficamente el recinto determinado por estas inecuaciones, determine los vértices del recinto y obtenga
los valores extremos de la función 𝐹(𝑥, 𝑦) = 3𝑥 − 4𝑦 + 12 en ese recinto e indique en qué punto o puntos se alcanza
cada extremo.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 3𝑥 − 4𝑦 + 12
Restricciones:

2𝑦 − 𝑥 ≤ 8
𝑥 + 𝑦 ≥ 13
4𝑥 + 𝑦 ≤ 49
𝑥≥0
𝑦≥0
import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y',0) #crea la variable y>=0

#restricciones
r1 = 2*y -x <= 8
r2 = x + y >= 13
r3 = 4*x + y <= 49

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 3 #coeficiente de x
b = -4 #coeficiente de y
c = 12 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"{nombre} = {resultado} en el punto ({x.varValue},{y.varValue})")
problema("Máximo",pl.LpMaximize)#resuelve para valor maximo
problema("Mínimo",pl.LpMinimize)#resuelve para valor minimo
19. Un joyero fabrica dos modelos de anillos. El modelo A se hace con 1 gramo de oro y 1.5 gramos de plata. El modelo B
lleva 1.5 gramos de oro y 1 gramo de plata. El joyero sólo dispone de 750 gramos de cada metal y piensa fabricar, al
menos, 150 anillos del tipo B que ya tiene encargados. Sabiendo que el beneficio de un anillo del tipo A es de 50 € y
del tipo B es de 70 €, ¿cuántos anillos ha de fabricar de cada tipo para obtener el beneficio máximo y cuál será éste?

Modelo A Modelo B Limite


Oro 1 1.5 750
Plata 1.5 1 750
Restricciones:
𝐴 + 1.5𝐵 ≤ 750
1.5𝐴 + 𝐵 ≤ 750
𝐵 ≥ 150
𝐴≥0
Ecuación objetivo:
𝐹(𝐴, 𝐵) = 50𝐴 + 70𝐵

import pulp as pl #importa la libreria de programacion lineal

#obtener el beneficio maximo


problema = pl.LpProblem("Beneficio_máximo",pl.LpMaximize)

#variables
A = pl.LpVariable('A',0,cat="Integer")#anilloA 0<=A, int
B = pl.LpVariable('B',150,cat="Integer")#anilloB 150<=B, int

#restricciones
r1 = A + 1.5*B <= 750 #consumo de gramos de oro y disponibilidad
r2 = 1.5*A + B <= 750 #consumo de gramos de plata y disponibilidad

#se añaden las restricciones al problema


problema += r1
problema += r2

#ecuacion objetivo, ganancia por anillo


a = 50 #coeficiente de A
b = 70 #coeficiente de B
c = 0 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*A + b*B + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


beneficio = a*A.varValue + b*B.varValue +c

#mostrar resultado
print(f"Beneficio máximo = {int(beneficio)} euros, fabricando:\n"
f"{int(A.varValue)} anillos modelo A\n"
f"{int(B.varValue)} anillos modelo B")
20. a) Represente gráficamente a región determinada por las siguientes restricciones:
2𝑥 + 𝑦 ≤ 6; 4𝑥 + 𝑦 ≤ 10; − 𝑥 + 𝑦 ≤ 3; 𝑥 ≥ 0; 𝑦 ≥ 0
y determine sus vértices
b) Calcule el máximo y el mínimo de la función 𝐹(𝑥, 𝑦) = 4𝑥 + 2𝑦 − 3 en el recinto anterior e indique dónde se
alcanzan.

Ecuación objetivo:

𝐹(𝑥, 𝑦) = 4𝑥 + 2𝑦 − 3
Restricciones:

2𝑥 + 𝑦 ≤ 6
4𝑥 + 𝑦 ≤ 10
−𝑥 + 𝑦 ≤ 3
𝑥 ≥ 0
𝑦 ≥ 0
import pulp as pl #importa la libreria de programacion lineal

#funcion para reutilizar los datos con maximo y minimo


def problema(nombre, op):
#crea un objeto de programacion lineal
#parametros: nombre y el tipo de optimización max/min
problema = pl.LpProblem(nombre, op)

#variables
x = pl.LpVariable('x',0) #crea la variable x>=0
y = pl.LpVariable('y',0) #crea la variable y>=0

#restricciones
r1 = 2*x + y <= 6
r2 = 4*x + y <= 10
r3 = -1*x + y <= 3

#se añaden las restricciones al problema


problema += r1
problema += r2
problema += r3

#ecuacion objetivo
a = 4 #coeficiente de x
b = 2 #coeficiente de y
c = -3 #coeficiente independiente

#se añade la ecuación objetivo al problema


problema += a*x + b*y + c

#resolver
problema.solve()

#la ecuación objetivo evaluada en el punto obtenido


resultado = a*x.varValue + b*y.varValue +c

#mostrar resultado
print(f"Valor {nombre}={resultado} en el punto ({x.varValue},{y.varValue})")

problema("máximo",pl.LpMaximize)#resuelve para valor maximo


problema("mínimo",pl.LpMinimize)#resuelve para valor minimo

También podría gustarte