Pachetul Software ptr optimizare AIMMS : Aplicatii

1

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

2

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, producţia de oţel ş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 având la definiţie următoare formulă: sum[(f,c),CostTransport(f,c)*Transport(f,c)]

Adăugăm cele două restricţii ale modelului : RestrictieOferta(f) cu definiţia: sum[c,Transport(f,c)]<=Oferta(f) RestricţieCerere(c) cu definiţia: 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:

4

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

Introducem datele despre CostTransport:

Pentru a rezolva modelul intram in MainExecution şi completăm 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.

5

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:

6

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.

8

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.

9

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 unitate“UnitateMasuraNutrienti”; “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

Sign up to vote on this title
UsefulNot useful