Sunteți pe pagina 1din 14

Pachetul Software ptr optimizare AIMMS : Aplicatii

Table of Contents
1.Problema de transport ............................................................................................................................... 3 2.Problema de dieta...................................................................................................................................... 7 2.1 Descrierea datelor............................................................................................................................... 7 2.2 Descrierea modelului .......................................................................................................................... 8 2.3. Cantitati si unitati de masura ............................................................................................................. 8 2.4. Variabile,Parametrii,Model .............................................................................................................. 10 2.5. Vizualizare Rezultat .......................................................................................................................... 13

AIMMS ("Advanced Interactive Multidimensional Modeling System") este un sistem software proiectat pentru modelarea i rezolvarea pe scar larg a problemelor de optimizare i planificare .Este utilizat ntr-o gam larg de industrii, inclusiv de petrol i produse chimice, producia de oel i cea agricola.

1.Problema de transport
Camioane care transporta vinuri,vor aproviziona 5 clienti/5 magazine,aflate in urmatoarele orase: Pitesti,Bucuresti,Constanta, Calarasi,Alexandria.Aceste camioane pleaca din 2 podgorii diferite,apartinand aceluiasi proprietar. In urmatorul tabel putem vedea cerea pentru fiecarui magazin,disponibilul de vin din fiecare podgorie,precum si costul asociat transportului unui singur camion de la fiecare podgorie la clienti.Obiectivul este acela de a gasi o modalitate prin care transportul sa se efectueze cu un cost minim si cererea sa fie acoperita.

Disponibil Podgorii Podgoria 1 Podgoria 2 Cerere Bucuresti 131 554 28 Pitesti 405 351 16 Cost transport pe unitate Constanta Calarasi 188 396 479 366 22 31 Alexandria 485 47 155 63 12

Modelul matematic:

(min) T = Upc*Xpc p,c Xpc Dp , p p Xpc Cc, c c Xpc 0 , p,c

Indici:

p = podgorii c = client Dp = disponibilul din podgorie Cc = cererea clientului Upc = costul pe unitatea de transport de la podgorie la magazin T = costul total al transportului Xpc = transportul de la podgorie la magazine
3

Parametrii:

Variabile:

Rezolvare folosind AIMMS: In programul AIMMS,deschidem un nou proiect pe care-l numim Problema de transport. In continuare,cream cele 2 seturi de identificatori: Podgorii(cu paramentrul p) si Clienti (cu parametrul c). Definim apoi parametrii: Oferta(f), Cerere(c) precum i CostTransport(f,c) si variabila Transport(p,c). Construim variabila CostTotalTransport avnd la definiie urmtoare formul: sum[(f,c),CostTransport(f,c)*Transport(f,c)]

Adugm cele dou restricii ale modelului : RestrictieOferta(f) cu definiia: sum[c,Transport(f,c)]<=Oferta(f) RestricieCerere(c) cu definiia: sum[f,Transport(f,c)]>=Cerere(c) Construim programul MinCostTransport,cu CostTotalTransport la Objective.

Urmatorul pas este sa introducem datele.Intai adaugam clientii si podgoriile:

Apoi adaugam datele corespunzatoare in Oferta(p) ci Cerere(c):

Introducem datele despre CostTransport:

Pentru a rezolva modelul intram in MainExecution i completm corpul procedurii:

Dupa rularea programului,vizualizam rezultatele:

Constatam,deci,ca cea mai eficienta modalitate de a satisface cererea cu un cost minim este urmatoarea: - Podgoria1 aprovizioneaza magazinul din Bucuresti integral,cu 28 de camioane si magazinul din Constanta cu 19 camioane(restul de 3 vor fi asigurate de Pdgoria 2) - Podgoria2 aprovizioneaza integral magazinele din Pitesti(cu 16 camioane), Calarasi (cu 31 de camioane) si Alexandria(cu 12 camioane),nu aprovizioneaza deloc magazinul din Bucuresti si trimite doar 3 camioane magazinului din Constanta.

In continuare vom construi o pagin pentru prezentarea datelor de intrare i a rezultatelor.Denumim pagina Date.Pe aceasta pagina,afisam tabelul de date,la care atasam grafice de tip bar ptr cerere si oferta,un table composite ptr variabila transport cu graficul corespunzator si un camp in care afisam rezultatul,denumit CostTotalTransport.Ptr ca lucrul sa fie mai usor,am adaugat un buton cu titlul Rezolva Problema.

Trecerea paginii in modul User,ne permite sa efectuam modificari ale datelor si sa vizualizam noul rezultat.Spre exemplu,dupa modificarea costului de transport intre Podgoria1 si Bucuresti (de la 131 la 500),obtinem:

Observam o modificare clara in graficul de transport si in costul total al transportului,care devine 37.120,fata de 27.499 initial.

2.Problema de dieta
2.1 Descrierea datelor
Exemplul de mai jos este bazat pe produsele KFC si ia in considerare un set de date care include 11 feluri de mancare representative pentru meniurile KFC si 4 nutrienti: calorii,proteine,grasimi si carbohidrati.Scopul este este acela de a determina meniul potrivit,care sa acopere cele 2 mese importante ale zilei (pranz si seara),respectand in acelasi timp restrictiile unei diete sanatoase, dar si un buget minim. Carbohydrat Calories protein e max (cal) (g) fat(g) (g) servings 170 11 12 6 2 390 32 21 17 2 610 28 33 52 2 2 63 17 45 66 35 39 100 2 2 2 2 2 2 2 2

Spicy Crispy- Whole Wing Crispy Strips (3 Crispy Twister Caesar Side Salad without Dressing & Croutons 40 3 18 Pepsi* 230 0 0 Milk 2% 170 12 6 Hot Wings Value Box 490 15 27 Chicken Pot Pie 790 29 45 Potato Wedges 290 4 15 Chocolate Chip Cake 300 4 15 minimum 1200 45 maximum 70 Preturile si cantitatile ptr fiecare produs in parte sunt urmatoarele:
Pret(lei) Spicy Crispy- Whole Wing Crispy Strips (3 Crispy Twister Caesar Side Salad without Dressing & Croutons Pepsi* Milk 2% Hot Wings Value Box Chicken Pot Pie 7 Cantitate (g) 3 51 9 165 12 247 15 91 5 20 oz 4 10 oz 16 173 10 400

Potato Wedges Chocolate Chip Cake

6,5 108 6 76/bucata

Datele folosite sunt reale,preluate din brosura cu informatii nutritionale de la KFC.

2.2 Descrierea modelului


Modelul trebuie sa respecte urmatoarele conditii: - minimizarea costului total al meniului - restrictii - ptr nutrienti: cantitatea de nutrient din meniu trebuie sa satisfaca conditiile de minim si de maxim cerute - ptr toate felurile de mancare : fiecare fel de mancare poate fi servit de maxim 2 ori

Indici:

f = feluri de mancare n = nutrient Vfn = valoarea nutrientului n care se regaseste intr-o unitate de mancare f Nf = nr maxim de serviri pentru o unitate de mancare f Mn = cantitatea maxima permisa din nutrientul n in meniu mn = cantitatea minima necesara din nutrientul n in meniu Pf = pretul unei unitati de mancare f xf = nr de unitati servite in meniu din felul de mancare f

Parametrii:

Variabile:

Modelul matematic : ( * + )

2.3. Cantitati si unitati de masura


In cadrul acestui exemplu,o importanta deosebita o au unitatile de masura,care ofera consistenta diferitelor valori pe care le pot lua nutrientii.

Asadar,in acest model,am folosit:

Marimi masa

Energie moneda

Aplicativitatea in problema de dieta Ptr masura cantitatea de proteine,grasimi si carbohidrati,dar si pentru a vedea cum se portioneaza felul de mancare Ptr masurarea caloriilor Ptr cost

In ceea ce priveste unitatatile de masura,au fost folosite cele conform Sistemului Interntional(SI): Marimi Unitatea de baza Unitati derivate Masa kg g,oz Energie J cal,Kcal Moneda leu euro In vederea introducerii acestor date in AIMMS,am creat o noua serctiune,numita Cantitati si unitati de masura :

Identificatorul folosit pentru masa,energie si moneda este quatity:

In ceea ce priveste sintaxa pentru conversie,interpretarea ei este urmatoarea: O unitate de masura(ex gram) este se va converti intr-o alta unitate de masura(kg) , considerand orice numar # masurat in grame si impartindul pe acesta la 1000. Tot in aceasta sectiune,am creat 2 tipuri de parametrii:unit parameter,in care am trecut unitatile curente de masura folosite,si string parameter cu unitatile de masura in SI.

Ptr ca,la final,utilizatorul sa poata modifica unitatile de masura si sa i se afiseze automat noile valori,am creat inca o sectiune ,numita Unitati ,in care am notat toate unitatile de masura,dar si unitatile de masura posibile per nutrient:

VerificareUnitatiDeMasura este de tip assertions,care are ca definitie:

StringToElement(UnitatiDeMasuraPosibile,SI_Nutrienti(n),0) in UnitatiDeMasuraPosPerNutrient(n) OR not SI_Nutrienti(n)

Iar ca actiune:
DialogMessage(FormatString("This unit is not allowed for this value (%e)", n),"Warning"); empty SI_Nutrienti(n)

si permite efectiv modificarea unitatilor de masura,atunci cand solicita o schimbare,prin transferul unitatii de masura dorite din UnitatiDeMasuraPosibile in UnitatiDeMasuraPerNutrient,sau atentioneaza in cazul in care nu exista in date acea unitate de masura ptr marimea respectiva.

2.4. Variabile,Parametrii,Model
Cream seturile de date FeluriDeMancare de parametru f si Nutrienti de parametru n ,cu datele corespunzatoare.Notam constrangerile de maxim si de minim specificate in problema:

10

Variabilele sunt urmatoarele : CostTotal , NrUnitatiInMeniu , ValoareTotalaNutrientiDietaOptima,CantitateaTotalaPtrDietaOptima. Variabila CostTotal are ca unitate de masura leul,iar ca definitie:
Sum[ f, PretUnitate(f) * NrUnitatiInMeniu(f)];

Variabila NrUnitatiInMeniu este construita in felul urmator:

ValoareTotalaNutrientiDietaOptima are indexul n si ca definitie:


Sum[ f, ValoareNutrientPeUnitConsumata(f,n) * NrUnitatiInMeniu(f)]

Ultima variabila, CantitateaTotatalaPtrDietaOptima are unitatea de masura gramul,cu definitia:


Sum[ f, GreutateaFeluluiDeMancare(f) * NrUnitatiInMeniu(f)]

11

In continuare am definit parametrii: GreutateaFeluluiDeMancare,de index f si unde am introdus datele corespunzatoare ptr fiecare fel de mancare; PretUnitate ,de index f si ca unitate de masura leul; CantitateaMinimaNecesaraNutrient si CantitateaMaximaPermisaDeNutrient, unde am trecut restrictiile corespunzatore; Greutatea felului de mancare ValoareNutrientPeUnitConsumata , de index (f,n) si care preia datele in ceea ce priveste unitatea de masura din parametrul unitateUnitateMasuraNutrienti; NrMaximServiri de parametru f;dupa cum am specificat mai jos,fiecare fel de mancare poate fi servit de maxim 2 ori.

Urmatorul pas este definit de constrangeri: ConstrangereDeMinim,cu definitia


Sum[ f, ValoareNutrientPeUnitConsumata(f,n) * NrUnitatiInMeniu(f)] >= CantitMinimaNecesaraNutrient(n);

ConstrangereDeMaxim,cu definitia

Sum[ f, ValoareNutrientPeUnitConsumata(f,n) * NrUnitatiInMeniu(f)] <= CantitMaximaPermisaDeNutrient(n);

Valoarea nutrientului pentru fiecare produs

Programul matematic este urmatorul : Procedura Main Execusion a fost completata cu urmatorul corp:
if not IsRunningAsViewer then Solve ProblemaDeDieta; else DialogMessage("In the AIMMS Viewer, the SOLVE statement is disabled. Therefore the solution is read from a case"); CaseFind("Solution",ACase); CaseLoadCurrent(ACase,0); endif;

12

2.5. Vizualizare Rezultat


Pentru o vizualizare mai buna a datelor de intrare si a celor de iesire/rezultatelor,in Page Manager am creat pagina date ,careia unde am adaugat si un buton care sa permita rezolvarea si de unde se pot efectua si diferite modificari ale datelor:

In concluzie,daca alegem sa mancam de la KFC,ptr o dieta echilibrata cea mai buna alegere este un meniu ce cantareste 726g si costa 20 lei.Felurile de mancare care,combinate,intrunesc aceste conditii,sunt urmatoarele: Milk 2%,Chicken Pot Pie si Chocolate Chip Cake.

13

14