model Lavor_SA
    declarations
        ! Número de modelos de lavadoras
        MODELOS = 1..4

        ! Plantas de montaje
        PLANTAS = 1..2

        ! Tiempo disponible en cada planta (horas)
        TiempoDisponible: array(PLANTAS) of real := [2500, 3200]

        ! Tiempos de fabricación por modelo y planta (horas por unidad)
        Tiempo: array(PLANTAS, MODELOS) of real := 
        [ [3, 3.5, 5, 2.5],   ! Planta 1
          [2.8, 4, 4.5, 2] ]  ! Planta 2

        ! Costos de fabricación por modelo y planta (cientos de euros por unidad)
        Costo: array(PLANTAS, MODELOS) of real := 
        [ [3, 2.5, 5.2, 2.2], ! Planta 1
          [2.8, 2.3, 4.8, 2.1] ] ! Planta 2

        ! Precio de venta por modelo (cientos de euros por unidad)
        Precio: array(MODELOS) of real := [6.5, 7, 9.2, 5.2]

        ! Variables de decisión: cantidad de lavadoras producidas por modelo y planta
        x: array(PLANTAS, MODELOS) of mpvar
    end-declarations

    ! Función objetivo: maximizar el beneficio total
    Profit := sum(i in PLANTAS, j in MODELOS) (Precio(j) - Costo(i, j)) * x(i, j)
    maximize(Profit)

    ! Restricciones de capacidad en cada planta
    forall(i in PLANTAS) do
        sum(j in MODELOS) Tiempo(i, j) * x(i, j) <= TiempoDisponible(i)
    end-do

    ! Restricciones de no negatividad
    forall(i in PLANTAS, j in MODELOS) x(i, j) >= 0

end-model
