/*----------------------------------------------------------------------------*/
/* 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