Variabile

    Variabilele limbajului ALLO sunt elementele de baza in constructia unui model. Cu exceptia tipului INDICE (recunoscut implicit din context) toate trebuie sa aiba o declaratie efectiva, o definitie in cele din urma. Din punct de vedere al dimensiunii avem doua tipuri de variabile : variabile scalare si variabile compuse cu una sau mai multe dimensiuni. Variabilele scalare sunt definite prin nume, tip si eventual o valoare iar variabilele compuse prin nume, tip, lista dimensiuni si eventual lista de valori. Variabilele compuse pot fi privite ca o asociere de mai multe variabile scalare de acelasi tip care au un nume generic comun. Fiecare din acestea este recunoscuta pe baza acestui nume la care se asociaza o lista de indici unica. Pe baza acestei liste dar si a listei de dimensiuni se calculeaza un loc liniar al sau care este unic determinat. Amanunte la acest subiect se regasec la descrierea masivelor.

Din punct de vedere al scopului lor variabilele limbajului ALLO pot fi incadrate in patru grupe care corespund celor patru sectiuni ale unui model sursa:

            - variabile auxiliare;
            - variabile ale modelului de optimizat;
            - variabile functii obiectiv;
            - variabile restrictii.

Variabile auxiliare

    Variabilele auxiliare sunt acele variabile care impreuna cu constantele ajuta la constructia modelului prin : coeficienti , usurarea exprimarii relatiilor si restrictiilor,etc. Toate variabilele auxiliare trebuie sa aibe o valoare in momentul utilizarii lor. In aceasta categorie intra urmatoarele tipuri:

            - variabile auxiliare intregi;
            - variabile auxiliare indici;
            - variabile auxiliare reale;
            - variabile auxiliare domeniu;
            - variabile auxiliare nume de fisier.

Variabile auxiliare Intregi

    Aceste variabile pot fi scalare sau compuse (vectori,matrice,etc). O variabila scalara este reprezentata in cod complementar cu semn si pe patru octeti. O valoare din intervalul [ - 2147483648, 2147483647 ] poate fi atribuita unei asemenea variabile.

O variabila auxiliara intreaga trebuie sa apara intr-o instructiune INTEGER in care se regasete toata declaratia sa.

Variabilele auxiliare intregi sunt frecvent utilizate la constructia domeniilor intregi necesari in definirea masivelor sau in instructiunile ce contin secvente de ciclare FOR sau SUM. De asemenea sunt utilizate in expresiile indiciale. Desigur pot fi utilizate si in alte scopuri dar nu pot fi utilizate pe rol de indici de ciclare.

Sintaxa

var_intreg ::= var_intreg_scalara | var_intreg_masiv
var_intreg_scalara ::= nume
var_intreg_masiv ::= masiv

Exemple : nrfprod, nrperp, opczindl[opcze]

Observatie. Toate variabilele citate au devenit intregi ca urmare a includerii lor intr-o instructiune de tip INTEGER in modelul respectiv.

Variabile auxiliare Indici

    Aceste variabile sunt numai de tip scalar si nu fac obiectul unei declaratii explicite. Sunt reprezentate la fel ca variabilele auxiliare intregi si pot participa in expresii indiciare, expresii coeficienti, sau chiar la definirea unor domenii dinamice care pot fi evaluate numai intr-un anumit context de executie a unei instructiuni. O variabila de tip indice isi face semnalata prezenta ca indice de ciclare in secventele FOR si SUM. In acel moment acest indice nu trebuie sa fie utilizat de alt FOR sau SUM si nici nu mai are voie sa fie citat pe acest rol nici in cadrul aceluiasi FOR sau SUM daca sunt multiindiciale. Deci scopul sau este precis pina la sfirsitul celei in care este definit dupa care poate fi reutilizat.

Sintaxa

var_indice ::= nume

Exemple : r, f, p, j, k, k1

Observatie. Aceste variabile sunt variabile auxiliare de tip indice si relativ la un model daca ele nu fac parte din nici o instructiune explicita si sunt utilizate numai in corpul blocului de tip FOR sau SUM si numai dupa ce au fost citate pe rolul de indice din lista de ciclare, ceea ce inseamna activarea indicelui in cauza. In alte modele aceste nume pot sa nu mai fie de tip indice. Se observa ca se prefera o anumita simplitate in definirea (implicita) a indicilor. Nimeni nu ne opreste sa utilizam si nume mai complicate.

Variabile auxiliare Reale

    Variabilele auxiliare reale pot fi scalare sau compuse (vectori ,matrice, etc). O variabila scalara este reprezentata in virgula mobila cu semn si pe patru octeti. Domeniul aproximativ de valori al unei astfel de variabile este domeniul negativ [ - 3.4028235E+38, - 1.1754944E-38 ] plus valoarea 0 si domeniul pozitiv [ 1.1754944E-38 , 3.4028235E+38 ].

O variabila reala trebuie sa apara intr-o instructiune REAL in care se regasete toata declaratia sa.

Variabilele auxiliare reale sunt frecvent utilizate la constructia expresiilor coeficienti sau a domeniilor reale utilizate ca domenii de marginire variabile model sau variabile restrictii model.

Sintaxa

var_real ::= var_real_scalara | var_real_masiv
var_real_scalara ::= nume
var_real_masiv ::= masiv

Exemple : prodmax |storcost [rmat] | ump [rmat,fprod] | profdc [fprod,perp]

Observatie. Toate variabilele citate au devenit reale ca urmare a includerii lor intr-o instructiune de tip REAL in modelul respectiv.

Variabile auxiliare Domeniu

    Variabilele auxiliare domeniu sunt numai de tip scalar si sunt utilizate ca domenii dimensiuni, domenii de ciclare sau domenii de marginire variabile model sau variabile restrictii model. Primele doua tipuri au valori intregi iar celelalte reale. O variabila domeniu are doua valori. O valoare reprezinta marginea sa inferioara iar cealalta marginea sa superioara. Deoarece nu se cunoaste utilizarea ulterioara a acestui domeniu atunci aceste valori sunt retinute ca valori reale si ca valori intregi. O astfel de variabila poate reprezenta un interval pe axa reala sau un interval pe axa numerelor intregi.

O variabila domeniu trebuie sa apara intr-o instructiune RANGE care contine intreaga sa definitie.

Sintaxa

var_domeniu ::= nume

Exemple : fprod, rmat, perp

Variabile auxiliare Nume Fisier

    Limbajul ALLO permite si definirea unor astfel de variabile a caror valoare este o specificatie de fisier DOS. Definirea se face prin instructiunea FILE.

O astfel de variabila este utilizata ca referinta la fisierul auxiliar pe care-l reprezinta si din care pot fi preluate date de asignare pentru alte variabile auxiliare. ALLO permite accesul simultan la mai multe fisiere auxiliare fisierului principal cu textul de baza al modelului.

Sintaxa

var_fisier ::= nume

Exemple : fpp, fdist, fcsd

Observatie. Numele acestea au aparut in instructiunea FILE din modelele respective fata de care le consideram variabila auxiliara de tip fisier. Aceste nume se aleg dupa dorinta, mai simple daca sunt solicitate mult in model.

Variabile Model

    Variabilele modelului de optimizat se definesc toate in sectiunea variabilelor care urmeaza sectiunii in care sunt definite variabilele auxiliare. Tipul de data asociat unei astfel de variabile este numai tipul real. Daca in definitia unei asemenea variabile nu este prevazuta clauza de marginire atunci variabila este presupusa a fi pozitiva. Daca are clauza de marginire inferioara atunci domeniul sau este de la aceasta valoare (care poate fi negativa) la plus infinit. Daca are numai clauza de marginire superioara atunci aceasta margine trebuie sa fie strict pozitiva iar domeniul considerat pentru aceasta variabila este de la zero si pina la aceasta valoare. Daca clauza este de dubla marginire atunci domeniul poate fi negativ, pozitiv sau mixt numai sub conditia ca acesta sa fie corect reprezentat de margini, adica marginea inferioara <= marginea superioara. Rezultatul procesarii clauzei de marginire se regaseste in sectiunea BOUNDS a fisierului MPS rezultat.

O variabila model poate fi scalara sau compusa (vector,matrice,etc.) lucru ce ne permite a utiliza instructiuni generale de definire atit a clauzelor de marginire cit si a unor restrictii.

Variabilele model scalare apar in fisierul MPS cu numele lor cind are mai putin si chiar opt caractere. In caz contrar numele este rezultatul truncherii la primele 8 caractere. Pentru variabilele compuse apare nevoia de incifrare in nume a indicelui liniarizat al celulei referite. Aceasta se face pe cite caractere este necesar la spate din cele opt permise. De aceea utilizatorul trebuie sa-si aleaga cu grija atit numele generic (preferabil mai scurt de 8 caractere) cit si dimensionarea respectiva. Altfel pot apare incoerente pe aceeasi reprezentare de nume. Aceasta procedura ni s-a parut cea mai uzuala la momentul de fata. Exista si o procedura de liniarizare completa a tuturor variabilelor si generarea unui nume_cod pe baza acestuia. Acesta este asistat de un dictionar care este necesar in refacerea solutiei rezultate din optimizator in termenii numelor originale.

Sintaxa

var_model ::= var_model_scalara | var_model_masiv
var_model_scalara ::= nume
var_model_masiv ::= masiv

Exemple : xprod [fprod,perp], xsmat[rmat,perpext], Rprd[prod,fact],

XRZP [hrze] , XIRZP [hrz] , XORZP [hrz] , XAF

Variabile Functii Obiectiv

    Aceste variabile ne permit definirea functiilor obiectiv pe care le consideram ca apartin unui model concret. Ele sunt definite in sectiunea functiilor obiectiv si pot fi scalare sau compuse. La sfirsitul acestei sectiuni o singura functie sau componenta poate fi selectata in instructiunea de precizare a functiei si a tipului de problema de optimizat. Rezultatul procesarii unei definitii de functie obiectiv se regaseste in fisierul MPS rezultat in cadrul sectiunilor ROWS si COLUMNS. In sectiunea ROWS in linia functiei selectate apara informatia de MAX/MIN precizata in instructiunea de selectie. Desigur ca aceasta nu tine de standardul MPS dar nu deranjeaza. Tine de sistemul integrat SAMO.

Referitor la numele corespunzatoare ce apar in fisierul MPS sunt valabile aceleasi reguli expuse pentru variabilele model.

Sintaxa

var_fobj ::= var_fobj_scalara | var_fobj_masiv
var_fobj_scalara ::= nume
var_fobj_masiv ::= masiv

Exemple : profit | cost

Variabile Restrictii

    Variabilele restrictii ne permit a da nume dorite liniilor restrictii model care au astfel o identitate necesara chiar si pentru intelegerea unui model. Ca si variabilele modelului acestea pot fi scalare sau compuse. Ele sunt definite in sectiunea restrictiilor model. Rezultatul procesarii definitiei unei restrictii se regaseste in fisierul MPS in sectiunile ROWS, COLUMNS, RHS si eventual in sectiunea RANGES daca restrictia a avut clauza de dublu marginire. Referitor la numele corespunzatoare ce apar in fisierul MPS sunt valabile aceleasi reguli expuse pentru variabilele model.

Sintaxa

var_restr ::= var_restr_scalara | var_restr_masiv
var_restr_scalara ::= nume
var_restr_masiv ::= masiv

Exemple : limprod [perp] , pmbal [rmat,perp] , rtlim | DRZP [hrz]