set A ;      /* insieme delle attivitą */

param tmax;

set T:=1..tmax;

param tt{t in T}:=t;

set W within A ;    /* sottoinsieme di attivitą che lavorano su CAT */

set V within A;     /* sottoinsieme di attivitą che lavorano su CUS */



set CAP within A ;   /* sottoinsieme di attivitą incompatibili CAP */



set H within A ;   /* sottoinsieme di attivitą a configurazione manuale */

set I within A ;   /* sottoinsieme di attivitą manuali e/o con monitoraggio */

set TC within T ;  /* insieme di ore non lavorative */

param d{i in A} ;   /* durata attivitą */

param dW{i in W} ;

param dV{i in V} ;



param dCAP{i in CAP} ;

param rW{i in W} ;

param rV{i in V} ;

param r{i in A} ;   /* risorsa richiesta da ogni attivitą */

param R ;   /* risorsa complessiva sistema */

var  x{A,T} binary;  /* attivitą svolta in una determinata ora */

minimize z: sum{i in A, t in T} x[i,t] ;

subject to UnicitaInizio{i in A}: sum{t in T} x[i,t]=1 ; /* vincolo unicitą dinizio */

subject to PrecTemp{i in A,j in A}: sum{t in T} tt[t]*x[j,t] >= sum{t in T} tt[t]*x[i,t] + d[i] ;  /* vincolo precedenze temporali */

subject to DispRis1{t in T}: sum{i in W} sum{q in T:q>=t-dW[i]&&q<=t-1} rW[i]*x[i,q] <= R ; /* vincolo disponibilitą risorsa server CAT */

subject to DispRis2{t in T}: sum{i in V} sum{q in T:q>=t-dV[i]&&q<=t-1} rV[i]*x[i,q] <= R ; /* vincolo disponibilitą risorsa server CUS */


subject to IncompFunz2{t in T}: sum{i in CAP} sum{q in T:q>=t-dCAP[i]&&q<=t-1} x[i,q] <= 1 ; /* vincolo incompatibilitą attivitą CAP */

subject to VincStraordinari1{i in H, t in TC}: x[i,t]=0 ; /* vincolo sulle attivitą a configurazione manuale */

subject to VincStraordinari2{i in I, t in TC: t+d[i] in TC}: x[i,t]=0 ; /* vincolo sulle attivitą a configurazione manuale */



end ;
