#------------ parametri --------------------- param n integer > 0 ; # numero di mesi di pianificazione param CostoProd{i in 1..n} >= 0 ; # CostoProd[i] = costo di produzione unitario nel mese i param CostoMag >= 0 ; # costo unitario di magazzino = CostoMag * costo unitario di produzione param domanda{i in 1..n} >= 0; # domanda[i] = domanda del mese i param ProdMax{i in 1..n} >= 0 ; # ProdMax[i] = produzione massima nel mese i param FattoreProdMin >= 0 ; # produzione minima nel mese i = FattoreProdMin * produzione massima nel mese i param MagInizio >= 0; # livello iniziale del magazzino param MagMin >= 0; # livello minimo del magazzino param MagMax >= 0; # capacità del magazzino #------------- variabili ------------------- var x{i in 1..n} >= 0 integer; # x[i] = numero di unità prodotte nel mese i var y{i in 1..n+1} >= 0 integer; # y[i] = numero di unità presenti in magazzino all'inizio del mese i #------------- funzione obiettivo ------------------ minimize CostoTot: sum{i in 1..n} (CostoProd[i]*x[i] + CostoMag*CostoProd[i]*(y[i]+y[i+1])/2 ) ; #------------- vincoli ------------------- s.t. vin_MaxProd{i in 1..n}: x[i] <= ProdMax[i] ; s.t. vin_MinProd{i in 1..n}: x[i] >= FattoreProdMin*ProdMax[i] ; s.t. vin_LivMag1: y[1] = MagInizio ; s.t. vin_LivMag{i in 2..n+1}: y[i] = y[i-1] + x[i-1] - domanda[i-1]; s.t. vin_MinMag{i in 2..n+1}: y[i] >= MagMin ; s.t. vin_MaxMag{i in 2..n+1}: y[i] <= MagMax ;