Limbajul
ALLO este un limbaj specializat pentru modelarea matematica lineara. El
permite modelatorului sa scrie cu usurinta modele lineare daca pentru acestea
se cunoaste o formulare algebrica in care toate constantele implicate in
constructie sunt cunoscute aprioric si nu necesita intrebari relativ la
valoare altele decit cele impuse in conditia de validare permisa. S-a dorit
ca acest limbaj sa fie cit mai aproapiat de limbajul algebric (cunoscut
modelatorilor) lucru ce usureaza invatarea sa si mentine o oarecare
asemanare vizuala a celor doua exprimari. Limbajul algebric inseamna pentru
noi limbajul formulelor matematice fara alte cuvinte straine de acestea
care ar imbunatati forta de exprimare a oricarui limbaj. Exista o limitare
a fortei de exprimare care se resimte in scrierea unor modele complexe
si mai mult a unor prototipuri de modele ce necesita intrebari multiple
si cai de selectie pentru coeficienti sau chiar pentru variabile model,
functii obiectiv sau restrictii. Totusi prezenta fisierelor secundare si
a functiilor implicite percepute ca actiuni intermediare in diverse puncte
ale modelului permit scrierea in ALLO chiar a unor prototipuri.
In limbajul ALLO
modelatorul poate sa-si defineasca variabilele auxiliare, variabilele modelului,
functiile modelului precum si restrictiile acestuia. Variabilele auxiliare
pot primi valori in momentul definirii si pot fi supuse unor conditii de
validare. Aceste valori se pot gasi direct in fisierul sursa principal
dar ele pot fi in diverse fisiere secundare cu date citate in fisierul
sursa principal lucru ce permite construirea de prototipuri.
Ca variabilele
auxiliare avem acces la domenii intregi sau la domenii reale din care unele
pot fi cunoscute abia in faza de "executie" a unor instructiuni de definire
variabile model,functii model sau restrictii model.
Modelatorul
dispune de doua instructiuni compuse FOR si SUM care permit initializarea
unor masive auxiliare pe baza unor date cunoscute pina in acel punct, scierea
de conditii concentrate de validare a componentelor unor variabile auxiliare
de tip masiv, scrierea unor conditii concentrate de bounds pentru variabile
model de tip masiv, definirea unor expresii simbolice concentrate care
participa la construirea si definirea functiilor obiectiv si a restrictiilor
scalare sau de tip masiv.
Tipurile
de date auxiliare recunoscute sunt : intregi, reali, domenii intregi, domenii
reale si indici. Un tip special de data auxiliara este nume intern de fisier
care admite ca valoare o specificatie de fisier DOS. Acest nume de variabila
auxiliara poate sa fie citat in celelalte instructiuni de definire variabile
auxiliare si anume atunci cind dorim ca pentru aceasta sa-i atribuim valoarea/valorile
din fisierul concret pe care il reprezinta. Definirea numelor interne de
fisier secundar cu date poate fi facuta oriunde in sectiunea variabilelor
auxiliare. Dupa referire un asemenea fisier este deschis si poate fi citit
pentru asignare de date prin comanda READ <numele intern > ce
poate sa apartina unei instructiuni de tip INTEGER sau REAL. Revenirea
dintr-un astfel de fisier pe textul din fisierul principal se produce ca
urmare a satisfacerii comenzii de initializare a variabilei auxiliare respective
sau ca urmare a unei erori sintactice sau semantice.
Variabilele
auxiliare de tip intreg sau de tip real pot fi organizate si in structuri
compuse de tip masiv. In structura masiv pot fi definite dupa dorinta sau
necesitate si unele variabile model, functii obiectiv sau restrictii model.
Un tip special de variabila auxiliara care nu trebuie sa fie definit explicit
este variabila indice utilizata in instructiunile ce contin blocuri FOR
sau SUM.
Limbajul ALLO este un limbaj
cu libertate maxima fata de zone albe sau neproductive formate din linii
vide, taburi, spatii si comentarii care pot sa se desfasoare pe una sau
mai multe linii sursa.
Limbajul
ALLO nu este senzitiv la litere mari sau mici. El impune restrictii de
utilizare numai in scopul precizat asupra unui set cuvinte cheie care pot
fi scrise cu litere mari/mici sau in combinatie dupa cum agreaza modelatorul.
O problema
speciala in implementarea translatorului a fost aceea a generarii de nume
pentru linii si coloane in fisierul standard MPS avind in vedere limita
de 8 caractere impusa pentru acestea. O varianta a fost liniarizarea completa
a tuturor liniilor/coloanelor si generarea de nume lineare cu dictionar
specific atasat fiecarui model. A doua varianta a fost acea de a utiliza
nume de cel mult 8 caractere (pentru variabile model, functii obiectiv,
restrictii model care fac obiectul utilizarii ulterioare). Mai mult pentru
variabilele model, variabilele functii obiectiv sau restrictii de tip masiv
numele trebuie sa fie mai scurt de 8 caractere in asa fel incit sa permita
ca in diferenta de caractere a numelui si pina la 8 sa se poata reprezinta
liniar toate celulele acestui masiv care vor avea ca nume MPS numele masivului
concatenat cu indicele liniar corespunzator. Utilizatorul trebuie sa-si
aleaga cu grija aceste nume generice.
Translatorul
ALLO este un task independent integrat in sistemul de optimizare lineara
(SAMO) functional sub WINDOWS 3.1. Sistemul mai are in componenta un manager
de fisiere, un editor de fisiere text si un optimizator pentru rezolvarea
problemelor lineare. Prin comanda de apel translator sistemul transmite
acestuia numele fisierului principal de procesat care este transmis mai
departe optimizatorului daca faza de translatare s-a terminat corect (fara
erori) si a fost generat fisierul MPS corespunzator.
Limbajul
ALLO a aparut dintr-o necesitate practica. Cu ajutorul lui am scris
chiar modele de mari dimensiuni pe care nu le-am fi putut scrie altfel
decit cu un efort considerabil. Pe baza echivalentului MPS rezultat din
procesul de translatare am obtinut solutia optima lucru ce ne-a fost de
un real folos in cercetarile noastre.