#------------ parametri --------------------- param n integer > 0; # numero di tipi di auto param ore{i in 1..n} >= 0; # ore[i] = ore di lavorazione necessarie per produrre un'auto del tipo i param acciaio{i in 1..n} >= 0; # acciaio[i] = numero di tonnellate di acciaio necessarie per produrre un'auto del tipo i param OreDisp >= 0; # numero di ore disponibili param AcciaioDisp >= 0; # tonnellate di acciaio disponibili param profitto{i in 1..n} >= 0; # profitto[i] = profitto ottenuto dalla produzione di un'auto del tipo i param ProdMin > 0; # produzione minima di ogni tipo di auto nel caso in cui venga avviata la produzione #------------- variabili ------------------- var x{i in 1..n} >= 0 integer; # x[i] = numero di auto del tipo i prodotte var y{i in 1..n} binary; # y[i] = 1 se viene avviata la produzione di auto del tipo i #------------- funzione obiettivo ------------------- maximize ProfittoTotale: sum{i in 1..n} profitto[i]*x[i]; #------------- vincoli ------------------- s.t. VincoloOre: sum{i in 1..n} ore[i]*x[i] <= OreDisp; s.t. VincoloAcciaio: sum{i in 1..n} acciaio[i]*x[i] <= AcciaioDisp; s.t. Vincoliubx{i in 1..n}: x[i] <= y[i]*OreDisp/ore[i]; s.t. Vincolilbx{i in 1..n}: x[i] >= ProdMin*y[i];