Descripción de los modelos

Este notebook en R implementa una simulación estocástica para modelar el comportamiento diario de un sistema de producción y distribución de botellas de agua durante 10 días. Se evalúa cómo varían la producción, la demanda, las ventas y el stock del Centro de Distribución (CDC) a lo largo del tiempo.

El modelo simula una situación realista en la que:

Objetivo los modelos

El objetivo principal es estudiar cómo se comporta el sistema bajo condiciones de incertidumbre en la producción y demanda, observando:

Desarrollo del modelo 1

  1. Inicialización general: Se establece una semilla para garantizar la reproducibilidad de los números aleatorios generados en cada ejecución del código. Se configuran los parámetros iniciales del modelo:
-    1 unidad de B1 (botellas vacias)

-    1 unidad de B2 (tapas) por botella

-    50 ml de B3 (agua purificada) por botella
set.seed(123)

# Parámetros iniciales
dias <- 7
produccion_diaria <- 140
stock_cdc <- 0
inventario_tiendas <- c(0, 0, 0)
insumos <- c(B1 = 5000, B2 = 5000, B3 = 150000)
  1. Iteración diaria: Comienza el ciclo for que recorre los días desde 1 hasta 7. Cada iteración representa una jornada de producción, despacho y ventas.
  2. Generación de demanda por tienda: Se genera una demanda aleatoria entre 30 y 50 botellas para cada una de las 3 tiendas. Se calcula el total de demanda agregada del día y el consumo de insumos para la producción.
  3. Verificacion de disponibilidad de consumos:
  1. Estado del CDC, simulacion de clientes por tienda: Proceso de despacho y venta por tienda. Se simula el número de clientes por tienda, donde cada uno tendrá como mínimo 20 y como máximo el valor de la demanda de la tienda correspondiente
for (dia in 1:dias) {
  cat(paste0("DÍA ", dia, "\n------------------\n"))
  
  # Generar demanda por tienda
  demanda <- sample(30:50, 3)
  total_demanda <- sum(demanda)
  
  # Producción del día (puede ser ajustada si deseas variarla por día)
  prod <- produccion_diaria
  insumos_usados <- c(B1 = prod, B2 = prod, B3 = prod * 50)
  
  # Verificar disponibilidad de insumos
  if (all(insumos - insumos_usados >= 0)) {
    insumos <- insumos - insumos_usados
    stock_cdc <- stock_cdc + prod - total_demanda  # ← Stock acumulado correctamente
    cat("Producción:", prod, "botellas\n")
  } else {
    cat("No hay suficientes insumos para producir.\n")
    prod <- 0
  }
  
  # Mostrar insumos restantes
  cat("Insumos restantes - B1:", insumos["B1"], 
      " B2:", insumos["B2"], 
      " B3:", insumos["B3"], "ml\n")
  
  cat("Stock en CDC:", stock_cdc, "\n")
  
  # Clientes por tienda
  clientes <- mapply(function(d) sample(20:d, 1), demanda)
  
  for (i in 1:3) {
    despacho <- demanda[i]  # Despacho igual a la demanda
    vendido <- max(clientes[i], sample(clientes[i]:despacho, 1))  # Vendido ≥ clientes, ≤ despacho
    
    # Inventario final = Demanda - Vendido (nunca negativo)
    inventario_final <- max(0, demanda[i] - vendido)
    
    cat(paste0("Tienda ", i, 
               " - Demanda: ", demanda[i], 
               " | Clientes: ", clientes[i], 
               " → Despacho: ", despacho, 
               " - Vendido en tienda: ", vendido, 
               " | Inventario final: ", inventario_final, "\n"))
  }
  
  cat("\n")
}
## DÍA 1
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4860  B2: 4860  B3: 143000 ml
## Stock en CDC: 5 
## Tienda 1 - Demanda: 44 | Clientes: 22 → Despacho: 44 - Vendido en tienda: 43 | Inventario final: 1
## Tienda 2 - Demanda: 48 | Clientes: 29 → Despacho: 48 - Vendido en tienda: 39 | Inventario final: 9
## Tienda 3 - Demanda: 43 | Clientes: 37 → Despacho: 43 - Vendido en tienda: 41 | Inventario final: 2
## 
## DÍA 2
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4720  B2: 4720  B3: 136000 ml
## Stock en CDC: 19 
## Tienda 1 - Demanda: 49 | Clientes: 38 → Despacho: 49 - Vendido en tienda: 40 | Inventario final: 9
## Tienda 2 - Demanda: 43 | Clientes: 28 → Despacho: 43 - Vendido en tienda: 35 | Inventario final: 8
## Tienda 3 - Demanda: 34 | Clientes: 32 → Despacho: 34 - Vendido en tienda: 33 | Inventario final: 1
## 
## DÍA 3
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4580  B2: 4580  B3: 129000 ml
## Stock en CDC: 46 
## Tienda 1 - Demanda: 36 | Clientes: 23 → Despacho: 36 - Vendido en tienda: 33 | Inventario final: 3
## Tienda 2 - Demanda: 39 | Clientes: 33 → Despacho: 39 - Vendido en tienda: 39 | Inventario final: 0
## Tienda 3 - Demanda: 38 | Clientes: 36 → Despacho: 38 - Vendido en tienda: 36 | Inventario final: 2
## 
## DÍA 4
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4440  B2: 4440  B3: 122000 ml
## Stock en CDC: 62 
## Tienda 1 - Demanda: 41 | Clientes: 32 → Despacho: 41 - Vendido en tienda: 40 | Inventario final: 1
## Tienda 2 - Demanda: 44 | Clientes: 26 → Despacho: 44 - Vendido en tienda: 35 | Inventario final: 9
## Tienda 3 - Demanda: 39 | Clientes: 28 → Despacho: 39 - Vendido en tienda: 34 | Inventario final: 5
## 
## DÍA 5
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4300  B2: 4300  B3: 115000 ml
## Stock en CDC: 81 
## Tienda 1 - Demanda: 50 | Clientes: 44 → Despacho: 50 - Vendido en tienda: 48 | Inventario final: 2
## Tienda 2 - Demanda: 36 | Clientes: 21 → Despacho: 36 - Vendido en tienda: 28 | Inventario final: 8
## Tienda 3 - Demanda: 35 | Clientes: 32 → Despacho: 35 - Vendido en tienda: 35 | Inventario final: 0
## 
## DÍA 6
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4160  B2: 4160  B3: 108000 ml
## Stock en CDC: 102 
## Tienda 1 - Demanda: 42 | Clientes: 25 → Despacho: 42 - Vendido en tienda: 39 | Inventario final: 3
## Tienda 2 - Demanda: 47 | Clientes: 40 → Despacho: 47 - Vendido en tienda: 41 | Inventario final: 6
## Tienda 3 - Demanda: 30 | Clientes: 28 → Despacho: 30 - Vendido en tienda: 30 | Inventario final: 0
## 
## DÍA 7
## ------------------
## Producción: 140 botellas
## Insumos restantes - B1: 4020  B2: 4020  B3: 101000 ml
## Stock en CDC: 113 
## Tienda 1 - Demanda: 45 | Clientes: 30 → Despacho: 45 - Vendido en tienda: 35 | Inventario final: 10
## Tienda 2 - Demanda: 49 | Clientes: 27 → Despacho: 49 - Vendido en tienda: 33 | Inventario final: 16
## Tienda 3 - Demanda: 35 | Clientes: 25 → Despacho: 35 - Vendido en tienda: 25 | Inventario final: 10

Desarrollo del modelo 2

  1. Inicialización de los vectores: Se definen los días de simulación (n_dias) y se inicializan los vectores necesarios para almacenar la información diaria: demanda, producción, inventario y stock.
    • demanda: vector que contendrá la demanda diaria simulada (usamos distribución Poisson).

    • produccion_diaria_1 y produccion_diaria_2: representan dos posibles niveles de producción por día.

    • inventario: registra el número de productos disponibles cada día.

    • stock: almacena el stock restante acumulado al final de cada día.

set.seed(123)  # Para reproducibilidad

# Parámetros
dias <- 10
stock_inicial <- 0
stock <- stock_inicial

# Crear vectores
produccion <- numeric(dias)
demanda <- numeric(dias)
stock_inicial_dia <- numeric(dias)
stock_usado <- numeric(dias)
ventas <- numeric(dias)
stock_final <- numeric(dias)
  1. Simulación del proceso día por día: Se utiliza un bucle for para simular cada día:
    • El primer día no tiene stock inicial.

    • Se ajusta la producción diaria en función de la demanda anterior.

    • Se calcula el stock disponible, las ventas reales (limitadas por stock + producción), y los productos faltantes si no se logra cubrir toda la demanda.

    • Se guarda el stock restante para el siguiente día.

for (dia in 1:dias) {
  
  # Producción aleatoria diaria entre 80 y 120 unidades
  produccion[dia] <- sample(80:120, 1)
  
  # Demanda aleatoria diaria entre 90 y 130 unidades
  demanda[dia] <- sample(90:130, 1)
  
  # Guardar el stock antes de usarlo
  stock_inicial_dia[dia] <- stock
  
  # Total disponible = stock + producción
  disponible <- stock + produccion[dia]
  
  # Determinar ventas reales (no puede superar lo disponible)
  ventas[dia] <- min(disponible, demanda[dia])
  
  # Cuánto se usó del stock
  stock_usado[dia] <- min(stock, ventas[dia])
  
  # Actualizar stock final
  stock <- disponible - ventas[dia]
  stock_final[dia] <- stock
  
  # Mostrar resultados por día en formato deseado
  cat(paste0("DÍA ", dia, "\n------------------\n"))
  cat(paste0(
    "Producción: ", produccion[dia], " botellas\n",
    "Demanda: ", demanda[dia], 
    " | Stock inicial: ", stock_inicial_dia[dia], 
    " → Stock usado: ", stock_usado[dia], 
    " | Vendido: ", ventas[dia], 
    " | Stock final: ", stock_final[dia], "\n\n"
  ))
}
## DÍA 1
## ------------------
## Producción: 110 botellas
## Demanda: 104 | Stock inicial: 0 → Stock usado: 0 | Vendido: 104 | Stock final: 6
## 
## DÍA 2
## ------------------
## Producción: 93 botellas
## Demanda: 92 | Stock inicial: 6 → Stock usado: 6 | Vendido: 92 | Stock final: 7
## 
## DÍA 3
## ------------------
## Producción: 116 botellas
## Demanda: 103 | Stock inicial: 7 → Stock usado: 7 | Vendido: 103 | Stock final: 20
## 
## DÍA 4
## ------------------
## Producción: 104 botellas
## Demanda: 115 | Stock inicial: 20 → Stock usado: 20 | Vendido: 115 | Stock final: 9
## 
## DÍA 5
## ------------------
## Producción: 106 botellas
## Demanda: 94 | Stock inicial: 9 → Stock usado: 9 | Vendido: 94 | Stock final: 21
## 
## DÍA 6
## ------------------
## Producción: 106 botellas
## Demanda: 117 | Stock inicial: 21 → Stock usado: 21 | Vendido: 117 | Stock final: 10
## 
## DÍA 7
## ------------------
## Producción: 88 botellas
## Demanda: 118 | Stock inicial: 10 → Stock usado: 10 | Vendido: 98 | Stock final: 0
## 
## DÍA 8
## ------------------
## Producción: 114 botellas
## Demanda: 97 | Stock inicial: 0 → Stock usado: 0 | Vendido: 97 | Stock final: 17
## 
## DÍA 9
## ------------------
## Producción: 105 botellas
## Demanda: 96 | Stock inicial: 17 → Stock usado: 17 | Vendido: 96 | Stock final: 26
## 
## DÍA 10
## ------------------
## Producción: 88 botellas
## Demanda: 108 | Stock inicial: 26 → Stock usado: 26 | Vendido: 108 | Stock final: 6
  1. Resultados: Al finalizar, se muestra una tabla con los valores diarios de producción, demanda, ventas, stock y faltantes Se definen los insumos disponibles y el consumo de cada uno por botella producida. Se crean vectores vacíos para registrar los resultados diarios: Producción, Demanda, Stock inicial, Stock utilizado, Ventas, Stock final.
# Crear data frame para mostrar resultados
resultado <- data.frame(
  Día = 1:dias,
  Producción = produccion,
  Demanda = demanda,
  Stock_Inicial = stock_inicial_dia,
  Stock_Usado = stock_usado,
  Ventas = ventas,
  Stock_Final = stock_final
)

# Mostrar tabla
print(resultado)
##    Día Producción Demanda Stock_Inicial Stock_Usado Ventas Stock_Final
## 1    1        110     104             0           0    104           6
## 2    2         93      92             6           6     92           7
## 3    3        116     103             7           7    103          20
## 4    4        104     115            20          20    115           9
## 5    5        106      94             9           9     94          21
## 6    6        106     117            21          21    117          10
## 7    7         88     118            10          10     98           0
## 8    8        114      97             0           0     97          17
## 9    9        105      96            17          17     96          26
## 10  10         88     108            26          26    108           6
  1. Resumen:
# Mostrar resumen final
cat("\nResumen:\n")
## 
## Resumen:
cat("Stock inicial total en Centro de Distribucion:", stock_inicial, "\n")
## Stock inicial total en Centro de Distribucion: 0
cat("Stock final total en Centro de Distribucion:", stock, "\n")
## Stock final total en Centro de Distribucion: 6
cat("Total botellas de agua producidas:", sum(produccion), "\n")
## Total botellas de agua producidas: 1030
cat("Total botellas de agua demandadas en tiendas minoristas:", sum(demanda), "\n")
## Total botellas de agua demandadas en tiendas minoristas: 1044
cat("Total botellas de agua vendidas:", sum(ventas), "\n")
## Total botellas de agua vendidas: 1024