Maximiza la rentabilidad de tu negocio: Cómo optimizar la selección de proveedores de mercancías.

Clustering

Imagina que tienes una empresa y estás buscando la combinación perfecta de proveedores para maximizar tu utilidad total. Suena interesante, ¿verdad? Bueno, aquí está la cosa: tienes varios proveedores con diferentes precios, costos y capacidades. Y no, no es solo encontrar el más barato. ¡Hay un montón de restricciones emocionantes que hacen que este juego sea más desafiante!

supplier

Primero, el costo total de tus compras no puede explotar tu presupuesto. Lógico, ¿verdad? Además, no puedes cargar a un proveedor con más de lo que puede manejar, ni puedes seleccionar a un ejército de proveedores (aunque eso sería genial). Y espera, ¡hay más! Debes respetar la cantidad mínima que cada proveedor está pidiendo.

Aquí es donde entra en escena la magia de las variables de decisión. Con estas bellezas, llamadas X_i y Y_i, vamos a jugar al juego de encontrar la combinación perfecta de proveedores y la cantidad justa de productos o servicios de cada uno. ¿Por qué? ¡Porque queremos maximizar esa utilidad total!

  • - Variables binarias `X_i`: Indican si se selecciona o no al proveedor `i`.
  • - Variables enteras `Y_i`: Representan la cantidad de productos o servicios que se adquieren al proveedor `i`.

¿El objetivo final? Tomar decisiones inteligentes que no solo optimicen tu selección de proveedores, sino que también te ayuden a alcanzar esa máxima utilidad.

Resolver este problema de programación lineal permitirá a la empresa tomar decisiones informadas y eficientes en la selección de proveedores, maximizando su utilidad en el proceso de adquisición de productos o servicios.

En la gestión de proveedores, tomar decisiones acertadas es esencial para maximizar la rentabilidad de tu negocio. En esta entrada de blog, exploraremos cómo optimizar la selección de proveedores para aumentar tu utilidad total. Utilizaremos variables de decisión y una función objetivo para lograr este objetivo.

Modelo
            
            Variables de decisión:
        	Xi: Variable binaria que indica si se selecciona o no al proveedor "i".
        	Yi: Variable que representa la cantidad de productos o servicios que se adquieren del proveedor "i".
          
        	Función objetivo:
        	Maximizar: Utilidad Total = Σ (Precio Venta_i - Costo_i) * Yi
          
        	Restricciones:
        	- Restricción de presupuesto: Σ Costo_i * Yi ≤ Presupuesto Total
        	- Restricciones de capacidad: Yi ≤ Capacidad_i * Xi, ∀ i
        	- Restricciones de selección de proveedores: Σ Xi ≤ Num Max Proveedores
        	- Restricciones de demanda: Demanda_i ≥ Yi, ∀ i
        	- Restricciones binarias: Xi ∈ {0, 1}, ∀ i
        	- Restricciones de no negatividad: Yi ≥ 0, ∀ i
            
            

Para garantizar que nuestras decisiones sean viables, debemos tener en cuenta algunas restricciones importantes:

  1. Primero, asegurémonos de que nuestro presupuesto no se escape como un velocista en una carrera. No queremos que el costo total de nuestros caprichos proveedoriles supere nuestro presupuesto. Además, vamos a ser considerados y no sobrecargar a ningún proveedor; respetemos sus capacidades, ¿de acuerdo?
  2. También tenemos un límite en el número de proveedores que podemos invitar a nuestra fiesta de adquisiciones. Y claro, no podemos ignorar las demandas. Sería como pedir un café y que te sirvan un océano.
  3. Ah, y nuestras variables de selección tienen reglas: son como interruptores de luz, solo pueden estar prendidos (1) o apagados (0). Y como si fuera poco, las cantidades adquiridas deben ser como el optimismo: siempre mayor o igual a cero.

Con todas estas reglas en mente, estamos listos para el gran espectáculo: la selección de proveedores que hará que tu utilidad total se dispare hacia las estrellas. En las secciones próximas, vamos a desmenuzar cada una de estas etapas. Prepárate para recibir consejos prácticos que transformarán tu enfoque en la gestión de proveedores. ¡No te desconectes, esta aventura va a estar genial!

Explicación detallada del código de Python

Exploraremos un código en Python que utiliza la biblioteca PuLP para resolver un problema de maximización en la elección de proveedores. Prepárense para sumergirse en un océano de variables, restricciones y una función objetivo emocionante.

Antes de sumergirnos en el código, permítanme explicarles qué está sucediendo aquí. El objetivo de este problema es seleccionar los proveedores óptimos para maximizar la utilidad total, teniendo en cuenta restricciones como el presupuesto, la capacidad y la demanda. Vamos a desglosar este código paso a paso para que puedan entenderlo a fondo.

    
    from pulp import *
    
    

Para comenzar, importamos la biblioteca PuLP, que nos brinda una interfaz fácil de usar para resolver problemas de optimización lineal.

    
    prob = LpProblem("Problema de selección de proveedores", LpMaximize)
    
    

Aquí creamos nuestro problema de maximización y le damos un nombre descriptivo: "Problema de selección de proveedores". Queremos maximizar la utilidad total, por lo que establecemos el objetivo en "LpMaximize".

    
    proveedores = ["Proveedor1", "Proveedor2", "Proveedor3"]
    Xi = LpVariable.dicts("X", proveedores, 0, 1, LpBinary)
	Yi = LpVariable.dicts("Y", proveedores, lowBound=0, cat='Integer')
    
    

Definimos nuestros proveedores como una lista de nombres. A continuación, creamos las variables de decisión: "Xi" es una variable binaria que indica si seleccionamos o no a cada proveedor, mientras que "Yi" es una variable que representa la cantidad de productos o servicios que adquirimos de cada proveedor. Establecemos los límites y tipos de variables adecuados para cada una.

    
	parametros = {
    "Proveedor1": {"costo": 10, "precio_venta": 20, "capacidad": 100},
    "Proveedor2": {"costo": 15, "precio_venta": 25, "capacidad": 150},
    "Proveedor3": {"costo": 12, "precio_venta": 18, "capacidad": 120}
	}
	demanda = 150
	presupuesto_total = 2000
	num_max_proveedores = 2
	
	

Aquí definimos nuestros parámetros específicos para cada proveedor, como el costo, el precio de venta y la capacidad. También establecemos la demanda deseada, el presupuesto total disponible y el número máximo de proveedores que podemos seleccionar.

    
	prob += lpSum([(parametros[i]["precio_venta"] - parametros[i]["costo"]) * Yi[i] for i in proveedores]), "Utilidad_Total"
	
	

Establecemos nuestra función objetivo: maximizar la utilidad total. Utilizamos la función "lpSum" para calcular la suma ponderada de la diferencia entre el precio de venta y el costo de los productos o servicios adquiridos de cada proveedor.

    
	prob += lpSum([parametros[i]["costo"] * Yi[i] for i in proveedores]) <= presupuesto_total """Restriccion_Presupuesto"""
    
	

Agregamos la restricción de presupuesto: el costo total de los productos o servicios adquiridos a cada proveedor no puede exceder el presupuesto total establecido

    
	for i in proveedores:
    	prob += Yi[i] <= parametros[i]["capacidad"] * Xi[i], f"Restriccion_Capacidad_{i}"
  
  

A continuación, establecemos las restricciones de capacidad: la cantidad adquirida de cada proveedor no puede exceder su capacidad, multiplicada por la variable binaria de selección correspondiente.

      
  prob += lpSum([Xi[i] for i in proveedores]) <= num_max_proveedores, "Restriccion_Seleccion_Proveedores"
  
  

Agregamos la restricción de selección de proveedores: el número total de proveedores seleccionados no puede exceder el número máximo permitido.

      
  prob += lpSum([Yi[i] for i in proveedores]) >= demanda, "Restriccion_Demanda"
  
  

Establecemos la restricción de demanda: la cantidad total adquirida de todos los proveedores debe ser mayor o igual a la demanda establecida.

      
  for i in proveedores:
      prob += Yi[i] >= 0, f"Restriccion_No_Negatividad_{i}"
  
  

Agregamos la restricción de no negatividad: la cantidad adquirida de cada proveedor debe ser mayor o igual a cero.

      
  prob.solve()
  
  

Finalmente, resolvemos el problema llamando al método "solve()" del objeto "prob".

      
  print("Estado de la solución:", LpStatus[prob.status])
  
  

Imprimimos el estado de la solución para verificar si se encontró una solución óptima.

      
  for v in prob.variables():
      print(v.name, "=", v.varValue)
  
  

Imprimimos las variables de decisión y sus valores óptimos.

      
  utilidad_total = sum([(parametros[i]["precio_venta"] - parametros[i]["costo"]) * value(Yi[i]) for i in proveedores])
  print("Utilidad Total =", utilidad_total)
  
  

Calculamos y mostramos la utilidad total obtenida utilizando los valores óptimos de las variables de decisión.

¡Y ahí lo tienen! Con este código, podemos maximizar nuestra utilidad total al seleccionar los proveedores óptimos que cumplan con nuestras restricciones. Ahora tienen todas las herramientas necesarias para adentrarse en el emocionante campo de la optimización de selección de proveedores. ¡Disfruten explorando y maximizando sus beneficios!


Pongamos todas las piezas del rompecabezas juntas

Eureka hay una solución óptima!

Después de aplicar nuestra astuta estrategia y utilizar la poderosa librería pulp en Python, hemos encontrado una solución óptima para maximizar nuestra utilidad total. ¡Los tambores ruedan y las trompetas suenan mientras revelamos los resultados!

    Estado de la solución: Optimal
    X_Proveedor1 = 1.0
    X_Proveedor2 = 1.0
    X_Proveedor3 = 0.0
    Y_Proveedor1 = 100.0
    Y_Proveedor2 = 66.0
    Y_Proveedor3 = 0.0

Ahora, hablemos de las decisiones sabias que hemos tomado. ¡Tomen asiento y escuchen con atención!

Hemos seleccionado al Proveedor1 y al Proveedor2 para asegurarnos de que obtengamos los productos y servicios que necesitamos para nuestro negocio en la máxima medida posible. ¡Dos proveedores llenos de potencial y oportunidades!

Aquí viene la parte emocionante. Nuestro amigo Proveedor1 ha sido seleccionado y nos brindará su maravillosa oferta. ¡Un aplauso para él! Hemos decidido adquirir 100 unidades de sus productos o servicios. ¡Esperamos con ansias esa entrega!

Pero eso no es todo. Nuestro compañero Proveedor2 también ha logrado asegurarse un lugar en nuestro equipo ganador. Le pediremos con gusto 66 unidades de sus valiosos productos o servicios. ¡Estamos listos para recibirlos con los brazos abiertos!

Por otro lado, el Proveedor3, aunque con potencial, no ha sido seleccionado en esta ocasión. ¡Lo sentimos, Proveedor3! Pero no te preocupes, siempre hay oportunidades en el futuro.

Ahora, la pregunta más importante: ¿Cuánta utilidad total hemos logrado con esta selección maestra? ¡Sostengan sus respiraciones! Nuestra utilidad total alcanza la cifra impresionante de 1660.0 unidades monetarias. ¡Sí, lo has escuchado bien! Estamos un paso más cerca de alcanzar nuestros objetivos financieros y maximizar nuestras ganancias.

Así que ahí lo tienen, queridos lectores. Con astucia y un poco de diversión, hemos resuelto nuestro problema de selección de proveedores y alcanzado una solución óptima que nos brinda una gran utilidad. ¡Celebren y disfruten de los frutos de nuestro trabajo!

Recuerden, la optimización puede ser desafiante, pero también es emocionante y gratificante. Sigan explorando y buscando las mejores soluciones para sus propios desafíos empresariales. ¡Hasta la próxima aventura de optimización! 🚀

Entradas populares de este blog

Cómo Equilibrar Múltiples Productos con Pedidos a la Medida

"Descubriendo el Poder de los Modelos de Clasificación en Machine Learning: Predicciones Precisas y Clasificaciones Sorprendentes"

Domina tu Almacén sin arruinarte: El Juego del Modelo de Inventario Múltiproductos con Presupuesto ajustado

¡Plan Desagregado de Producción como un jefe!

Optimización del Inventario Multiproducto en Espacios Reducidos: Una guía para la eficiencia en gestión de stocks

El Desafío del Empaque en Contenedores: Optimizando Espacios en contenedores con Ingenio

¡Optimización de Portafolios de Productos: El arte de maximizar el éxito!"