Clases Programacion Lineal 2024
Clases Programacion Lineal 2024
Clases Programacion Lineal 2024
UNIVERSIDAD NACIONAL
DE MISIONES
Investigación Operativa
Cristian Kornuta
Problemas
lineales
y
No lineales MATLAB/OCTAVE
SciPy
GAMS
OptimGraf 1.3
KORNUTA, Cristian Andres
KORNUTA, Cristian Andres
Nacido en Posadas, Provincia de Misiones, el 24 de febrero de 1979.
Ex alumno de la Maestría en Tecnología de la información año 2016 (Tesis pendiente).
Licenciado en Sistemas de Información; cuyo tema de tesis fue: “Desarrollo De Un Controlador Difuso Para La Navegación De Robots Móviles ISBN: 978-950-766-
108-2”, F.C.E.Q. y N.- U.Na.M.. Nota: 10, Recibido con honoren; 2014.
Ex alumno de la Carrera Analista en Sistema de Computación, 3º año, F.C.E.Q. y N.-U.Na.M. (Tesis pendiente)
Actividades Académicas:
Auxiliar Docente de Segunda en la cátedra Matemática IV (Análisis numérico)(Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M.) Años: 2017 - Actualidad;
Auxiliar Docente de Segunda en la cátedra Investigación de Operaciones (Analista en Sistemas-F.C.E.Q. y N.- U.Na.M.-Licenciatura en sistemas, F.C.E.Q. y N. -
U.Na.M.) Años: 2013 - Actualidad;
Auxiliar Docente de Segunda en la cátedra Teoría de la Computación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M – Profesorado universitario en informática -
F.C.E.Q. y N.) Año: 2013- Actualidad.
Auxiliar Docente de Segunda en la catedra Introducción a la informática (Analista en Sistemas - F.C.E.Q. y N. - Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M –
Profesorado universitario en informática - F.C.E.Q. y N.) Años: 2010 - Actualidad.
Jefe de trabajos prácticos de la cátedra Investigación de Operaciones (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2015-2016.
Profesor de la cátedra Introducción a la Informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013, 2014.
Profesor del taller de informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013.
Profesor de consulta de la cátedra Introducción a la Informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013.
Auxiliar Docente de primera en las cátedras Inteligencia Artificial y Modelos y Simulación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2013, 2014.
Auxiliar Docente de Segunda en las cátedras Inteligencia Artificial y Modelos y Simulación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2011, 2012.
Auxiliar Docente de Segunda en la cátedra Matemática III (Calculo)(-Analista en Sistemas-Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2010-2016.
Auxiliar Docente de Segunda en la cátedra Paradigma del lenguaje (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2010-2012.
Auxiliar Docente de Segunda en la cátedra Matemática II (Algebra lineal)(Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2011-2013.
Auxiliar Docente de Segunda en la cátedra Computación I (Arquitectura del computador)(Analista en Sistemas-Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M )
Año: 2010.
KORNUTA, Cristian Andres
Actividades En Gestión:
Coordinador Estudiantiles de la Carrera informática - (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M), año 2011-2013.
Actividades En Investigación:
Ex becario del CEDIT En el proyecto del desarrollo de un Modelo de Gasificación a partir de Aserrín.
A trabajado conjuntamente con él Prof. Matiauda, Mario, en el desarrollo de software con MATLAB y Octave, relacionado con la Educción y el desarrollo de
aplicación que contribuyan a la enseñanza de la matemática. Años: 2017-2018.
https://sites.google.com/site/mariomatiauda/home/acerca-de-mario-matiauda
Becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “HIDRÓGENO Y EL CHAR COMO CATALIZADOR”; Años:
2022-2024.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “LOS RESIDUOS DEL ASERRADO Y EL HIDRÓGENO”;
Años: 2018-2021.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “HIDROGENO EN LA GASIFICACION DE ASERRRIN
CATALIZADA CON DOLOMITA”; Años: 2015-2017.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “Desarrollo E Implementación De Prototipos De
Robots Móviles Para La Navegación Autónoma Utilizando Técnicas De Inteligencia Artificial”; Años: 2013-2016.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “Diseño E Implementación De Una GUI Para Octave
Orientado Al Calculo” ; Años: 2013-2016.
Ex becario en el Trabajo independiente de investigación “Estrategias Didácticas en el uso de Herramientas Software para Favorecer la Comprensión de los Alumnos
en la Enseñanza sobre Compiladores” . Año: 2012-2013.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones , en el Proyecto “Aplicación De Inteligencia Artificial A La Navegación
De Robots Móviles Utilizando Player/Stage” perteneciente a la F.C.E.Q. y N. - U.Na.M. Años: 2011-2013.
Coautor del libro “Introducción al Algebra Lineal, Elementos de Algebra Lineal”, Autores Matiauda Mario, Kornuta Cristian - ISBN: 978-950-579-238-2.
Colaborador del libro “RESEÑA DE OPTIMIZACIÓN MATEMÁTICA no lineal” Autor Matiauda Mario año 2021 – Publicación independiente, Cuaderno de catedra –
Paginas 253-256 OptimGraf.
Posee Numerosas Publicaciones con Referato y Participación en Encuentros y Conferencias en condición de Disertante, Autor, Co-autor y Expositor, desde el 2010-
Actualidad.
http://sedici.unlp.edu.ar/discover?query=kornuta+cristian&submit=
Ámbito publico:
Desarrollador de software orientado al ámbito hotelero.
PROGRAMACIÓN LINEAL
INTRODUCCIÓN A MATLAB
MÉTODO SIMPLEX
TEMAS MATLAB
OCTAVE
PYTHON
GAMS
PROGRAMACIÓN NO LINEAL
MATLAB
OCTAVE
PYTHON
TEMAS GAMS
I N T RO D U C C I Ó N A
MATLAB/Octave
Bard…Octave es la
alternativa libre y
gratuita al Matlab…
MATLAB está presente en:
✓Sistemas de seguridad activa de automóviles
✓Naves espaciales interplanetarias
✓Dispositivos de monitorización de la salud
✓Redes eléctricas inteligentes
✓Redes móviles LTE.
✓Se utiliza para aprendizaje automático
✓Procesamiento de señales
✓Procesamiento de imágenes
✓Visión artificial
✓Comunicaciones
✓Finanzas computacionales
✓Robótica
¿QUE ES MATLAB?
• MATLAB es un lenguaje de programación
funcional, específicamente diseñado para el Cálculo
Numérico, representando en la práctica por un conjunto
de herramientas.
¿QUE ES MATLAB?
• En ciencias de la computación, la
programación funcional es un paradigma de
programación declarativa basado en el uso de
funciones matemáticas.
¿QUE ES MATLAB?
Entrada • Parámetro
• Subrutina
Proceso o función
• Valor de
Salida retorno
¿QUE ES MATLAB?
Matlab = Matrix Laboratory.
Programa comercial de The Mathworks Inc
(Natick, MA). http://www.mathworks.com
Ventana de comandos
Directorio de trabajo
Ventana del área de trabajo
Historial de comandos
IMPORTANCIA DE LA VENTANA HISTORIAL DE COMANDOS
▪ Porque permite revisar sesiones
anteriores
▪ Para la transferencia de comandos a la ventana de
comandos.
VENTANA DEL ÁREA DE TRABAJO (WORKSPACE)
▪ La ventana del área de trabajo le
mantiene informado de las variables que
usted define conforme ejecuta
comandos en la ventana de comandos.
VENTANA DE DOCUMENTO (DOCUMENT WINDOW)
▪ Hacer doble clic sobre cualquier variable
mencionada en la ventana del área de
trabajo lanza automáticamente una
ventana de documento que contiene el
Array Editor (editor de arreglos).
▪ Los valores que se almacenan en la variable se
despliegan en un formato de hoja de cálculo.
▪ Puede cambiar los valores en el editor de arreglos o
puede agregar nuevos valores.
VENTANA DE DOCUMENTO (DOCUMENT WINDOW)
VENTANA DE DIRECTORIO ACTUAL (CURRENT DIRECTORY)
▪ La ventana de directorio actual lista
todos los archivos en una carpeta de la
computadora llamada directorio actual.
▪ El directorio actual se puede cambiar al seleccionar
otro directorio de la lista desplegable que se ubica
junto a la lista de directorio o al navegar entre los
archivos de su computadora.
EL EDITOR
EL EDITOR DE MATLAB
▪ El editor muestra con diferentes colores los
diferentes tipos o elementos de la sintaxis. (en
verde los comentarios, en azul las cadenas de
caracteres, etc.). El editor además indica que las comillas o
paréntesis que se abren se cierren correctamente.
EL EDITOR DE MATLAB
LA BARRA DE HERRAMIENTAS ESTANDAR
Abrir nuevo M-file archivo
Abrir nuevo M-file existente Paso, ejecuta la linea actual
Guardar M-file existente Paso a paso, ejecutar la línea actual del M-archivo
Cortar Pegar Paso salida, ejecuta las llamadas a funciones o
Copiar
subrutinas
✓ Statistics Toolbox
✓ Symbolic Math Toolbox
✓ System Identification Toolbox
ALGUNOS TOOLBOX
IMAGE PROCESSING TOOLBOX
• Es un amplio conjunto de algoritmos estándar
y herramientas gráficas para el procesamiento de
imágenes, análisis, visualización y desarrollo
de algoritmos.
• Se puede realizar la mejora de la imagen, reducción de ruido, la
segmentación de imágenes, transformaciones espaciales etc.
ALGUNOS TOOLBOX
IMAGE PROCESSING TOOLBOX
ALGUNOS TOOLBOX
NEURAL NETWORK TOOLBOX
• Proporciona herramientas para el diseño,
implementación, visualización y simulación
de redes neuronales.
• Las redes neuronales se utilizan para aplicaciones en el análisis
formal, como reconocimiento de patrones y la identificación de
sistemas no lineales y control.
• Ejemplo reconocimientos de rostros,
matriculas, controles de calidad etc.
ALGUNOS TOOLBOX
NEURAL NETWORK TOOLBOX
ALGUNOS TOOLBOX
STATISTICS TOOLBOX
• Proporciona un conjunto completo de herramientas para
evaluar y entender los datos. Incluye funciones y
herramientas interactivas para el modelado de
datos, análisis de tendencias históricas, la simulación de
sistemas, desarrollo de algoritmos estadísticos; el aprendizaje y
la enseñanza de la estadística.
ALGUNOS TOOLBOX
STATISTICS TOOLBOX
Comandos…
Cuestiones básicas
COM
AND
OS
Cuestiones básicas
Al momento de realizar un cálculo a este se le asigna a una
variable en concreto, el resultado queda guardado en ella.
Ejemplo.
>> x=8+7
x=
15
COM
AND
OS
¿Cómo cargar un vector?
Para definir un vector fila, es suficiente escribir sus
coordenadas entre corchetes.
Ejemplo:
>> v=[2 4 6] % Vector de 3 coordenadas
v=
246
D=
1 3 5 7 9 11 13 15
COM
AND
OS
¿Cómo cargar un vector?
MATLAB contempla diferentes sintaxis para definir un vector
Ejemplo:
p=(15:-2:0)
p=
15 13 11 9 7 5 3 1
COM
AND
OS
¿Cómo cargar un vector?
Si lo que conocemos del vector es que la primera
coordenada vale 0, la última 10 y que tiene 6 en total,
escribiremos:
>> y=linspace(0,10,6)
y=
0 2 4 6 8 10
COM
AND
OS
¿Cómo hallar la traspuesta?
Para allá la traspuesta de un vector o matriz simplemente se
agrega la comilla simple al vector definido
Ejemplo
>>c=[2:1:6] '
c=
2
3
4
COM
AND
OS
¿Cómo hallar la norma?
Ejemplo
>>v3=1:3:13
v3 =
1 4 7 10 13
>>norm(v3,1)
ans =
35
Matrices y MATLAB
• Las matrices son, en esencia, los objetos matemáticos con los
que trabaja MATLAB, es decir que todas las variables
representan matrices, de modo que, los escalares quedan
caracterizados por matrices 1*1 y los vectores por matrices fila
o columna.
16 17 18
0 0 0
P=
10 95 12
¿Cómo cargar una matriz? 13 14 15
Ejemplo:
16 17 18
>> P(1,2)=95
0 0 0
% Asignamos el valor 95 en la posicion fila 1 , columna 2
P=
95
10 12
COM
13 14 15 AND
16 17 18 OS
0 0 0
COM
AND P=
OS
10 11 12
Acceso a los elementos de una matriz 13 14 15
Cada elemento de una matriz (entrada) se identifica escribiendo el
nombre de la matriz y, entre paréntesis, sus respectivos índices: 16 17 18
Ejemplo.
0 0 0
%Elemento en la primera fila y tercera columna de P
>> P(1,3)
ans =
12
COM
AND P=
OS
10 11 12
Acceso a los elementos de una matriz
13 14 15
También se puede acceder a un fila o columna entera.
Ejemplo. 16 17 18
>> P(:,2) % Se accede a los valores de la segunda columna.
ans = 0 0 0
11
14
17
0
>> P(2,:) % Se accede a los valores de la segunda fila.
ans =
13 14 15
P=
10 11 12
Acceso a los elementos de una matriz 13 14 15
Se puede conocer siempre el tamaño de una matriz y la 4
16 17 18
longitud de un vector:
0 0 0
+ adición o suma
– sustracción o resta
* multiplicación
' traspuesta
^ potenciación
COM
AND
Operaciones con matrices OS
\ división-izquierda
/ división-derecha
.* producto elemento a elemento
./ y .\ división elemento a elemento
.^ elevar a una potencia elemento a
elemento
Algunas funciones
Matrices especiales
▪ Matrices aleatorias
>>rand(2,3) %Número uniformemente distribuidos entre 0 y 1
▪ Matrices aleatorias
>>randn(2,3) %Números normalmente distribuidos
▪ Matrices mágica
>>magic(3)
FUNCIONES PARA EL MANEJO
DE VARIABLES
EN EL ESPACIO DE TRABAJO
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
disp(X)
• Muestra un array sin incluir su nombre
>> disp(P)
1 2 3
4 5 6
8 9 7
>> disp(g)
cos(x) + 2*x^2 - x^3
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
length(X)
• Muestra la longitud del vector X y, si X es una matriz o array,
muestra su mayor dimensión
>> length(B)
ans =
3
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
who
• Lista las variables del workspace
>> who
Your variables are:
A B a ans b c f f2 g h rho t x y z
Limite y Derivada
Función Limit
• Limit
• limit(F) usa a = 0 como el punto límite.
>>syms x
>>limit(sin(x)/x)
ans = 1
• limit(M, x, a, 'right') o limit (f, x, a, "izquierda")
>>limit(1/x,x,0,'right')
ans = Inf
>>limit(1/x,x,0,'left')
ans = -Inf
Función Limit
• Limit
• limit(f,x,a) tiende el límite de la expresión simbólica
como
𝐱 −> 𝐚.
>>limit((sin(x+h)-sin(x))/h,h,0)
ans=cos(x)
>>limit(F,a) % Omitiendo el valor de x;
limit(x^2/x)
ans= 0 ; x=0
Función Limit
• Limit
• limit(F) usa a = 0 como el punto límite.
limit(sin(x)/x)
ans = 1
• limit(M, x, a, 'right') o limit (f, x, a, "izquierda")
especificar la dirección de un límite, de un solo lado.
limit(1/x,x,0,'right')
ans = Inf
limit(1/x,x,0,'left')
ans = -Inf
Función Diff
• Diff
• diff(S) diferencia una expresión simbólica S con
respecto a su variable libre.
>>diff(sin(x^2))
ans =
2*x*cos(x^2)
• diff(S, 'v') diferencia S con respecto a la v.
>>diff(t/x^2,'x’)
ans =
-(2*t)/x^3
Integrales
Funciones De Integración
• int(f) Regresa la integral de la expresión f con
respecto a la variable independiente por defecto.
න 𝑥3 + 𝑧2
>>y=sym('x^3+z^2’)
>>int(y)
ans =
1/4*x^4+Z^2*X
Funciones De Integración
• int(f,' t') Regresa la integral de la expresión 𝑓 con
respeto a la variable 𝑡.
න 𝑥3 + 𝑧2
>>y=sym('x^3+z^2’)
>>int(y,'z’)
ans =
x^3*z+l/3*z^3
Problemas
lineales
MATLAB
Graficas
TOOLBOX GRAFICOS
TOOLBOX GRAFICOS
TOOLBOX GRAFICOS
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
TIPOS DE GRAFICOS EN 2D
• plot(x,y) • bar(x)
• polares(x,y) • barh(x)
• semilogx(x,y) • pie(x)
• semilogy(x,y) • hist(x)
• loglog(x,y)
GRAFICAS
• Pasos
• Cargar los datos Ej.: x = 0:.1:10;
• Procesar datos Ej.: y=10.^x
• Usar función de creación del grafico Ej.: plot
• Establecer las propiedades a la grafica
• Agregar los objetos a la grafica
• etc.
Control de ejes
axis ([ xmin xmax ymin ymax ]) % Fija los limites de
los %ejes x e y
axis equal % mismo ratio de aspecto x e y
axis normal o auto % valor por omisión
axis square % Ajusta los ejes para que el grafico
sea %cuadrado ( o cubico en 3D)
axis off | on % Oculta o muestra los ejes (lineas,
marcas y etiquetas asociadas)
90
0.5
120 60
0.4
0.3
150 30
0.2
Comando polares(x,y)
0.1
180 0
polar(angulos, radios)
% Dibuja las coordenadas polares 210 330
x=0:0.01:2*pi;
y=abs(sin(2*x).*cos(2*x))
polar(x,y);
Graficas logarítmicas
• loglog (x, y) : ambos ejes en escala
logarítmica
• semilogx(x, y): eje x logarítmico
• semilogy(x, y): eje y logarítmico
9
x 10
10
Comando semilogx(x,y) 6
x = 0:.1:10; 4
y=10.^x 2
semilogx(x,y) 0
10
-1 0
10
1
10
10
10
8
10
Comando semilogy(x,y)
6
10
x = 0:.1:10; 4
10
y=10.^x 2
10
semilogy(x,y) 0
10
0 1 2 3 4 5 6 7 8 9 10
50
10
40
10
Comando loglog(x,y)
30
10
x = logspace(-1,2); 20
10
y=exp(x) 10
10
loglog(x,y,'-s') 0
10
-1
10
0
10
1
10
2
10
1
0.9
0.8
0.7
Comando bar(x)
0.6
0.5
x = -2.9:0.2:2.9; 0.4
0.3
y=exp(-x.*x) 0.2
0.1
bar(x,y); 0
-3 -2 -1 0 1 2 3
3
Comando barh(x)
0
-1
x = -2.9:0.2:2.9;
-2
y=exp(-x.*x)
-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
barh(x,y,'r')
Comando pie(x)
x = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
pie(x,explode)
Comando hist(x)
• Muestran la distribución de una serie de datos,
representando cuantos puntos hay en cada
intervalo
450
400
350
300
200
x = -4:0.1:4; 150
y = randn(10000,1); 100
50
hist(y,x) 0
-5 -4 -3 -2 -1 0 1 2 3 4 5
Objetos y mas para las…
Graficas
1
0.8
0.6
0.4
0.2
Coseno Seno
Comando plot(x,y,x1,y1)
0
-0.2
-0.8
x=0:0.05:5; -1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x1=0:0.05:5;
y=sin(x.^2);
y1=cos(x.^2);
plot(x,y,x1,y1)
1
0.8
0.6
0.4
0.2
Comando plot(x,y,x1,y1) 0
-0.2
Color -0.4
plot(x,cos(x),‘--r‘) -0.6
-0.8
r (Red)
-1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
g (Green)
b (Blue)
c (Cyan)
m (Magenta)
y (Yellow)
k (blacK)
w (White)
1
0.8
0.6
0.4
0.2
-0.4
-0.8
plot(x,cos(x),'--r‘) -1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
- (solida)
-- (trazas)
: puntos)
-. (líneas y puntos)
Comando plot(x,y,x1,y1)
Marcadores plot(x,cos(x),'-ro‘)
Marcadores:
+, o, *, ., x, s (square)
d (diamante),
^ v > o < (triângulos en distinto sentido)
p (estrella 5 de puntas, pentagrama)
h (estrella 6 puntas, hexagram)
OBJETOS PARA LOS GRÁFICOS
Podemos añadir objetos a los grafico
xlabel('etiqueta del eje x')
ylabel('etiqueta eje y')
title('titulo del grafico')
text (x, y, 'texto') % Si x e y son vectores, el %texto
se repite
gtext('texto') % la posición se indica con el %ratón.
Leyenda
Añade la leyenda del eje, por cada serie de datos
mostrada
legen('leyenda 1',leyenda 2','location', posición)
1
cos x
0.8
sinx
0.6
0.4
Leyenda
0.2
-0.2
x = -pi:pi/20:pi; -0.4
-0.6
plot(x,cos(x),'-ro',x,sin(x),'-b.'); -0.8
-1
-4 -3 -2 -1 0 1 2 3 4
legend('cos_x','sin_x',2);
1
cos x
0.8
sinx
0.6
0.4
Control de ejes
0.2
-0.4
apariencia de los ejes -0.6
-0.8
-1
axis
-4 -3 -2 -1 0 1 2 3 4
Gráficos en
MATLAB
Segunda parte
Elementos Del Calculo En MATLAB
TIPOS DE GRAFICOS EN 3D
• Plot3(x,y,z)
• Comet3(x,y,z)
• Mesh(x,y,z)
• Surfc(x,y,z)
• Contour3(x,y,z)
• Pcolor(x,y,z)
40
30
Comando plot3(x,y,z) 20
z = 0:pi/50:10*pi; 10
x=sin(z) 0
1
y=cos(z) 0.5
0.5
1
0
0
-0.5
-0.5
-1 -1
plot3(x,y,z)
grid on
axis square
Comando comet3(x,y,z)
z = -10*pi:pi/250:10*pi;
x=(cos(2*z).^2).*sin(z)
y=(sin(2*z).^2).*cos(z)
grid on
comet3(x,y,z);
Comando mesh(x,y,z)
mesh(x,y,z)
grid on
5
Comando surfc(x,y,z)
0
[x,y,z] = peaks(30); -5
surfc(x,y,z) -10
2
3
-2 -2
grid on -3
10
Comando contour3(x,y,z) 0
[x,y,z] = peaks(30); -5
-10
2
3
2
0 1
contour3(x,y,z) -2 -2
-1
0
-3
grid on
Comando pcolor(x,y,z)
n = 6;
r = (0:n)'/n;
theta = pi*(-n:n)/n;
x = r*cos(theta);
y = r*sin(theta);
c = r*cos(2*theta);
pcolor(x,y,c)
Superficie de revolución
• Una superficie de revolución es aquella que se
genera mediante la rotación de una curva plana, o
generatriz, alrededor de una recta directriz, llamada
eje de rotación, la cual se halla en el mismo plano
que la curva.
Superficie de revolución de perfil 2+cost
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(2+cos(t));
surf(X,Y,Z)
axis square
xlabel('x');ylabel('y');zlabel('z')
Superficie de revolución de perfil 2+cost
Superficie "Tobogán
u=(0:pi/8:4*pi)';
%vector columna de m=33 elementos
v=0:pi/16:2*pi;
%vector fila de n=33 elementos
X=cos(u)*(2+sin(v));
%X, Y y Z son matrices de orden mxn=33x33
Y=sin(u)*(2+sin(v));
Z=u*ones(size(v))+ones(size(u))*cos(v);
mesh(X,Y,Z)%surfl(X,Y,Z)
%surf(X,Y,Z)
axis([-4 4 -4 4 0 10])
% se multiplica por ones(size()) en Z para la
% consistencia del producto matricial
Problemas
lineales
MATLAB/OCTAVE
Método
Simplex/Matricial
Algebraico
Maximizar
Resolución de forma
Método Algorítmica - Vectorial
Simplex
Maximizar - Minimizar
Resolución de forma
Algorítmica – Vectorial (DUAL)
MATLAB/OCTAVE
Ejemplo 2.1-1 (La compañía Reddy Mikks)
Reddy Mikks produce pinturas para interiores y
exteriores con dos materias primas, M1 y M2.
La tabla siguiente proporciona los datos
PROBLEMAS básicos del problema.
LINEALES Tn de MP/ton de producto Disponibilidad
Barniz exterior Barniz interior diaria max
toneladas
Materia 6 4 24
primaM1
Materia 1 2 6
Diapositiva de catedra
primaM2
2.1 Taha Investigación de Utilidad por 5 4
operaciones
ton($1000)
▪MATLAB/OCTAVE
Maximizar
Tn de MP/ton de Disponibilidad diaria
producto max toneladas
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
Barniz Barniz
exterior interior
Materia 6 4 24 sujeta a
primaM1
Materia 1 2 6 𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒
primaM2 𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔
Utilidad por 5 4
ton($1000) −𝒙𝟏 + 𝒙𝟐 ≤ 𝟏
𝒙𝟐 ≤ 𝟐
𝒙𝟏, 𝒙𝟐 ≥ 𝟎
Maximizar
▪MATLAB/OCTAVE
Paso 1: Despejar la F.O. e incluir las variables Holgura
𝑍 −5𝑥1 −4𝑥2 = 0
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
6𝑥1 +4𝑥2 +𝑺𝟏 = 24
sujeta a 𝑥1 +2𝑥2 +𝑺𝟐 = 6
𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒 −𝑥1 + 𝑥2 +𝑺𝟑 = 1
𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔 𝑥2 +𝑺𝟒 = 2
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0
𝑺𝟏 0 1 2 𝟏 0 0 0 4 𝟏
3 𝟔 𝟔
∗ 𝑹𝟐 TI(2,:) =1/6.*TI(2,:)
𝑺𝟐 0 1 2 0 𝟏 0 0 6
𝑺𝟑 0 −1 1 0 0 𝟏 0 1
𝑺𝟒 0 0 1 0 0 0 𝟏 2
d. Aplicar la operación de eliminación reglón
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0 𝟓 ∗ 𝑹𝟐 + 𝑹𝟏 TI
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝑺𝟐 0 1 2 0 𝟏 0 0 6 −𝑹𝟐 + 𝑹𝟑
𝑺𝟑 0 −1 1 0 0 𝟏 0 1 𝑹𝟐 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20 𝟓 ∗ 𝑹𝟐 + 𝑹𝟏 TI(1,:) =5.*TI(2,:)+TI(1,:)
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝑺𝟐 0 0 4/3 −1/6 𝟏 0 0 2 −𝑹𝟐 + 𝑹𝟑 TI(3,:) =-TI(2,:)+TI(3,:)
𝑺𝟑
TI(4,:) = TI(2,:)+TI(4,:)
0 0 5/3 1/6 0 𝟏 0 5 𝑹𝟐 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2
a. Identificación de la columna pivote
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20 El renglon 1
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4 𝑹𝟏 con el menor [v,c]=min(TI(1,:))
𝑺𝟐
valor
0 0 4/3 −1/6 𝟏 0 0 2
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5
𝑺𝟒 0 0 1 0 0 0 𝟏 2
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝟑
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝟒
∗ 𝑹𝟑 TI(3,:) =3/4.*TI(3,:)
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5
𝑺𝟒 0 0 1 0 0 0 𝟏 2
d. Aplicar la operación de eliminación reglón
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅 TI
Z 1 0 −2/3 5/6 0 0 0 20 𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟏
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4 −𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟐
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5 −𝟓/𝟑 ∗ 𝑹𝟑 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2 −𝑹𝟑 + 𝑹𝟓
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 0 4/3 1/2 0 0 21 𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟏 TI(1,:) =2/3.*TI(3,:)+TI(1,:)
𝒙𝟏 0 1 0 𝟏/𝟒 −1/2 0 0 3 −𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟐 TI(2,:) =-2/3.*TI(3,:)+TI(2,:)
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 0 3/8 −5/4 𝟏 0 5/2 −𝟓/𝟑 ∗ 𝑹𝟑 + 𝑹𝟒 TI(4,:) =-5/3.*TI(3,:)+TI(4,:)
𝑺𝟒 0 0 0 1/8 −3/4 0 𝟏 1/2 −𝑹𝟑 + 𝑹𝟓
TI(5,:) = -TI(3,:)+TI(5,:)
Resultado
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
e. El procedimiento se repite
Z 1 0 0 4/3 1/2 0 0 21
hasta que las variables no
𝒙𝟏 0 1 0 𝟏/𝟒 −1/2 0 0 3
básicas sean cero o positivas
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 0 3/8 −5/4 𝟏 0 5/2
𝑺𝟒 0 0 0 1/8 −3/4 0 𝟏 1/2 𝒙𝟏 = 𝟑
Maximizar
𝒙𝟏 = 𝟑/𝟐
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
𝑍 = 21
sujeta a
𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒
𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔 21 = 𝟓 ∗ 𝟑 + 𝟒 ∗ 𝟑/𝟐
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟏
𝒙𝟐 ≤ 𝟐
𝒙𝟏, 𝒙𝟐 ≥ 𝟎
Problemas
lineales
MATLAB/OCTAVE
Método Simplex/
Forma Matricial
▪MATLAB/OCTAVE
Maximizar
𝒁 = 𝟑𝒙𝟏 + 𝟐𝒙𝟐 + 𝟓𝒙𝟑 + 𝒙𝟒
Sujeta a
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟒𝟑𝟎
𝟑𝒙𝟏 + 𝟐𝒙𝟑 + 𝒙𝟒 ≤ 𝟒𝟔𝟎
𝒙𝟏 + 𝟒𝒙𝟐 + 𝟑𝒙𝟒 ≤ 𝟒𝟐𝟎
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟓𝟎𝟎
▪MATLAB/OCTAVE
Maximizar 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
1 −3 −2 −5 −1 0 0 0 0 0
𝒁 = 𝟑𝒙𝟏 + 𝟐𝒙𝟐 + 𝟓𝒙𝟑 + 𝒙𝟒 𝒙𝟓 0 1 2 1 2 1 0 0 0 430
Sujeta a 𝒙𝟔 0 3 0 2 1 0 1 0 0 460
𝒙𝟕 0 1 4 0 3 0 0 1 0 420
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟒𝟑𝟎
𝒙𝟖 0 1 2 1 2 0 0 0 1 500
𝟑𝒙𝟏 ≤ 𝟒𝟔𝟎
+ 𝟐𝒙𝟑 + 𝒙𝟒
𝒙𝟏 + 𝟒𝒙𝟐 + 𝟑𝒙𝟒 ≤ 𝟒𝟐𝟎
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 𝟓𝟎𝟎 1 −𝑐 0 0
≤
0 𝐴 𝐼 𝑏
▪MATLAB/OCTAVE
A es la matriz de coeficientes tecnológicos conforme
las restricciones. Tabla Simplex Inicial
b es un vector columna de términos independientes
conforme a las restricciones. 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
C es un vector renglón de coeficientes, conforme a la
función objetivo 1 −3 −2 −5 −1 0 0 0 0 0
CB es un vector renglón de coeficientes de variables de 𝒙𝟓 0 1 2 1 2 1 0 0 0 430
función objetivo, conforme transpuesto, se ubiquen en
la columna de base (básicas) en tabla simplex. 𝒙𝟔 0 3 0 2 1 0 1 0 0 460
Y es un vector renglón de variables duales (precios 𝒙𝟕 0 1 4 0 3 0 0 1 0 420
sombra) los que se localizan como coeficientes en
variables de holgura y/o artificiales del renglón Z. 𝒙𝟖 0 1 2 1 2 0 0 0 1 500
XB es un vector columna con valores de variables Cualquier tabla del simplex se
básicas en la columna solución. puede obtener a partir de:
B es la inversa de una matriz B, formada de
-1
0 𝐴 𝐼 𝑏
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
1 −3 −2 −5 −1 0 0 0 0 0 1 4 0 0 3 1 2 0 0 1350
𝒙𝟓 0 1 2 1 2 1 0 0 0 430 𝒙𝟐 0 −0.25 1 0 0.75 0.5 −0.25 0 0 100
𝒙𝟔 0 3 0 2 1 0 1 0 0 460 𝒙𝟑 0 1.5 0 1 0.5 0 0.5 0 0 230
𝒙𝟕 0 1 4 0 3 0 0 1 0 420 𝒙𝟕 0 2 0 0 0 −2 1 1 0 20
𝒙𝟖 0 1 2 1 2 0 0 0 1 500 𝒙𝟖 0 0 0 0 0 −1 0 0 1 70
𝟏 −𝒄 𝟎 𝟎 𝟏 −𝟏
𝑪𝑩 𝑩 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
∗ =
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
Tabla Simplex Inicial Tabla Simplex Óptima
Diapositiva de catedra
▪MATLAB/OCTAVE
Lo primero que tenemos hacer es obtener la base óptima 1 2 1 2 2 1 0 0
3 0 2 1
𝐴= 𝐵= 0 2 0 0 Tabla inicial
𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = 𝑿𝟐 𝑿𝟑 𝑿𝟕 𝑿𝟖 1 4 0 3 4 0 1 0
1 2 1 2 2 1 0 1
𝐷𝑒 𝑎ℎ𝑖 𝑞𝑢𝑒 𝐶𝐵 = 𝟐 𝟓 𝟎 𝟎 coef var. bás. tabla inicial 0.5 −0.25 0 0
𝐶= 𝟑 𝟐 𝟓 𝟏 0= 𝟎 𝟎 𝟎 𝟎
0.5 −0.25 0 0 −1 0 0,5 0 0
𝐵 =
0 0 −2 1 1 0
0 0.5
𝐶𝐵 𝐵−1 = 𝟐 𝟓 𝟎 𝟎 −1 0 0 1
−2 1 1 0
−1 0 0 1 𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = Columnas de x2, x3,x7,x8
430
𝐶𝐵 𝐵−1 = 1 2 0 0 (sombra) 460
𝐶𝐵 𝐵−1 𝑏 = 1 2 0 0 = 𝟏𝟑𝟓𝟎
1 2 1 2 420
3 0 2 1 500
𝐶𝐵 𝐵−1 𝐴 = 1 2 0 0 ∙
1 4 0 3
1 2 1 2 0.5 −0.25 0 0 430 100
𝐶𝐵 𝐵−1 𝐴 = 7 2 5 4 0 0.5 0 0 460 230
𝐵−1 𝑏 = ∙ =
−2 1 1 0 420 20
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 7 2 5 4 − 3 2 5 1 −1 0 0 1 500 70
Tabla Simplex Optima
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 4 0 0 3
𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
Diapositiva de catedra 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
▪MATLAB/OCTAVE 1 −𝑐 0 0
Lo primero que tenemos hacer es obtener la base óptima 0 𝐴 𝐼 𝑏
𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = 𝑿𝟐 𝑿𝟑 𝑿𝟕 𝑿𝟖
2 1 0 0
𝐵= 0 2 0 0 Columnas de x2, x3,x3,x4 I=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]
4 0 1 0
2 1 0 1 B=[A(:,2) A(:,3) I(:,3) I(:,4)]
0.5
0
−0.25
0,5
0
0
0
0
Tabla Simplex Optima B1=inv(B)
𝐵−1 =
−2 1 1 0 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
−1 0 0 1 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
▪MATLAB/OCTAVE
0.5 −0.25 0 0 CB=[c(1,2) c(1,3) I(1,3) I(1,4)]
0 0.5 0 0
𝐶𝐵 𝐵−1 = 𝟐 𝟓 𝟎 𝟎
−2 1 1 0 CB_B1= CB*B1
−1 0 0 1
CB_B1_A= CB_B1 * A
𝐶𝐵 𝐵−1
= 1 2 0 0 (sombra)
1 2 1 2 CB_B1_A_C= CB_B1_A-c
3 0 2 1
𝐶𝐵 𝐵−1 𝐴 = 1 2 0 0 ∙
1 4 0 3
1 2 1 2
Tabla Simplex Optima
𝐶𝐵 𝐵−1 𝐴 = 7 2 5 4
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 7 2 5 4 − 3 2 5 1 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 4 0 0 3
▪MATLAB/OCTAVE
CB_B1_b= CB_B1*b'
430
𝐶𝐵 𝐵−1 𝑏 = 1 2 0 0
460
= 𝟏𝟑𝟓𝟎 B1_b= B1*b'
420
500 B1_A =B1*A
0.5 −0.25 ' 0 0 430 100
Tabla Simplex Optima
0 0.5 0 0 460 230
𝐵−1 𝑏 = ∙ =
−2 1 1 0 420 20 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
−1 0 0 1 500 70 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
b
𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎 𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝑺𝟏 𝑺𝟐 𝒃𝒋
1 −𝑐 0 0 -c 𝒛 1 −3 −4 −3/2 0 0 0
0 𝐴 𝐼 𝑏 𝑺𝟏 0 1 2 0 1 0 10
A
𝑺𝟐 0 2 2 1 0 1 10
▪ MATLAB/OCTAVE
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝑺𝟏 𝑺𝟐 𝒃𝒋
-c 𝒛 1 −3 −4 −3/2 0 0 0 b
𝑺𝟏 0 1 2 0 1 0 10
A 𝑺𝟐 0 2 2 1 0 1 10
𝐼𝑡𝑒𝑟𝑎𝑐𝑖ó𝑛 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
≥1 𝑧 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
▪ MATLAB/OCTAVE
Iteración 1
Maximizar 3 Mismos datos
𝒄= 3 4 0 0
𝟑 2 Prob. Init.
𝒁 = 𝟑𝒙𝟏 + 𝟒𝒙𝟐 + 𝒙𝟑 + 𝟎𝑺𝟏 + 𝟎𝑺𝟐
𝟐 1 2 0 1 0
𝑨= 10
2 2 1 0 1 𝒃=
Sujeta a 10
𝒙𝟏 + 𝟐𝒙𝟐 + 𝑺𝟏 = 𝟏𝟎 𝐼𝑡𝑒𝑟𝑎𝑐𝑖ó𝑛 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
𝟐𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝑺𝟐 = 𝟏𝟎 ≥1 𝒛 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎 𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
𝑆1 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
1 0
𝒙𝑩 = ;𝑩= = 𝑩−𝟏 ; 𝒄𝑩 = 0 0 𝑺𝟏 2 10
𝑆2 0 1
𝑺𝟐 2 10
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −3 −4 −3/2 0 0
𝑺𝒂𝒍𝒆 𝑺𝟏
𝑬𝒏𝒕𝒓𝒂 𝒙𝟐
▪ MATLAB/OCTAVE
3 format bank Mismos datos
𝒄= 3 4 0 0
2 Prob. Init.
1 2 0 1 0 c=[3 4 3/2 0 0]
𝑨=
2 2 1 0 1 A=[1 2 0 1 0; 2 2 1 0 1]
10 b=[10; 10]
𝒃=
10
𝑆1
B=[A(:,4) A(:,5)]
1 0
𝒙𝑩 = ;𝑩= = 𝑩−𝟏 ; 𝒄𝑩 = 0 0
𝑆2 0 1 cB=[c(1,4) c(1,5)]
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −3 −4 −3/2 0 0
B1=inv(B)
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃 cB_B1_A_C= (cB*inv(B)*A)-c
𝑺𝟏 2 10 B1_A =B1*A
𝑺𝟐 2 10
B1_b= B1*b
▪ MATLAB/OCTAVE
Iteración 2 3 1 2 0 1 0 10
𝒄= 3 4 0 0 𝑨= 𝒃=
Mismos datos 2 2 1 0 1 10
Prob. Init.
2
𝑥2 −𝟏 1/2 1 0 1/2 0
−𝟏 1/2 0 𝑩 𝑨 =
𝒙𝑩 = 𝑆 𝑩 = 1 0 1 −1 1
2 −1 1
5
2 0 𝑩−𝟏 𝒃 =
𝑩= 𝒄𝑩 = 4 0 0
2 1
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
𝒙𝟐 0 5
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −1 0 −3/2 2 0 𝑺𝟐 1 0
𝑬𝒏𝒕𝒓𝒂 𝒙𝟑
𝑺𝒂𝒍𝒆 𝑺𝟐
▪ MATLAB/OCTAVE
3 Mismos datos format bank
𝒄= 3 4 0 0
2 Prob. Init. c=[3 4 3/2 0 0]
1 2 0 1 0 10
𝑨= 𝒃= A=[1 2 0 1 0; 2 2 1 0 1]
2 2 1 0 1 10
𝑥2
𝒙𝑩 = 𝑆 ; 𝑩 =
2 0 −𝟏
;𝑩 =
1/2 0
; 𝒄𝑩 = 4
b=[10; 10]
0
2 1 −1 1
B=[A(:,2) A(:,5)]
2
1/2 1 0 1/2 0
𝑩−𝟏 𝑨 =
1 0 1 −1 1 B1=inv(B)
5
𝑩−𝟏 𝒃 = cB_B1_A_C= (cB*inv(B)*A)-c
0
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃 B1_A =B1*A
𝒙𝟐 0 5
𝑺𝟐 1 0 B1_b= B1*b
▪ MATLAB/OCTAVE 𝑺𝒂𝒍𝒆 𝑺𝟐
Iteración 3 3 1 2 0 1 0 10
𝒄= 3 4 0 0 𝑨= 𝒃=
Mismos datos 2 2 2 1 0 1 10
Prob. Init.
𝑥2 𝐼𝑡𝑒𝑟. 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
−𝟏 1/2 0
𝒙𝑩 = 𝑥 𝑩 = ≥1 𝑧 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
3 −1 1
𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
2 0
𝑩= 𝒄𝑩 = 4 3/2
2 1
𝑧 = 𝑐𝐵 𝐵−1 𝑏 = 20
𝑥2 −1 5
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = 1/2 1 0 1/2 0 𝑥𝑏 = 𝑥 = 𝐵 𝑏 =
𝑬𝒏𝒕𝒓𝒂 𝒙𝟑 3 0
▪ MATLAB/OCTAVE
3 Mismos datos format bank
𝒄= 3 4 0 0
2 Prob. Init. c=[3 4 3/2 0 0]
1 2 0 1 0 10
𝑨= 𝒃= A=[1 2 0 1 0; 2 2 1 0 1]
2 2 1 0 1 10
𝑥2
𝒙𝑩 = 𝑥 ; 𝑩 =
2 0 −𝟏
;𝑩 =
1/2 0
; 𝒄𝑩 = 4 3/2
b=[10; 10]
3 2 1 −1 1
B=[A(:,2) A(:,3)]
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = 1/2 1 0 1/2 0 cB=[c(1,2) c(1,3)]
𝑧 = 𝑐𝐵 𝐵−1 𝑏 = 20 B1=inv(B)
cb_B1_A_C=
𝑥2 −1 5 (cB*inv(B)*A)-c
𝑥𝑏 = 𝑥 = 𝐵 𝑏 =
3 0 B1_A =B1*A
▪ MATLAB/OCTAVE B1_b= B1*b
DE UNA TABLA SIMPLE OPTIMA
A LA QUE LA GENERO
Supongamos que disponemos de la siguiente tabla
optima de un problema de PL.
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6
𝑥1 0 1 0 0 −1/3 1/3 2
▪ MATLAB/OCTAVE
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6
𝑥1 0 1 0 0 −1/3 1/3 2
En forma tabular, un problema de programación lineal se resuelve haciendo
Tabla Simplex Inicial Tabla Simplex Óptima
Que corresponde a
[Tabla original] * [Matriz que pre multiplica a la tabla original] = [Tabla optima]
▪ MATLAB/OCTAVE
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 𝟎 𝟎 1 1/3 −1/3 𝟐
𝑥2 0 𝟎 𝟏 0 ½ 0 𝟔
𝑥1 0 𝟏 𝟎 0 −1/3 1/3𝐵 𝟐
𝟏 −𝒄 𝟎 𝟎 1 −𝑐 0 0
𝟎 𝑨 𝑰 𝒃
0 𝐴 𝐼 𝑏
▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
1 −𝑐 0 0
0 𝐴 𝐼 𝑏
Para despejar 𝑏 usamos las siguientes propiedades de matrices:
Multiplicación de matrices: Si conoces otra matriz que al multiplicarse con 𝐴−1 da
como resultado la identidad, puedes usarla para recuperar 𝐴. Esto se puede
expresar como:
𝐴 = 𝐴−1 . 𝐵
Donde 𝐵 es una matriz tal que 𝐴−1 . 𝐵 = 𝐼. En este caso, 𝐵, seria igual a 𝐴.
▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 1 −𝑐 0 0
𝟎 𝑨 𝑰 𝒃 0 𝐴 𝐼 𝑏
Usaremos la siguiente propiedad
−𝟏 format bank
𝑩 −𝟏 ∗𝒃=𝒃
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
Conocemos 𝑩−𝟏 así que la invertimos b=[2;6;2]
B=inv(B_1)*b
1 0 1
𝑩− −𝟏
= 0 2 0
0 2 3
−𝟏
1 0 1 2 4
𝒃= 𝑩 −𝟏 ∗𝒃= 0 2 0 ∗ 6 = 12
▪ MATLAB/OCTAVE 0 2 3 2 18
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
1 −𝑐 0 0
0 𝐴 𝐼 𝑏
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
El mismo razonamiento se aplica para despejar A:
A=[0 0; 0 1; 1 0]
Entonces A=inv(B_1)*A
−𝟏
1 0 1 0 0 1 0
𝐀= 𝑩 −𝟏 ∗𝑨= 0 2 0 ∗ 0 1 = 0 2
0 2 3 1 0 3 2
▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
Por ultimo, para despejar – 𝑐 aprovechamos que
1 −𝑐 0 0
𝑪𝑩 𝑩−𝟏 𝑨 − 𝑪 = 0 0 0 𝐴 𝐼 𝑏
𝑪𝑩 𝑩−𝟏 𝑨 − 𝑪 = 0 0
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
−𝒄 = 0 0 − 𝑪𝑩 𝑩−𝟏 𝑨 A=[0 0; 0 1; 1 0]
CB=[0 3/2 1]
1 0
−𝒄 = 0 0 − 0 3/2 1 . 0 2 C=[0 0]-(CB*inv(B_1))*A
3 2
−𝒄 = 0 0 − 3 5 = −3 −5
▪ MATLAB/OCTAVE
Tabla Simplex Óptima
format bank
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
B_1 = [1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
𝑍 1 0 0 0 3/2 1 36
A=[0 0; 0 1; 1 0]
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6 b= [2;6;2]
𝑥1 0 1 0 0 −1/3 1/3 2 CB = [0 3/2 1]
Tabla Simplex Inicial b = inv(B_1) * b
MATLAB
Problemas
lineales
MATLAB
linprog
MATLAB
TIPOS DE RESTRICCIONES:
RESTRICCIONES - ECUACIONES LINEALES
PROBLEMAS Restricción de desigualdad lineal (≤, ≥)
LINEALES Restricción de igualdad lineal (=)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
Sintaxis
x = linprog(f,A,b) x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
https://es.mathworks.com/help/opti x = linprog(f,A,b,Aeq,beq,lb,ub)
m/ug/linprog.html x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
MATLAB 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝟑
Sujeto a las restricciones
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐
RESTRICCIONES 𝒙𝟏 +
𝟒
≤𝟏
ECUACIONES 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
LINEALES 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
Debe cumplir el problema
𝒙𝟐 𝟏 que…
𝒙𝟏 + = 𝑨 ∗ 𝒙 ≤ 𝒃,
𝟒 𝟐 𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
•MATLAB https://es.mathworks.com/h 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
elp/optim/ug/linprog.html 𝟑
Sujeto a las restricciones
% Funcion objetivo 𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
𝒙𝟏 + ≤𝟏
𝟒
% Matriz de restricciones 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
% de desigualdad 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; 𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
% Vector de restricciones −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
b = [2 1 2 1 -1 2]; 𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐
% Ecuacion
Aeq = [1 1/4]; Sintaxis
beq = 1/2; x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
MATLAB 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝟑
Sujeto a las restricciones
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐
RESTRICCIONES
𝒙𝟏 + ≤𝟏
𝟒
ECUACIONES
𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
𝒙𝟏
LINEALES − − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐 Debe cumplir el problema
que…
−𝟏 ≤ 𝒙𝟏 ≤ −𝟏, 𝟓 𝑨 ∗ 𝒙 ≤ 𝒃,
𝑚𝑖𝑛 𝑇
−𝟎, 𝟓 ≤ 𝒙𝟐 ≤ 𝟏, 𝟐𝟓 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
𝒍𝒃 ≤ 𝒙 ≤ 𝒖𝒃,
▪MATLAB
https://es.mathworks.com/h 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
elp/optim/ug/linprog.html 𝟑
Sujeto a las restricciones
% Funcion objetivo
𝒙𝟏 + 𝒙 𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
% Matriz de restricciones 𝒙𝟏 +
𝟒
≤𝟏
% de desigualdad 𝒙𝟏 − 𝒙 𝟐 ≤ 𝟐
𝒙𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; − − 𝒙𝟐 ≤ 𝟏
𝟒
% Vector de restricciones −𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
b = [2 1 2 1 -1 2]; −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
% Ecuacion 𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐
Aeq = [1 1/4];
−𝟏 ≤ 𝒙𝟏 ≤ −𝟏, 𝟓
beq = 1/2;
% Limites −𝟎, 𝟓 ≤ 𝒙𝟐 ≤ 𝟏, 𝟐𝟓
lb = [-1,-0.5]; Sintaxis
x = linprog(f,A,b)
ub = [1.5,1.25];
x = linprog(f,A,b,Aeq,beq)
x0 = []; x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
▪MATLAB
https://es.mathworks.com/h
elp/optim/ug/linprog.html
options = optimoptions('linprog','Algorithm','dual-simplex');x =
linprog(f,A,b,Aeq,beq,lb,ub,x0, options)
linprog
Busca el mínimo de una función
Sintaxis
x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
▪MATLAB x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
Optimización a media escala
Linprog: es el método del conjunto activo y es así una variación del método
simplex, bien conocido para programación lineal. El algoritmo encuentra una
solución factible inicial por la solución de otro problema de programación lineal:
OCTAVE
OCTAVE
Optimización
Octave posee varias funciones para resolver problemas
lineales, no lineales y de programación cuadrática
• Programación no lineal
https://octave.org/doc/interpreter/Optimization.html#Optimization
OCTAVE
glpk
Busca el mínimo de un problema especificado
por
𝑨 ∗ 𝒙 = 𝒃,
𝑚𝑖𝑛 𝑇
PROBLEMAS 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ 𝑋 ≥ 0,
LINEALES
Puede resolver problemas
[ min | max] 𝐶′ ∗ 𝑥
Sujeto a
𝐴∗𝑥[=| ≤ | ≥]𝑏
𝑥 ≥ 𝐿𝐵
𝑥 ≤ 𝑈𝐵
glpk (F, A, b, lb, ub, ctype, vartype, sense, param)
OCTAVE
glpk
PROBLEMAS Busca el mínimo de una función
LINEALES Sintaxis
[xopt, fmin, errnum, extra] = glpk (c, A, b, lb,
ub, ctype, vartype, sense, param)
OCTAVE
Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)
PROBLEMAS
Parámetros de entrada
LINEALES c: Función para minimizar.
A: Matriz real de restricciones de desigualdad
lineales.
b: Vector real de restricciones de desigualdad
lineales.
OCTAVE
Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)
Parámetros de entrada
PROBLEMAS
LINEALES lb: Vector real de límites inferiores.
Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)
PROBLEMAS
LINEALES Parámetros de entrada
sense: Tipo de problema de maximización -1 y
minimización 1; por defecto 1.
𝟑𝒙𝟏 + 𝒙𝟐 = 𝟑
RESTRICCIONES 𝟒𝒙𝟏 + 𝟑𝒙𝟐 ≥ 𝟔
ECUACIONES
LINEALES 𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟒
𝑨 ∗ 𝒙 = 𝒃,
𝒙𝟏 , 𝒙𝟐 ≥ 𝟎 𝑚𝑖𝑛𝑓 𝑇 𝑥
𝒙 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ 𝑋 ≥ 0,
SCIPY
MATLAB
linprog
Busca el mínimo de un problema
especificado por
𝑨 ∗ 𝒙 ≤ 𝒃,
PROBLEMAS 𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
LINEALES 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
linprog 𝑨 ∗ 𝒙 ≤ 𝒃,
𝑚𝑖𝑛 𝑇
Puede resolver problemas 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
lineales de la siguientes forma: 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑥
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏 x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
𝒇,
𝑙≤𝑥≤𝑢
𝒙,
Dimensión: 𝒃,
𝑐: 𝑛 ∗ 1 𝒃𝒆𝒒,
𝑏𝑢𝑏 : 𝑚 ∗ 1 𝒍𝒃,
𝑏𝑒𝑞 : 𝑘 ∗ 1 𝑙: 𝑛 ∗ 1 𝒖𝒃,
𝑢: 𝑛 ∗ 1 𝒔𝒐𝒏 𝒗𝒆𝒄𝒕𝒐𝒓𝒆𝒔
𝐴𝑒𝑞 : 𝑘 ∗ 𝑛 𝑦
𝐴𝑢𝑏 : 𝑚 ∗ 𝑛 𝐴 𝑦 𝐴𝑒𝑞 𝑠𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑐𝑒𝑠
https://docs.scipy.org/doc/scipy-
▪Scipy.optimize.linprog
0.18.1/reference/generated/scip
y.optimize.linprog.html#scipy.o
ptimize.linprog
Maximize
3𝑥1 + 2𝑥2
Sujeto a
2𝑥1 + 1𝑥2 ≤ 10
5𝑥1 + 6𝑥2 ≥ 4
−3𝑥1 + 7𝑥2 = 8
Minimize
−(𝟑𝒙𝟏 + 𝟐𝒙𝟐 )
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
Sujeto a
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
2𝑥1 + 1𝑥2 ≤ 10
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
−3𝑥1 + 7𝑥2 = 8
▪Scipy.optimize.linprog𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏 Maximize
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞 3𝑥1 + 2𝑥2
Programacion_lineal_SCIPY_lingprog EJ 1.py Sujeto a
from scipy.optimize import linprog 2𝑥1 + 1𝑥2 ≤ 10
5𝑥1 + 6𝑥2 ≥ 4
c=[-3,-2] −3𝑥1 + 7𝑥2 = 8
A_ub=[[2,1],[-5,-6]] −𝟏 ∗ 5𝑥1 + −𝟏 ∗ 6𝑥2 ≥ −𝟏 ∗ 4
b_ub=[10,-4] Minimize
A_eq=[[-3,7]] −𝟑𝒙𝟏 ± 𝟐𝒙𝟐
b_eq=[8]
Sujeto a
res=linprog(c,A_ub,b_ub,A_eq,b_eq)
2𝑥1 + 1𝑥2 ≤ 10
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
print(res) −3𝑥1 + 7𝑥2 = 8
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 1.py
Maximize
from scipy.optimize import linprog 3𝑥1 + 2𝑥2
Sujeto a
c=[-3,-2]
−𝟏 ∗ 3𝑥1 + −𝟏 ∗ 2𝑥2
2𝑥1 + 1𝑥2 ≤ 10
A_ub=[[2,1],[-5,-6]] 5𝑥1 + 6𝑥2 ≥ 4
b_ub=[10,-4] 𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋 −3𝑥1 + 7𝑥2 = 8
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
Minimize
A_eq=[[-3,7]]
b_eq=[8] 𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
−𝟑𝒙𝟏 ± 𝟐𝒙𝟐
res=linprog(c,A_ub,b_ub,A_eq,b_eq) Sujeto a
print(res) 2𝑥1 + 1𝑥2 ≤ 10
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
−3𝑥1 + 7𝑥2 = 8
En el caso que algunas de las restricciones sean del tipo ≥ y se
requiera ≤
multiplicamos por (-1) a la restricción del lado derecho y izquierdo
En el caso que tengamos una restricción del tipo = y requerimos que
sea del tipo ≤ o ≥ lo que deberíamos de hacer es simplemente
cambiarla a lo que requerimos es decir cambiarla a ≤ o ≥
import numpy as np
from scipy.optimize import linprog from scipy.optimize import linprog
c=[-3,-2]
c=np.array([-3,-2])
A_ub=[[2,1],[-5,-6]]
A_ub=np.array([[2,1],[-5,-6]])
b_ub=[10,-4]
b_ub=np.array([10,-4]) A_eq=[[-3,7]]
A_eq=np.array([[-3,7]]) b_eq=[8]
b_eq=np.array([8])
res=linprog(c,A_ub,b_ub,A_eq,b_eq)
res=linprog(c=c, A_ub=A_ub, b_ub=b_ub, print(res)
A_eq=A_eq, b_eq=b_eq)
print(res)
▪Scipy.optimize.linprog
TOYCO ensambla tres tipos de juguetes: trenes, camiones y autos, realizando tres operaciones. Los tipos
de ensamble disponibles para las tres operaciones son 430, 460 y 420 minutos por día, y los ingresos
por tren, camión y auto de juguetes son $3, $2 y $5, respectivamente. Los tiempos de ensamble por tres
para las tres operaciones son 1,3 y 1 minutos, respectivamente. Los tiempos correspondientes por camión
y por auto son (2,0,4) y (1,2,0) minutos (un tiempo cero indica que la operación no se utiliza).
Sean las cantidades diarias de unidades ensambladas de trenes, camiones y carros el modelo de
programación lineal asociado y su dual se dan como sigue:
Primal de TOYCO
Maximizar z = 3𝑥1 + 2𝑥2 + 5𝑥3
Sujeto a
𝑥1 + 2𝑥2 + 𝑥3 ≤ 430 (Operación 1)
3𝑥1 + 2𝑥3 ≤ 460 (Operación 2)
𝑥1 + 4𝑥2 ≤ 420 (Operación 3)
𝑥1 , 𝑥2 , 𝑥3 , ≥ 0
Solución optima:
𝑥1 = 0, 𝑥2 = 100, 𝑥3 = 230, 𝑧 = $1350
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 3.py
Primal de TOYCO
from scipy.optimize import linprog
Maximizar z = 3𝑥1 + 2𝑥2 + 5𝑥3
c= [-3,-2,-5] Sujeto a
A_ub=[[1,2,1],[3,0,2],[1,4,0]] 𝑥1 + 2𝑥2 + 𝑥3 ≤ 430 (Operación 1)
b_ub=[430,460,420] 3𝑥1 + 2𝑥3 ≤ 460 (Operación 2)
𝑥1 + 4𝑥2 ≤ 420 (Operación 3)
res=linprog(c,A_ub,b_ub) 𝑥1 , 𝑥2 , 𝑥3 , ≥ 0
Solución optima:
print(res) 𝑥1 = 0, 𝑥2 = 100, 𝑥3 = 230,
𝑧 = $1350
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
Problemas
lineales
Python
Graficas
▪Scipy.optimize.linprog (METODO GRAFICO)
C&K Confecciona dos tipos de productos como ser; bolso de mano y mochilas. Los cuales
tienen un costo de venta de $ 2220 y $ 4500, respectivamente. Para la fabricación de
estos productos la empresa requiere cuero, tiempo de costura y tiempo de acabado.
Hallar los valores óptimos para maximizar la producción de las bolsos y las
mochilas respectivamente.
▪Scipy.optimize.linprog (MÉTODO GRAFICO)
Bolso Mochila
Disponibilidad
recursos
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
▪Scipy.optimize.linprog
#Graficar restricciones
x1 = np.linspace(0, 60, 10000)
plt.plot(x1, (42 - x1)/3, label='x1 + 3x2 <= 42')
plt.plot(x1, (40 - x1)/2, label='x1 + 2x2 <= 40')
plt.plot(x1, (15 - 0.5*x1)/1, label='0.5x1 + x2 <= 15')
# Configuraciones de la grafica
plt.xlim(x1_bounds)
plt.ylim(x2_bounds)
plt.xlabel('Cant bolsos de mano')
plt.ylabel('Cant mochilas')
plt.legend()
▪Scipy.optimize.linprog
#Encontrar el vértice óptimo
c = np.array([-2200, -4500])
res = linprog(c, A_ub=A, b_ub=b, bounds=(x1_bounds, x2_bounds), method='simplex')