MODEL Problema_angajari_sezoniere

/*----------------------------------------------------------------------------*/
/* Data Creare     : 11 Martie    1995                                        */
/* Data Modificare : 19 Octombrie 1997                                        */
/*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/* Source of the model : Thomas M. Kisko,  A Syntax for Linear Programms that */
/* Computers and People can Understand. Research Report No.86-13,October,1986.*/
/* Department  of Industrial  and Systems Engineering, University of Florida, */
/* Gainesville, Florida 32611.                                                */
/*                                                                            */
/* Problema de fata se refera la un plan de lucru si de stocare produse pe un */
/* ciclu format din citeva perioade de timp (aici trimestru). Trebuie stiut ce*/
/* numar de angajati trebuie mentinuti stabili, ce numar de angajati sunt inca*/
/* necesari sau ce numar de angajati trebuiesc disponibilizati. De asemenea se*/
/* cere o politica de stocare a modelelor produse de intreprinderea respectiva*/
/* In final se cere minimizarea costurilor de productie in asa fel ca cererea */
/* sa fie satisfacuta.                                                        */
/*                                                                            */
/* Remarca. Aceasta este o problema mixta cu variabile intregi pe care ALLO nu*/
/* le are in vedere in aceasta versiune. In plus nedispunind de un MIP solver */
/* am considerat ca problema trebuie rezolvata in domeniu  variabilelor reale.*/
/* Din solutia obtinuta astfel se poate deduce o solutie intreaga apropiata de*/
/* de aceea care ar fi rezultat prin tratarea si rezolvarea ca MIP problema.  */
/*----------------------------------------------------------------------------*/

    FILE femp="employ.dat"

    INTEGER

      NRP    READ femp; /* Numar modele produse */

      NRET   READ femp; /* Numar categorii de angajati */

      NRPER  READ femp  /* Numar perioade */

    RANGE

      RP    =[1,NRP];     /* Domeniu coduri modele produse */

      RET   =[1,NRET];    /* Domeniu coduri categorii angajati */

      RPER  =[1,NRPER];   /* Domeniu coduri perioade */

      RPER1 =[2,NRPER];   /* Domeniu coduri fara perioada initiala */

      RPER2 =[1,NRPER-1]; /* Domeniu coduri fara perioada finala */

      RPER3 =[2,NRPER-1]  /* Domeniu coduri fara perioada initiala si finala */

    REAL

      Q READ femp; /* Zile lucratoare pe trimestru  si pe un salariat */

      F READ femp; /* Coeficient maxim ore lucratoare platite deosebit*/

      S READ femp; /* Salariu pe om si pe trimestru                   */

      H READ femp; /* Impozit platit pe salariu                       */

      L READ femp; /* Taxa de somaj pentru fiecare disponibilizat     */

      U READ femp; /* Costul de stocare a unei unitati pe o perioada  */

      V READ femp; /* Numar maxim de unitati ce pot fi stocate        */

      B READ femp; /* Dolari pe zi lucratoare peste programul normal  */

      A[RP]  READ femp; /* Stocul initial al modelelor produse */

      C[RET] READ femp; /* Numarul initial de angajati */

      Z[RP]  READ femp; /* Sfirsit de inventar dorit pe modele produse */

      P[RET,RP] READ femp IS FOR[j IN RET, k IN RP] P[j,k] >= 0.0;

        /* Zile om categoria j necesare la modelul produs k */

      D[RP,RPER] Read femp IS FOR[j IN RP, k IN RPER] D[j,k] >= 0.0

        /* Cererea de modelul produs j in perioada k */

  VARIABLES

    N [RET,RPER]; /* Numar  salariati pe categorii existenti cu stat de plata */

    X [RET,RPER]; /* Numar de angajati categoria j la inceputul perioadei k   */

    Y [RET,RPER]; /* Numar disponibilizati categorii j la inceput perioada k  */

    O [RET,RPER]; /* Ore suplementare categoria j pe perioada  k              */

    SP[RP,RPER]   /* Numar unitati model j in inventar la inceput perioada k  */

      IS FOR [j IN RP, k IN RPER1] SP[j,k] <= V;

    M [RP,RPER]   /* Numar unitati de model j de lucrat intr-o perioada k     */

  OBJECTIVES

    cost Is     /* Total cost format din salariu platit pentru diversele */
                /* categorii de angajati (permanenti sau nu) plus taxele */
                /* pe angajati (angajati sau concediati)  plus costul de */
                /* stocare a modelelor produse.                          */

      cost := SUM [j IN RET] ( SUM [k IN RPER] (S*N[j,k] +

              H*X[j,k] + L*Y[j,k] + B*O[j,k])) +

              SUM [j IN RPER1] ( SUM [k IN RP] (U*SP[k,j]))

    MINIMIZE cost

  CONSTRAINTS

    ra [RET] IS FOR [k IN RET] ra[k] := N[k,1] - X[k,1] + Y[k,1] = C[k];

        /* Restrictia angajatilor la inceputul primei perioade */

    rb [RET,RPER1] IS  FOR [j IN RET,k IN RPER1]

       rb[j,k] := N[j,k] - N[j,k-1] - X[j,k] + Y[j,k] = 0.0;

        /* Balanta angajatilor la frontiera perioadelor de lucru */

    rc [RET,RPER] IS  FOR [j IN RET,k IN RPER]

       rc [j,k] := Q*N[j,k] + O[j,k] - SUM [i IN RP] (D[i,k]*P[j,i]) >=0.0;

        /* Restrictia de cerere capacitate de munca */

    rd [RPER] IS  FOR [j IN RPER]

                  rd[j] := SUM [k IN RET] (F*Q*N[k,j]-O[k,j])>= 0.0;

        /* Restrictia de lucru peste orele normale de program */

    re [RP,RPER3] IS FOR[j IN RP,k IN RPER3] /* Balanta materiala */

                     re[j,k]:=M[j,k]+SP[j,k]-SP[j,k+1]=D[j,k];

    rf [RP] IS FOR [k IN RP] /* Balanta materiala la sfirsitul perioadelor */

               rf[k] := M[k,NRPER] + SP[k,NRPER] = D[k,NRPER] + Z[k];

    rg [RP] IS FOR [k In RP] rg[k] := M[k,1] - SP[k,2] = D[k,1] - A[k]

        /* Balanta materiala la inceputul primei perioade de lucru */
 

END


Return la Tabela Modele