/*----------------------------------------------------------------------------*/
/* Data Creare
: 17 Martie 1993
*/
/* Data Modificare :
19 Octombrie 1997
*/
/*----------------------------------------------------------------------------*/
/*
*/
/* Sursa: Fourer,R.,
Gay,D.M.,Kernighan,B.W.,AMPL: A Mathematical Programming */
/* Language. Technical
Report 87-03, Department of Industrial Engineering and */
/* Management
Sciences, Northwestern University, Evanston, Illinois 60201,
*/
/* January 1987, pp.1-63.
*/
/*----------------------------------------------------------------------------*/
/*
*/
/* O intreprindere poate
produce citeva produse diferite in citeva perioade de*/
/* timp. Pentru fiecare
produs se estimeaza ca aduce un anumit profit diferit */
/* de la o perioada
la alta. Marimea intreprinderii impune o limita superioara*/
/* a produselor posibile
de realizat. In plus fiecare produs necesita anumite */
/* materii prime
care vor fi utilizate in producerea sa. Cantitati limitate */
/* din acestea trebuie
stocate pentru perioadele luate in calcul. Un cost de */
/* stocare este impus
pentru fiecare materie . Orice material ramas nefolosit */
/* dupa toate perioadele
are o valoare estimata pozitiva/negativa-penalizare. */
/* Ce produse ar trebui
facute si in ce perioade in asa fel ca profitul pe ce */
/* se produce minus
costurile de stocare plus valoarea materialelor la sfirsit*/
/* sa fie maxim.
*/
/* Acest prototip ALLO
are doua ipostaze de personalizare pe baza fisierului */
/* de date : planprd5.dat
si planprd3.dat.
*/
/*----------------------------------------------------------------------------*/
FILE fpp = "planprd5.dat"
INTEGER
nrfprod READ fpp IS nrfprod >0; /* Numar produse finite */
nrrmat READ fpp IS nrrmat >0; /* Numar materii prime */
nrperp READ fpp IS nrperp >0 /* Perioade pe ciclu pr. */
RANGE
fprod = [1,nrfprod]; /* Domeniu coduri produse finite */
rmat = [1,nrrmat ]; /* Domeniu coduri materii prime */
perp = [1,nrperp ]; /* Domeniul perioade productie */
perpext = [1,nrperp+1] /* Domeniu extins perioade prod. */
REAL
prodmax READ fpp IS prodmax > 0.0;
/* Productia maxima permisa pe orice perioada de productie */
ump [rmat,fprod] READ fpp IS FOR [r IN rmat,f IN fprod] ump [r,f] >= 0.0;
/* ump[r,f] Unitati materie prima r pentru o unitate de produs f */
profdc [fprod,perp] READ fpp;
/* Profit estimat
(daca >=0.0)/costul impus (daca <0.0) */
/* al produselor finale si pe fiecare perioada de timp */
stinimax [rmat] READ fpp IS FOR [r IN rmat] stinimax[r]>=0.0;
/* Stocul initial maxim permis pe fiecare materie prima */
storcost [rmat] READ fpp IS FOR [r IN rmat] storcost [r] >= 0.0;
/* Costuri stocare pe unitate materie prima, pe orice perioada */
rvdcost [rmat] READ fpp
/* Valorile residuale estimate (daca >=0.0)/costul impus (daca */
/* < 0.0) al materiilor prime dupa ultima perioada a ciclului
*/
VARIABLES
xprod [fprod,perp]; /* Unitati de produse finite pe fiecare perioada */
xsmat[rmat,perpext] IS FOR[r IN rmat] xsmat[r,1] <= stinimax[r]
/* Stocul materii prime necesar la startul fiecarei perioade */
/* La inceputul primei perioade trebuie respectata conditia */
OBJECTIVES
profit IS profit := SUM[f IN fprod,p IN perp](profdc[f,p]*xprod[f,p]) -
SUM[r IN rmat,p IN perp] (storcost[r]*xsmat[r,p]) +
SUM[r IN rmat] (rvdcost[r]*xsmat[r,nrperp+1])
/* Profitul estimat pe intreg ciclul de productie este profitul pe
*/
/* produsele finite minus costurile de stocare plus rectificarea cu */
/* valoarea (pozitiva/negativa-penalizare) legata de stoc materiale */
MAXIMIZE
profit
CONSTRAINTS
limprod [perp] IS /* Limita productiei totale pe fiecare perioada */
FOR [p IN perp] limprod[p]:= SUM[f IN fprod](xprod [f,p]) <= prodmax;
pmbal [rmat,perp] IS /* Balanta materiala a procesului pe perioade */
FOR [r IN rmat, p IN perp] pmbal[r,p]:=
xsmat[r,p+1] = xsmat[r,p] - SUM[f IN fprod](ump[r,f] * xprod[f,p])
END