Python Language
Programming
Optimization & Logistics
1
Python Language Programming
Optimization & Logistics
Marco A. Pinto Orellana
marcoapintoo@[Link]
2
Outline
1. Introducción al lenguaje Python:
1. Tipos de datos
2. Estructuras de control
3. Vectores y matrices
4. Clases y objetos?
2. Optimización aplicada a logística:
3
Outline
2. Optimización aplicada a logística:
1. Modelos matemáticos
2. Problema de los dos hospitales
3. Problema de las p-medianas
4. Problema del cajero viajant
5. Problema de ruteamiento de vehículos
3. Q & A
4
¿Qué es Python?
Python es un lenguaje de programación de alto nivel: Podemos
escribir programas de forma que no nos preocupamos con el
hardware o con configuraciones específicas del computador.
Python es un lenguaje interpretado: No necesitaremos "compilar" el
programa cada que vayamos a ejecutarlo.
Python es un lenguaje orientado a objetos.
5
Instalación de Anaconda
En este tutorial vamos a usar Python 3.8
(aunque cualquier versión mayor a 3.2 será util)
Anaconda 3.8
[Link]
Windows-x86_64.exe
Descripción paso a paso
[Link]
6
Modelo de Wilson
2Cp V
Q=
Ca
Ca : Costo de mantener cada unidad
Cp : Costo de un pedido
V : Ventas o demanda
Q: Tamaño óptimo de pedido
7
Modelo de Wilson
2Cp V
Q=
Ca
# Modelo de Wilson de Gestión de almacenes:
Ca = 10 #coste de mantener cada unidad
Cp = 2 #coste de un pedido
V = 4 #ventas o demanda
Q = (Cp * V * 2 / Ca) ** 0.5 #Tamano optimo de pedido
print("El tamano optimo es:", Q)
8
Variables
Son espacios de memoria donde se almacenan algún valor
x = 42
print(x) #"print" nos muestra el resultado en pantalla.
Pueden modificarse durante la ejecución del programa:
x = 42
x = 3
print(x)
9
Operaciones
a = 7
b = 43
x4 = a // 2 # División entera
# Cuál es la diferencia entre "/" y "//"?
print(x4)
x5 = a ** 2 # Potenciación: a al cuadrado
print(x5)
x_6 = b ** 0.5 # Potenciación: raíz cuadrada de b
print(x_6)
x_7 = b ** a # Potenciación: b elevado a la "a"
print(x_7)
10
Operaciones (cont.)
a = 7
b = 43
x4 = a // 2 # División entera
# Cuál es la diferencia entre "/" y "//"?
print(x4)
x5 = a ** 2 # Potenciación: a al cuadrado
print(x5)
x_6 = b ** 0.5 # Potenciación: raíz cuadrada de b
print(x_6)
x_7 = b ** a # Potenciación: b elevado a la "a"
print(x_7)
11
Tipos de datos
nombre = "Jorge Antonio" #Tipo: cadena de caracteres: str
edad = 25 #Tipo: valor entero: int
altura = 1.75 #Tipo: valor real: float
num_imaginario = 1j #Tipo: valor complejos: complex
#... si, Python permite usar
# números imaginarios
print("Nombre:", nombre)
print("Edad:", edad)
print("Altura:", altura)
12
Indentación
Python reconoce los espacios al inicio de cada palabra
Este código funcionará perfectamente:
#Farenheit a Celcius
T_celcius = 26
T_farenheit = 9 / 5 * T_celcius
T_farenheit = T_farenheit + 32
print(T_celcius, "°C son", T_farenheit, "°F.")
13
Indentación
Sin embargo, si agregamos algunos espacios al inicio. El código deja
de funcionar:
#Farenheit a Celcius
T_celcius = 26
T_farenheit = 9 / 5 * T_celcius
T_farenheit = T_farenheit + 32
print(T_celcius, "°C son", T_farenheit, "°F.")
Al ejecutar el programa aparecerá un mensaje de "IndentationError:
unexpected indent" que significa que se encontró espacios adicionales
inesperados al inicio de una línea de código
14
Cadenas de escape
Existen ciertos tipos de cadenas que tienen un significado especial
para representar cosas como saltos de línea ("\n") y tabuladores ("\t")
entre otros. Estos símbolos se conocen como "cadenas de escape" y
en Python comienzan con un slash ("").
mensaje = 'Es\ta cadena \no saldrá en una sóla linea'
print(mensaje)
#Si queremos ver la barra, debemos reemplazar \ con \\
mensaje = 'Es\\ta cadena \\no saldrá en una sóla linea'
print(mensaje)
15
Precedencia de operadores
x = 3 + 12 / 6 - 2 ** 1
print(x)
x = 16 / 2 * 8
print(x)
16
Precedencia de operadores
El orden de prioridad es el siguiente:
1. Paréntesis
2. Potenciación,
3. Multiplicación/división,
4. Suma/resta.
Cuando dos operadores tienen la misma
prioridad (* y /), se resuelve la operación de izquierda a derecha.
17
Series finitas
x3 x5 x7 x9
sin (x) = x − + − +
6 120 5040 362880
x = 3.14159 * 0.5 # veremos el valor en 90°
sin_x = x
sin_x = sin_x - (x**3 / 6)
sin_x = sin_x + (x**5 / 120)
sin_x = sin_x - (x**7 / 5040)
sin_x = sin_x + (x**9 / 362880)
print("sin(",x,")=",sin_x)
18
Series finitas
1 2 1 3 1 4
ln(x) = x − 1 − ⋅ (x − 1) + ⋅ (x − 1) − ⋅ (x − 1)
2 3 4
x = 3.0 # Logaritmo neperiano de 3
logaritmo = 0
#Complete el código aquí
print("ln(",x,")=",logaritmo)
19
Librerías: import
#Nuestra aproximación
import math #Importamos la librería math
x = [Link] * 0.5 # Reemplazamos 3.14159 con [Link]
sin_x = x
sin_x = sin_x - (x**3 / 6)
sin_x = sin_x + (x**5 / 120)
sin_x = sin_x - (x**7 / 5040)
sin_x = sin_x + (x**9 / 362880)
print("sin_approx(",x,")=",sin_x)
#Ahora la versión de Python
sin_x = [Link](x)
print("sin_py(",x,")=",sin_x)
20
Batteries included
[Link]
21
Funciones
¿Cómo encapsular el modelo de Wilson?
# Modelo de Wilson de Gestión de almacenes:
Ca = 10 #coste de mantener cada unidad
Cp = 2 #coste de un pedido
V = 4 #ventas o demanda
Q = (Cp * V * 2 / Ca) ** 0.5 #Tamano optimo de pedido
print("El tamano optimo es:", Q)
22
Funciones
def modelo_wilson(Ca, Cp, V): #Definición de la función
Q = (Cp * V * 2 / Ca) ** 0.5 #Tamano optimo de pedido
print("El tamano optimo del caso 1 es:", Q)
#Como usamos la función?
modelo_wilson(10, 2, 4) # Podemos llamar a la función
# usando los parámetros
modelo_wilson(Ca=20, Cp=5, V=15) # Podemos llamar a la
# función usando los nombres de
# los parámetros.
23
Estructuras de datos: list
x1 = 1
x2 = 2
x3 = 3
x = [1, 2, 3]
24
Estructuras de datos: tuple
x = [1, 2, 3]
y = (1, 2, 3)
print(x[0])
print(y[0])
x[0] = 1
print(x[0])
y[0] = 1
print(y[0])
25
Estructuras de datos: dict
x = {
"valor1": 1,
"valor2": 2,
"valor3": 3,
}
26
Estructuras de control: if
if [condicion]: #No olvidar los dos puntos
[comando 1] #Siempre 4 espacios más a la derecha para
[comando 2] # mostrar que el código está "dentro" de if
else: #No olvidar los dos puntos
[comando 1] #Siempre 4 espacios más a la derecha para
[comando 2] # mostrar que el código está "dentro" de if
27
Estructuras de control: while
while [condicion]: #No olvidar los dos puntos
[comando 1] #Siempre 4 espacios más a la derecha para
[comando 2] # mostrar que el código está "dentro" de while
28
Estructuras de control: for
for [variable] in [lista]: #No olvidar los dos puntos
[comando 1] #Siempre 4 espacios más a la derecha para
[comando 2] # mostrar que el código está "dentro" de while
29