Transportului Auto de Tonaj Mare Si Mediu pe Teritoriul Pi Tracom

Complexul de transport urban este un mecanism amplu, viu și dinamic.Ca urmare, toate problemele și inițierile privind perfecționarea și reorganizarea pot fi examinate numai prin prisma unei abordări sistemice și aplicate în practică numai în complex.

Problemele prioritare ale transportului sunt direct sau indirect legate de eficientizarea utilizării resurselor energetice.

Procesele de transformare radicală a sferelor economice și sociale, formarea piețelor de produse și servicii, începutul integrării țării în sistemul economic mondial sunt de neimaginat fără crearea unui sistem de transport fiabil în funcționare, economic, sigur și ecologic, orientat spre satisfacerea intereselor cetățeanului, întreprinzătorului, pieței și a societății în întregime.

Rolul important al transportului în economia orașului și realizarea serviciilor importante pentru populație, dictează necesitatea aplicării unor măsuri armonioase, echilibrate și eficiente în acest domeniu.

Scopul studiului dat constă nu doar în elaborarea strategiilor de investiții în sistemul de transport și măsuri de reducere a cheltuielilor de exploatare a mijloacelor de transport, dar și anume optimizarea activității transportului , în rezultat obținându-se o creștere a calității deservirii fluxului de transport.

Aplicarea în practică are ca obstacol diversitatea și complexitatea factorilor care influențează viteza de deplasare și în mod special:

Tipul vehiculului

Tipul drumului și calitățile sale

Linearitatea drumului și declivitatea sa

Fluxul traficului

Numărul de puncte traversate și lungimea acestora

Implementarea eficace a programelor și priorităților se bazează atît pe teorii, cît și pe o administrarecompetentă. În nici o sferă nu este atît de important acest fapt, ca în planificarea și gestionarea .

Astfel, scopul tezei de licență este studiul accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” și optimizarea lui în dependență de anumite condiții impuse, atît de de restricțiile privind resursele materiale, financiare și umane ale Întreprinderii Administratoare ale PI, cît și regimul de lucru al rezidenților PI.

Obiective:

Cunoașterea și utilizarea adecvată a noțiunilor specifice limbajului utilizat în teoria grafurilor;

explicarea și interpretarea unor idei, proiecte, procese, precum și a conținuturilor teoretice și practice ale teoriei grafurilor;

proiectarea, implementarea și evaluarea unor aplicații ale grafurilor în diverse domenii;

deprinderea metodelor directe și indirecte, specifice rezolvării problemelor matematice;

Lucrarea nu este un produs finit, deoarece ea reprezintă doar elaborarea unui instrument de simulare prin care dreptul de a alege varianta optimala îi revine celui care utilizează acest instrument de lucru. La urmatoarea etapă se prevede elaborarea unor instrumente-expert sau unor metode de optimizare care vor permite selectarea variantelor optimale în baza unor criterii bine determinate sau în baza unor variante expert bine formalizate.

Teza este structurată pe 3 capitole :

Introducere

Capitolul I. Cadrul teoretic.

Capitolul II. Metodologiile și obiectivele cercetării.

Capitolul III. Rezultatele cercetării.

Concluzii

Bibliografie

Anexe

Aceasta conține un volum de 58 de pagini, cu prezentarea a 44 de figuri, 2 scheme și 2 tabele. Anexa1 conține listing-ul aplicației elaborate pentru teza de licență.

CAPITOLUL I. CADRUL TEORETIC

Flux de transport. Situația curentă.Probleme

Expresiaflux de transport își are originea în limba franceză.  Fluxul de transport reprezintă o  fază de ridicare periodică a nivelului în domeniul de transport sub influența factorilor corespunzători.

Asigurarea unui flux continu de transport (figura 1.1.1) permite o aprovizionare ritmică. Transportul rutier efectuează deplasarea în spațiu a bunurilor și oamenilor cu ajutorul autovehiculelor care sunt mijloace de transport autopropulsate.

Ca particularitate a acestor mijloace de transport se remarcă faptul că dispun de o mare mobilitate, putând fi întrebuințate, în funcție de vreme, pe orice fel de drum.

Figura.1.1.1Flux de transport

Figura1.1.2Clasificarea transporturilor

Flux de transport aerian este fluxul din ramura aviației civile sau militare care se ocupă de transportul persoanelorsau al mărfurilor pe calea aerului. Rețeaua de transport aerian este constituitǎ din cǎi si noduri; legǎturile dintre noduri se realizeazǎ cu ajutorul mjloacelor de transport (avioane si elicoptere).

La fiecare minut, în lume, 20 de tone de mărfuri își iau zborul cu avionul. Cele mai mari aeroporturi europene sunt la: Paris, Londra, Moscova, Frankfurt, Atena, Roma, Copenhaga.

Figura 1.1.3Harta curselor aeriene din lume, în iunie 2009. 54317 de curse

AVANTAJE:

Rapiditatea este atributul esențial al transportului aerian. Pentru pasageri, evoluția aeronavelor a adus posibilitatea de a călători mult mai repede, dar și în condiții de confort și de servicii net superioare.

Serviciilesunt un alt atribut important al călătoriei cu avionul. Numărul și calitatea acestora a crescut și s-a diversificat impresionant, ajungând la ora actuală să fie principalul domeniu de concurență întrecompaniile aeriene. Serviciile nu se limitează numai la cele din timpul zborului, ci le includ și pe cele dela sol, răspunzând cerințelor clienților companiilor aeriene.

Oportunitateareprezintă avantajul competitiv major,in prestarea oricărui serviciu. Cu atât mai mult, încazul serviciilor logistice, oportunitatea lor decurge din necesitatea accesului în timp real la un act deconsum, de documentare, de producție.

Economicitatease referă la posibilitatea clientilor de a beneficia în condiții avantajoase de serviciilerespective. Costurile de operare s-au redus substanțial, în ultimii ani, permițând practicarea unor prețuritot mai atractive, accesibile unui public tot mai larg.

Regularitatea  prestării serviciilor de transport aerian decurge din modul de organizare a acestora.Transportul aerian se efectuează, în cea mai mare parte, prin cursele de linie, pe anumite rute fixe, încondiții de frecvență, orare și tarife relativ stabile. Respectarea acestor condiții se reflectă asuprareputației prestatorilor și poziției lor pe piață.

Confortul se referă nu numai la condițiile de transport la bordul aeronavei, ci și la dotările din spațiileanexe de la sol (din aeroporturi) care adaugă o motivație la baza opțiunii privind selecționarea avionuluica mijloc de transport.

Creștereanumǎruluiliniilor directe

PROBLEME

Dependența transporturilor aeriene de condițiile naturale, ceea ce pune sub semnul incertitudinii respectarea riguroasă a orarului sau chiar realizarea călătoriei, o anumită insecuritate a voiajelor; 

Investițiile marigenerate de construirea și exploatarea unor aeroporturi moderne;

Imbarcarea și debarcarea turiștilorse face în afara localităților, necesitând transferul la baza de cazarecu alte mijloace de transport, crizele economice și politice.

Transportul pe apă este activitatea de a transporta persoane sau bunuri peste suprafața apei (oceane, mări, lacuri, râuri sau canale) prin intermediul unor ambarcațiuni.

Transportul pe apă este caracterizat de emisii scăzute de CO2, în comparație cu alte mijloace de transport, în special transportul rutier, dar și căile ferate (transportul feroviar).

În țările care sunt favorizate de căi navale de apă, o mare parte din mărfuri se deplasează pe vapoare și șlepuri. Pe de o parte, costurile de transport pe apă sunt foarte ieftine pentru marfa în vrac de o valoare mai scăzută, sau pentru produse neperisabile. Un singur vapor poate să transporte același cargo care ar fi echivalentul a unei duzini de trenuri sau unor sute de camioane. Pe de altă parte, transportul pe apă este cel mai încet transport și deseori el este afectat de vreme.

Transportul pe apă poate fi îngreunat și datorită nivelului scăzut al apei, ducând la pierderi de ordin economic pentru companiile de transport. Transportul mărfurilor poate fi în aceste cazuri realizat pe șosele și căi ferate. În consecință, un nivel scăzut al apei care îngreunează transportul cauzează indirect pagube de natură ecologică prin creșterea gradului de poluare.

Transportul naval are o serie de caracteristici care îl diferențiază de alte moduri de transport:

Mărimea încărcăturii o depășeste în mod evident pe cele ale celorlalte moduri de transport, de unde și costurile foarte reduse ale transporturilor navale. Capacitățile de transport variază de la câteva sute la câteva sute de mii tone (marile petroliere);

Viteza de deplasare este foarte mică în comparație cu celelalte mijloace de transport datorită rezistenței opuse de apă la înaintare. Acest lucru este compensat parțial de mersul fără întrerupere al navelor între portul de plecare și cel de sosire. La timpii de tranzit mari se adaugă și timpii foarte mari de operare a navelor;

Întreruperea serviciului este cauzată de furtuni fiind mai frecventă în anotimpul rece, când pot interveni și înghețuri, în special în transportul fluvial;

Accesibilitate redusă se datorează evident faptului că traseele navigabile nu există pretutindeni. De aceea transportul pe apă trebuie combinat cu un alt mod de transport;

Solicitarea încărcăturilor se datorează oscilațiilor pe timp de furtună și excesului de umiditate. De aceea se impun măsuri speciale de protecție a încărcăturilor.

Figura 1.1.4 Nave comerciale din 2005 (cu un tonaj de 1000 și mai mult) pe țară

Transportul feroviar este unul din principalele tipuri de transport,deși importanța lui se reduce.Sistemul de transporturi din R. Moldova a fost prevăzut și realizat nu ca unsistem unitar al economiei din acest teritoriu, ci ca o parte componentă a sistemului de transporturi al imperiului Rus, apoi cel Sovietic. Ca rezultat, în prezent republica se confruntă cu unele dificultăți suplimentare, îndeosebi in transportul feroviar și prin conducte. Constucția căilor ferate în cadrul Imperiului Rus a avutdrept obiectiv principal interesele strategico-militare, ceea ce a determinat cîteva particularități ale acestora: acartamentul mare – 1524 mm (ca și în tot fostul Imperiul Rus), cu 89 mm mai lat decît în majoritatea statelor europene;trasarea liniilor prin sectoare inadecvate din punct de vedere al condițiilor naturale;

 neglijarea în multe cazuri a necesităților economice ale Basarabiei ș.a. Aceastacreează în prezent dificultăți suplimentare în dezvoltarea transportului feroviar.

Figura 1.1.5Lista țărilor după lungimea rețelei feroviare

Transportul auto oferă posibilitatea încărcării mărfii direct de la punctul de expediere și descărcarea ei direct la punctul de destinație, fără a fi necesare transbordări și manipulări suplimentare.

Mijloacele de transport auto se deplasează cu viteze mari ca urmare a vitezei comerciale mari și a simplității operațiunilor tehnologice de încărcare și descărcare. Ele se pot pregăti rapid și ușor în vederea efectuării transportului, necesitând cheltuieli reduse în acest scop.

Transportul auto oferă cea mai mare eficiență pe distanțe scurte.

Figura 1.1.6Componența parcului rulant din mun. Chișinău.

Analiza datelor statistice denotă faptul că în anul 2012 mun. Chișinău a atins gradul de motorizere a poulației de cca. 223 autoturisme/1000 locuitori.

În urma studierii cazurilor, am ajuns la concluzia că este necesară rezolvarea problemei vizavi de transportul auto.

Situația curentă

Teritoriul Parcului Industrial „TRACOM" SA este situat în partea de Vest a orașului Chișinău, Moldova în componența complexului industrial „Sculeni" pe fostul teritoriu a uzinei de tractoare din str. Columna, 170, care ocupă o suprafața de 32,2607 ha.

Parcul este dotat cu infrastructură și spații de producere și administrative, precum si cu macarale de tonaj mare, ramură a căii ferate, telefonie fixă, internet.

În Parc pot fi desfășurate activități preponderent cu profil industrial și de prestare a serviciilor conexe, și anume: constructoare de mașini și echipamente; electronică; tehnologii informaționale (IT).

Rețeaua rutieră s-a format sub aspectul actual în ultimii 40 de ani, însă parametrii drumurilor au fost calculați pentru un flux fix, pe când astăzi avem un parc un număr mai mare de unități de transport. În ultimele decenii s-a majorat esențial numărul unităților de transport. În consecință s-a mărit simțitor intensitatea circulației pe străzi și evident supraîncărcarea rețelei rutiere cu mijloace de transport. Principalele noduri de drumuri și magistrale ale orașului nu mai fac față fluxului de autovehicule. În orele de vârf viteza de circulație s-a diminuat vizibil, iar gradul de poluare a aerului majorându-se.

Figura 1.1.7Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele

Problemele cu care se confruntă instituțiile sunt foarte diverse; ele pot fi statice sau dinamice,structurate sau nestructurate, manifeste sau latente. Totuși, ca primă condiție pentru rezolvarea lor se impune existența unui set de informații pertinente și suficiente. Apoi este necesară pregatirea managementului pentru utilizarea eficientă și eficace a acestor informații. În timp ce managementul de vîrf se concentrează pe utilizarea în scop strategic a acestor informații, nivelele intermediare deconducere se concentrează pe utilizarea lor operațională.

Următoarele probleme vor fi analizate:

cel puțin o sursă poate aproviziona mai multe destinații și cel puțin o destinație poate primi unități de flux de la mai multe surse.

b) Unele rute de legătură pot avea limitări superioare și / sau inferioare pentru volumul unităților de flux ce se deplasează într-un sens sau altul. Aceste limitări poartă numele de capacități (inferioare, respectiv superioare). În continuare, vom avea în vedere numai cazul în care toate capacitățile inferioare sunt egale cu zero, capacitățile superioare fiind exprimate prin numere pozitive.

c) Există un cost al deplasării unei unități de flux de la un punct al rețelei la altul,cost care poate fi exprimat în bani, timp sau distanță. Sunt situații în care acest cost poate semnifica profitul obținut de pe urma deplasării. Pe aceeași rută, costurile ce și capacitățile pot diferi în funcție de sensul de parcurgere.

1.2Teoria grafurilor. Noțiuni generale

Numim graf o pereche ordonată de mulțimi, notată G=(X,U), unde X este o mulțime finită și nevidă de elemente numite noduri sau vârfuri, iar U este o mulțime de perechi (ordonate sau neordonate) de elemente din X numite muchii (dacă sunt perechi neordonate) sau arce (dacă sunt perechi ordonate). În primul caz, graful se numește neorientat, altfel acesta este orientat.

Așadar un graf poate fi reprezentat sub forma unei figuri geometrice alcătuite din puncte (care corespund vârfurilor) și din linii drepte sau curbe care unesc aceste puncte (care corespund muchiilor sau arcelor).

Numim gradul unui nod particular v , numărul de arce care sunt conectate la acel nod și se notează de obicei cu  sau cu .

Dacă adunăm gradele tuturor nodurilor din graful G, obținem de două ori numărul de muchii:

Faptul că membrul drept al ecuației va fi mereu par, implică aceeași proprietate în membrul stâng, pentru ca egalitatea să fie satisfăcută.

Observații:

1. Cu ajutorul unui graf neorientat putem modela o relație simetrică între elementele unei mulțimi, în timp ce cu ajutorul unui graf orientat modelăm o relație care nu este simetrică.

2. Între oricare două vârfuri ale unui graf poate exista cel mult o muchie/arc. Dacă între două vârfuri există mai multe muchii/arce atunci structura se numește multigraf. Nu vom lucra cu structuri multigraf.

3. În practică, informațiile asociate unui graf pot fi oricât de complexe, dar, pentru a simplifica, vom considera că vârfurile grafului sunt etichetate cu numere naturale de la 1 la n (unde cu n vom nota numărul de vârfuri din graf). Această numerotare nu este o restrângere a generalității (de exemplu, numărul vârfului poate fi considerat poziția pe care sunt memorate într-un vector informațiile asociate vârfului).

4. În unele lucrări de specialitate, un vârf al grafului se numește nod.

Grafurile au o importanță imensă în informatică, de exemplu:

în unele problemele de sortare și căutare – elementele mulțimii pe care se face sortarea sau căutarea se pot reprezenta prin noduri într-un graf;

schema logică a unui program se poate reprezenta printr-un graf orientat în care o instrucțiune sau un bloc de instrucțiuni este reprezentat printr-un nod, iar muchiile direcționate reprezintă calea de execuție;

în programarea orientată pe obiecte, ierarhia obiectelor (claselor) unui program poate fi reprezentată printr-un graf în care fiecare nod reprezintă o clasă, iar muchiile reprezintă relații între acestea (derivări, agregări).

Un graf orientat reprezinta o pereche ordonata de multimi G=(X,U), unde X este o multime finita si nevida, numita multimea nodurilor, si U este o multime formata din perechi ordonate de elemente ale lui X, numita multimea arcelor.

Exemplu:

Figura 1.1.2.1 Graf orientat

Un graf orientat G = (V, E) în care fiecare muchie (u, v) ∈ E are o capacitate c(u, v) ≥ 0 și două noduri speciale: o sursăs și o destinație t. Dacă (u, v) 6∈ E, se consideră că c(u, v) = 0. Scriem u v pentru a indica existența unei căi de la u la v, și presupunem că fiecare nod v ∈ G este pe o cale de la s la t, adică există o cale s→v→ t.

Un flux în o rețea de transport G este o funcție f : V × V → R care satisface 3 condiții:

Restricție de capacitate: Pentru toți u, v ∈ V, f (u, v) ≤ c(u, v).

Antisimetrie: pentru toți u, v ∈ V, f (u, v) = −f (v, u).

Conservarea fluxului: Pentru toți u ∈ V − {s,t}, X v∈V f (u, v) = 0. f (u, v) se numește flux de rețea de la nodul u la v. Valoarea fluxului f este |f | = P v∈V f (s, v), adică, fluxul total de rețea care pleacă din sursă.

1.3 Modele ale teoriei grafurilor pentru problemelece țin de optimizarea fluxului de transport

Modele pentru problemele ce țin de fluxul de transport

Pentru Cercetarea Operațională, problema enunțată va prezenta interes numai dacă respectă următoarele ipoteze:

a) cel puțin o sursă poate aproviziona mai multe destinații și cel puțin o destinație poate primi unități de flux de la mai multe surse. Rutele de legătură pot avea și alte puncte comune în afara surselor și destinațiilor, numite puncte intermediare sau de tranzit. Nu sunt excluse legăturile directe între surse sau între destinații. În principiu, orice rută poate fi parcursă în ambele sensuri, dar pot exista și rute cu sens unic.

Ansamblul surselor, destinațiilor, al punctelor intermediare și al rutelor de legătură se va numi rețea de transport; el se identifică cu un graf neorientat sau parțial orientat ca în figura 1.1.1.

b) Unele rute de legătură pot avea limitări superioare și / sau inferioare pentru volumul unităților de flux ce se deplasează într-un sens sau altul. Aceste limitări poartă numele de capacități (inferioare, respectiv superioare). În continuare, vom avea în vedere numai cazul în care toate capacitățile inferioare sunt egale cu zero, capacitățile superioare fiind exprimate prin numere pozitive.

c) Există un cost al deplasării unei unități de flux de la un punct al rețelei la altul,cost care poate fi exprimat în bani, timp sau distanță. Sunt situații în care acest cost poate semnifica profitul obținut de pe urma deplasării. Pe aceeași rută, costurile ce și capacitățile pot diferi în funcție de sensul de parcurgere. Ipoteza a) va fi întotdeauna presupusă în timp ce ipotezele b) și c) pot ființa separat sau simultan. 1) În prezența ipotezei c) și absența condiției b) se pune problema deplasării cantității de flux Q de la surse la destinații la un cost total minim. Dacă sursele sunt în legătură directă cu destinațiile obținem problema clasică de transport, care va face obiectul secțiunilor imediat următoare.

Modele de simulare pe calculator

Procese mai complicate din procesul tehnologic de transport  cum ar fi:

§   conducerea acestuia;

§   întocmirea și corectarea operativă a planului tehnic de transport;

§   amplasarea optimă a instalațiilor, echipamentelor și mijloacelor de transport;

§   dezvoltarea rațională a unitaților și activităților de bază etc.

nu se pot rezolva prin direct, prin metode algebrice. Ele cuprind probleme combinatorii cu multe variante și probleme logice care se rezolvă fie prin calcularea directă a tuturor variantelor posibile, atunci cînd se poate realiza un algoritm în acest sens, fie prin aplicarea simulării, caz în care este necesară întocmirea modelelor de simulare specifice obiectivului urmărit.

1.3.2.Modele ale teoriei grafurilor pentru problemele ce țin de fluxul de transport

O rețea de transportG=(V,E) este un graf orientat în care fiecărui arc (u,v)E îi este asociată o capacitate pozitivă c(u,v) ≥0. Dacă (u,v)E vom considera că c(u,v)=0. Vom distinge două vârfuri în rețea: un vârf sursă s și un vârf destinație t.

Fie G=(V,E) o rețea de transport cu o funcție f:V*V cu valori reale care satisface următoarele trei condiții:

Restricție de capacitate: Pentru orice u,vV avem f(u,v)≤ c(u,v).

Antisimetrie: Pentru orice u,vV avem f(u,v)= -f(v,u).

Conservarea fluxului: Pentru orice uV-{s,t} avem .

Să ne imaginăm o situație în care un material este transportat într-un sistem de la sursă, unde este produs, la destinație, unde este consumat. La sursă se produce materialul într-un ritm constant, iar la destianție se consumă în același ritm. Intuitiv, „fluxul” materialului, în orice punct al sistemului, este ritmul în care materialul se deplasează. Rețelele de transport pot modela scurgerea lichidului în sisteme cu țevi, deplasarea pieselor pe benzi rulante, scurgerea curentului prin rețele electrice, deplasarea informațiilor prin rețelele de comunicații, și multe altele.

Fiecare arc în rețeaua de transport poate fi considerat drept conductă pentru material. Fiecare conductă are o capacitate dată, care este de fapt ritmul maxim cu care lichidul se poate deplasa în conductă. De exemplu, printr-o țeavă pot curge cel mult 2000 litri pe oră, sau pe un fir conductor cu curent electric de maxim 20 amperi. Vârfurile (nodurile) sunt joncțiunile conductelor și în afara vârfului sursă și destinație, materialul nu se poate acumula în nici un vârf. Altfel spus, cantitatea de material care intră trebuie sa fie egală cu cea care iese. Această proprietate se numește „conservarea fluxului” și este identică cu legea lui Kirchoff în cazul curentului electric.

Figura 1.1.3.2.1 Rețea de transport

Exemplul clasic de rețea de transport este reprezentat de o serie de conducte dispuse într-un robinet s și un canal de scurgere t. Fiecare conducta (i,j) este caracteriyata prin cantitatea maximă de apă c(i,j), care poate să treacă la un moment dat prin conductă. Problema aflării fluxului maxim presupune determinarea cantitaății maxime de apă care poate fi pompată prin robinetul s astfel încât pe nici o conductă să nu se depășească capacitatea maximă permisă. În figura 1 este preyentată o rețea de transport cu 7 noduri, dintre care o sursă s și o destinație t. Fiecărui arc îi este atașată o valoare pozitivă, reprezentând capacitatea maximă admisă pe arcul respectiv.

1.3.3.Modele ale teoriei grafurilor pentru problemelece țin de optimizarea fluxului de transport

Arborele de acoperire minimă (sau arborele de întindere minim) într-un graf neorientat și cu pondere aferentă – este un arbore de acoperire a grafului care are ponderea minimă posibilă, iar ponderea arborelui se referă la suma ponderilor de pe muchiile sale constitutive.

Figura 1.1.3.3.1 Arbore de acoperire minimă

Un exemplu de copac cu cost minim într-un graf. Numerele de pe muchii denotă mărimea costului.

Problema de a găsi copacul de cost minim într-un graf este adesea găsit într-un asemenea cadru:

Să presupunem că există N orașe pentru a fi conectate cu drumuri, astfel încât să puteți trece de la orice oras la un orice alt (fie direct, fie prin alte orașe). 

Se permite de a construi drumuri între perechi de orașe specificate și este cunoscut costul de construcție a fiecărei astfel de drum.

Este necesar de a decide ce drumuri ar trebui să fie construit pentru a minimiza costul total de construcție. Această problemă poate fi formulată în termeni de teoria grafurilor ca problema de a găsi copacul de cost minim într-un graf ale cărui noduri reprezintă orașul, muchiile – este perechea de orașe între care poate fi stabilită calea de legătură, iar ponderea muchiei este costul de construcție a drumului în cauză.

Adeseori suntem tentați să credem simplul fapt de a traversa străzi sau poduri nu implică nici o idee deosebită. Iată insă că există o celebră problemă de traversare in care singura idee implicată este aceea de “traversare”, problema celor sapte poduri din Königsberg. Această banală si totusi foarte controversată problemă a dus la apariția si dezvoltarea teoriei grafurilor.

Problema se pune cam asa:

Orasul Konigsberg era asezat pe coasta Mării Baltice, la gurile raului Pregel.

Pe rau erau două insule legate de țărmuri si intre ele de sapte poduri ca înfigura 1.1.3.3.2.

Figura 1.1.3.3.2 Modelul problemei orașului Konigsberg

Oamenii care cutreierau aceste insule au observat că dacă porneau de pe malul sudic al raului, nu puteau să-si planifice plimbarea astfel incat să traverseze fiecare pod o singură dată. Se părea că ori trebuia să sară un pod ori să-l traverseze de două ori. In anul 1735 Euler a descoperit că nu mai are rost să se incerce, propunand următoarea analiză a problemei, din punct de vedere matematic:

Să considerăm mai întâi insula estică (figura 1.1.3.3.3.):

Figura 1.1.3.3.3 Insula Estică

sunt trei poduri care duc la ea. Deoarece se pleacă de pe malul sudic, inseamnă că se pleacă din afara insulei estice. Deoarece fiecare din cele trei traversări trebuie efectuate o singură dată, plimbarea trebuiesă se termine pe insula estică. Să considerăm acum insula vestică: sunt cinci poduri care duc pe ea, iar cinci este din nou număr impar. Asadar plimbarea incepe în afara insulei, si deci trebuie să se termine pe insula vestică. Aceasta inseamnăcă plimbarea se termină in două locuri diferite simultan ceea ce e imposibil. Soluția dată de Euler este tipică pentru personalitatea si ingeniozitatea sa. Tot el a scris in anul 1736 prima lucrare de teorie a grafurilor despre problema acestor sapte poduri. Un ciclu al unui graf G care conŃine toate muchiile lui G se numeste ciclu eulerian. Un graf G care are un ciclu eulerian se numeste graf eulerian. Un graf G fără varfuri izolate este eulerian dacă si numai dacă este conex si gradele tuturor varfurilor sale sunt numere pare. Din punct de vedere al teoriei grafurilor, problema se pune cam asa: cele patru regiuni (insule si maluri) A,B,C,D si cele sapte poduri le reprezentăm in graful următor (figura 1.1.3.3.4.):

Figura 1.1.3.3.4Modelul insulei cu 7 poduri

Figura 1.1.3.3.5 Modelul celor 7 poduri

Muchiile grafului reprezentand posibilitățile de trecere de pe un mal pe un pod si reciproc. Problema are soluție dacă acest graf conține un ciclu eulerian. Un astfel de ciclu, utilizează la fiecare trecere printr-un varf două muchii ce nu mai pot fi folosite pentru o nouă trecere. Cum fiecare dintre cele patru vîrfuri (A,B,C,D) au grade impare, rezultăcă ultima muchie va rămane nefolosită sau va fi folosită pentru a face trecerea de final (pentru a incheia plimbarea). Aceasta ar însemna că ori va rămane la unul din varfuri, o muchie nefolosită (fapt ce demonstrează că nu avem un ciclu eulerian) ori plimbarea ar trebui să se termine in mai multe locuri simultan ceea ce e iarăsi imposibil. Ciclu eulerian: Fiind dat un graf neorientat, să se verifice dacă este graf eulerian si in caz afirmativ, să se determine un ciclu eulerian al său.

Model:

Fie G = (V, E) un graf conex cu n = V și cu muchiile valorizate v(e) 0, eE.

Etapa de inițializare:

Din mulțimea muchiilor E se alege o muchie e1 cu valoarea v(e1) cea mai mică. Dacă există mai multe muchii cu aceeași valoare se alege una dintre acestea. Fie Y mulțimea muchiilor alese. Inițial Y = {e1} și |Y| = 1.

Etapa iterativă:

Din mulțimea muchiilor E – V se alege o muchie ei cu valoarea v(ei) cea mai mică, pentru care Vei nu conține un ciclu. Se ia YeiY și |Y| + 1 |Y|.

Etapa iterativă se repetă până când sunt alese n-1 muchii. H = (V, Y) este arborele de acoperire de valoare minimă.

Arborele de valoare minimă H = (V, Y) este determinat de muchiile alese. În cazul în care există mai multe muchii de valori egale, arborele de valoare minimă nu este, în general, unic. Este preferabil, în aceste situații, să fie determinați toți arborii de valoare minimă și dintre aceștia un manager (decident) să îl aleagă pe cel mai convenabil corespunzător unui alt criteriu economic.

Algoritmul Kruskal este foarte simplu. El intră în categoria algoritmilor de tip "greedy" (lacom) deoarece la fiecare pas al algoritmului se alege cea mai bună variantă. Totuși, acesta algoritm din știința managementului produce întotdeauna soluția optimă.

Algoritmul Kruskal poate fi utilizat și pentru determinarea arborilor de acoperire de valoare maximă, prin înlocuirea, în algoritm: "se alege muchia cu valoarea cea mai mică" cu "se alege muchia cu valoarea cea mai mare".

Problema modernizării rețelei de drumuri

Prefectura județului X și-a fixat ca obiectiv modernizarea rețelei drumurilor care leagă localitățile județului conform grafului din figura1.1.3.3.6. Pe fiecare muchie este înscrisă valoarea numerică în u.m. a costului modernizării tronsonului respectiv. În prima etapă se caută să se modernizeze numai unele drumuri astfel încât fiecare localitate să fie conectată la cel puțin un drum modernizat și costul întregii operații de modernizare (parțială) să fie minim.

Figura 1.1.3.3.6Determinarea unui arbore de valoare minimă.

Problema drumului de valoare minimă (Shortest Path Problem). Algoritmul lui Dijkstra

Toate procedurile cunoscute de căutare a drumurilor de valoare minimă rezolvă problema P(s). Unele sunt capabile să rezolve și cazul mai general în care ponderile arcelor premise pot fi și negative.Pentru cazul mai simplu al ponderilor nenegative în totalitate, algoritmul lui DIJKSTRA (citește Deikstra), 1959, pare a fi cel mai adecvat.

Prezentarea algoritmului necesită câteva pregătiri.

Pe parcursul derulării procedurii, nodurile grafului G se impart în două categorii:

Noduri cercetate: un nod i se consideră cercetat în momentul în care algoritmul “a găsit” un drum de valoare minimă de la nodul de plecare s la nodul i;

Noduri necercetate.

La start, singurul nod cercetat este nodul de plecare s; toate celelalte noduri sunt declarate necercetate.

Să considerăm un nod cercetat i. Dintre toate nodurile j necercetate și vecine cu i (adică există arcul permis (i,j) ) reținem pe acela pentru care valoarea este cea mai mică. Nodul reținut se declară nod candidat asociat nodului cercetat i. (candidat la… dobândirea calității de nod cercetat!) Este posibil ca pentru același nod cercetat să existe mai mulți candidați sau să nu existe nici unul după cum este posibil ca același nod necercetat să „candideze” din partea mai multor noduri cercetate!

Figura1.1.3.3.7 Vizualizarea unui nod cercetat

În figura1.1.3.3.7 este vizualizat un nod cercetat i împreună cu un candidat al său j. Nodul i fiind presupus cercetat, aceasta înseamnă că, în etapele anterioare, algoritmul a găsit un drum de valoare minimă de la s la i. Acest drum, completat cu arcul (i,j), reprezintă un drum de la nodul s la nodul (necercetat) j pe care îl vom numi drumul asociat candidatului j și a cărui valoare este .

Ca urmare a faptului că un nod necercetat poate să candideze din partea mai multor noduri cercetate este posibil ca el să aibă mai multe drumuri asociate!

Cu aceste pregătiri putem trece la prezentarea algoritmului lui Dijkstra.

Start:Nodul de plecare se declară nod cercetat și toate celelalte noduri din graf se declară necercetare.

Pasul iterativ:Pentru fiecare nod cercetat i se identifică candidatul sau candidații asociați lui i și se calculează valorile drumurilor asociate acestor candidați. Nodul candidat j al cărui drum asociat are cea mai mică valoare va fi declarat nod cercetat. Teoria ne asigură că drumul asociat lui j este un drum de valoare minimă de la s la j. Se reia pasul iterativ.

Algoritmul se oprește în momentul în care:

Nu mai există noduri candidate:

sau

Nodul de destinație t a fost declarat nod cercetat.

Model:

În graful din figura1.1.3.3.8 valorile numerice înscrise pe muchii reprezintă distanțe. Se cere determinarea celui mai scurt drum de la nodul O la nodul T. Atenție:absența orientărilor vrea să însemne că orice muchie poate fi parcursă în ambele sensuri (deci graful are 11 muchii și 22 arce permise). Aplicăm algoritmul lui Dijkstra.

Soluție:

Start Nodul de plecare O este declarat cercetat; celelalte șase noduri ale grafului sunt declarate necercetate.

Iterația 1

Singurul nod cercetat O are trei vecini A,B,C dintre care, cel mai apropiat, este A. Nodul A va fi unicul candidat asociat nodului cercetat O. Declarăm cercetat nodul A; drumul cel mai scurt de la O la A se reduce la arcul OA. Reținem arcul OA pentru graful G*(O) al drumurilor de valoare minimă cu originea în O.

Figura1.1.3.3.8 Valorile numerice înscrise pe muchii

Iterația 2 Avem două noduri cercetate O și A.

Vecinii necercetați ai lui O sunt nodurile B și C; deoarece este mai apropiat de O, nodul C este nodul candidat asociat – în această iterație – nodului O.Drumul asociat lui C se reduce la arcul OC și are valoarea 4.

Vecinii necercetați ai lui A sunt B și D; candidat va fi nodul mai apropiat B. Drumul asociat nodului B se obține „prelungind” drumul de valoare minimă de la O la A – găsit la iterația 1 – cu arcul AB ; lungimea drumului este egală cu 2 + 2 = 4.

Avem două noduri candidate C și B ale căror drumuri asociate au aceeași lungime 4. Le declarăm pe amândouă ca fiind noduri cercetate. Conform teoriei ,drumurile asociate sunt cele mai scurte drumuri către ele.

Iterația 3 În acest moment nodurile O, A, B și C sunt cercetate.

Nodul O nu mai are vecini necercetați.

Nodul A are un singur vecin necercetat, nodul D, care va fi și candidatul său. Drumul asociat are lungimea 2 + 2 = 4 iar ultimul său arc component este AD.

Vecinii necercetați ai lui B sunt D și E; candidatul lui B va fi nodul mai apropiat E. Drumul minim până la B are lungimea 4 (iterația 2) astfel că drumul asociat candidatului E va avea lungimea 4 + 3 = 7 (s-a adăugat lungimea ultimului arc BE).

E va candida și din partea lui C ca unic vecin necercetat și ca urmare va avea un al doilea drum asociat, obținut prelungind drumul minim până la C (în fapt, arcul OC) cu arcul CE. Lungimea noului drum este 4 + 4 = 8.

Comparăm lungimile drumurilor asociate construite. Cel mai scurt se termină în E, înainte de a ajunge în E trece prin B și are lungimea 7. În consecință declarăm E nod cercetat și reținem arcul BE ca ultim arc pe drumul cel mai scurt către E.

Considerațiile de mai sus au fost sintetizate în tabelul 1.1 prezentat mai jos

Figura1.1.3.3.9Determinarea efectivă a nodurilor prin care trece drumul cel mai scurt de la O la T

Determinarea efectivă a nodurilor prin care trece drumul cel mai scurt de la O la T sau la oricare alt nod se face din aproape în aproape „de la sfârșit către începutul drumului” folosind arcele reținute pe parcurs.

Există două drumuri optime indicate în figura1.1.3.3.9:

În fapt, algoritmul a determinat drumurile de valoare minimă de la O la toate celelalte noduri –

Figura1.1.3.3.9Două drumuri optime

Tabelul 1.1

Iterațiile de determinarea a drumului optim pentru graful examinat

CAPITOLUL II. Metodologiile și obiectivele cercetării

2.1.Teoria grafurilor și modelele de studiu și analiză a sarcinilor cu caracter aplicativ

După cum am menționat în paragraful 1.3 din capitolul precedent, există diferite modele de analiză teoretică, rezultatele cărora sunt de o eficiență dubioasă.

Multe din problemele formulate nu pot fi soluționate prin modelele descrise, din simplul considerent că ele sunt mult mai complexe, întrunesc de multe ori mai multe sarcini în una și aceeași problemă.

Urmează să fie prezentat modelul de lucru al Parcului Industrial în care în mod deosebit sunt scoase în evidență restricțiile, inclusiv cele de teritoriu cu arie limitată și închisă.

PCT 1 nu este prevăzut pentru accesul (intrări și ieșiri) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” și deci urmează să fie exclus din model

În conformitate cu cerința parvenită din partea rezidentului SC „STARNET” SRL, prin PCT 3, urmează să fie redus în mod substanțial accesul (intrări și ieșiri) transportului auto de tonaj mare și mediu. Această precondiție este o restricție dură asupra problemei, deoarece ea reduce aria de analiză a accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu doar la un singur PCT, si anume la PCT 2.

Pornind de la precondiția 2, se acceptă identificarea unor noi oportunități a accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” adițional prin alte 2 PCT-uri, și anume:

PCT 4, ce urmează să fie construit, cu ieșire spre strada Messager și

PCT 5, cu ieșire spre stradela Coandă, ce urmează să fie deconservat.

Figura.2.1.1.1Raportul “Informația privind fluxul pe transport, înregistrat la PCT 2 și PCT 3 din cadrul PI „TRACOM” pentru perioada 01.09.2014-21.09.2014 ”

Figura.2.1.1.2Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele

Figura.2.1.1.3Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele, GRAF orientat, un model matemati

2.2.Teoria grafurilor privind optimizarea fluxului transportului auto pe un teritoriu cu arie limitată și închisă

Arborele de acoperire minimă (sau arborele de întindere minim) într-un graf neorientat și cu pondere aferentă – este un arbore de acoperire a grafului care are ponderea minimă posibilă, iar ponderea arborelui se referă la suma ponderilor de pe muchiile sale constitutive.

Problema de a găsi copacul de cost minim într-un graf este adesea găsit într-un asemenea cadru:

Să presupunem că există N puncte pentru a fi conectate cu drumuri, astfel încât să puteți trece de la orice punct la un orice alt (fie direct, fie prin alte puncte). 

Se permite de a construi drumuri între perechi de puncte specificate și este cunoscut costul de construcție a fiecărei astfel de drum.

Este necesar de a decide ce drumuri ar trebui să fie construit pentru a minimiza costul total de construcție. Această problemă poate fi formulată în termeni de teoria grafurilor ca problema de a găsi copacul de cost minim într-un graf ale cărui noduri reprezintă punctele, muchiile – este perechea de puncte între care poate fi stabilită calea de legătură, iar ponderea muchiei este costul de construcție a drumului în cauză.

În cazul PI “TRACOM”, copacul de cost minim este după cum se prezintă

Figura.2.2.1.1arborele de cost minim

Iar drumul minim dintr-un vîrf al grafului în unul altul se prezintă după cum urmează:

Calculele au fost efectuate după algoritmul Floyd.

Figura.2.2.1.2 Drumul minim dintr-un vîrf al grafului în altul

Tabel 2.1.

TABELUL NODURILOR

2.3. Modelul de studiu și analiză privind optimizarea accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM”

Parcul Industrial a fost format în baza activelor Uzinei de tractoare „TRACOM” S.A. în cadrul teritoriului cu suprafața de 32,2607 ha, constituind proprietatea publică a statului.

Figura 2.2.3.1 Schema infrastructurii PI Tracom

PI „TRACOM” dispune de 3 PCT-uri active. Doar 2 categorii de transport auto sunt luate în considerare, – de tonaj mare, auto cu greutate mai mare de 30 tone și de tonaj mediu, auto cu greutate 10-20 tone.

Figura 2.2.3.2 Schema pentru camioane de tonaj mare

Figura 2.2.3.3 Schema pentru camioane de tonaj mediu 10-20 tone

Prin urmare, observăm că rezidenții PCT 1,2,4 pot dispune de tonaj mare,acesția fiind Centrul de metrologie, Dominova, Elit decor 1, Bicotra, Peste, Aralit, Aralit 1, Zidarul SA Aleie,PrelMet, SadoNorim și Elit Decor, Reupes, Dotarcom, Imona-Grup, Mobile (Mobile), Microcell_1, Radiator, Cartdnord,Starnet-Forjacom.

2.4. Cu privire la restricțiile sarcinii formulate privind resursele materiale, financiare și umane ale Întreprinderii Administratoare ale PI, cît și regimul de lucru al rezidenților PI privind modelul formulat

Ca oricare problemă există anumite restricții relaționate cu problema cercetată. Ele sunt prezentate mai jos:

Doar 2 categorii de transport auto sunt luate în considerare, – de tonaj mare, auto cu greutate mai mare de 30 tone și de tonaj mediu, auto cu greutate 10-20 tone.

PI „TRACOM” dispune de 3 PCT-uri active. Pentru problema formulată mai sus, sunt valabile doar PCT 2 și PCT 3.

În calitate de date de lucru, ce caracterizează accesul transportului auto prin punctele valabile de control, sunt utilizate datele din raportul “Informația privind fluxul pe transport, înregistrat la PCT 2 și PCT 3 din cadrul PI „TRACOM” pentru perioada 01.09.2014-21.09.2014 ” Anexa 1.

Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele, sunt alte date importante utilizate în procesul de modelare. Anexa 2.

PCT 1 nu este prevăzut pentru accesul (intrări și ieșiri) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” și deci urmează să fie exclus din model

CAPITOLUL III. rezultatele cercetării

3.1. Despre formularea problemei de optimizare aaccesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM”

După cum am menționat în paragraful anterior, observăm o serie mare de restricții și astfel aria posibilităților se micșorează, urmează să descriem problema în totalitate și găsirea soluției optime a acesteia.

Problema este optimizarea accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” și reducerea lui prin PCT 3.

Datele problemei/descrierea situației:

Doar 2 categorii de transport auto sunt luate în considerare, – de tonaj mare, auto cu greutate mai mare de 30 tone și de tonaj mediu, auto cu greutate 10-20 tone.

PI „TRACOM” dispune de 3 PCT-uri active. Pentru problema formulată mai sus, sunt valabile doar PCT 2 și PCT 3.

În calitate de date de lucru, ce caracterizează accesul transportului auto prin punctele valabile de control, sunt utilizate datele din Raportul “Informația privind fluxul pe transport, înregistrat la PCT 2 și PCT 3 din cadrul PI „TRACOM” pentru perioada 01.09.2014-21.09.2014 ” Anexa 1.

Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele, sunt alte date importante utilizate în procesul de modelare. Anexa 2.

Precondiții:

PCT 1 nu este prevăzut pentru accesul (intrări și ieșiri) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” și deci urmează să fie exclus din model

În conformitate cu cerința parvenită din partea rezidentului SC „STARNET” SRL, prin PCT 3, urmează să fie redus în mod substanțial accesul (intrări și ieșiri) transportului auto de tonaj mare și mediu. Această precondiție este o restricție dură asupra problemei, deoarece ea reduce aria de analiză a accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu doar la un singur PCT, si anume la PCT 2.

Pornind de la precondiția 2, se acceptă identificarea unor noi oportunități a accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” adițional prin alte 2 PCT-uri, și anume:

PCT 4, ce urmează să fie construit, cu ieșire spre strada Messager și

PCT 5, cu ieșire spre stradela Coandă, ce urmează să fie deconservat.

3.2 Despre algoritmul de rezolvare a problemei de optimizare a accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM”

Reieșind din datele Problemei și Precondițiile expuse mai sus, prezentăm algoritmul de rezolvare a ei:

Rețeaua de drumuri, ce unește PCT-urile, cele existente și cele ipotetice, cu rezidenții, Anexa fost modelată sub forma unui GRAF orientat, un model matematic din teoria grafurilor.

În baza datelor din Raportul “Informația privind fluxul pe transport, înregistrat la PCT 2 și PCT 3 din cadrul PI „TRACOM” pentru perioada 01.09.2014-21.09.2014 ” Anexa 1, au fost identificate căile optime (căile cu lungimi minime) de mișcare a unităților de transport auto de la PCT-uri spre rezidenți. A fost utilizat modelul matematicFloyd–Warshall de identificare a căii din punctul A în punctul B, de lungimea minimă. Suport maxim de date din Raport, prezentat de Serviciul Securitate și Pază, cu contribuția directă a dlui Murzac Victor, Director General Adjunct. În Anexa 4 sunt prezentate câteva căi optime. Ele sunt calculate de la PCT 2 si PCT 3, spre rezidenți.

Pentru efectuarea optimizării a fost introdus următorul indicator:

Costul unui km de drum parcurs de o unitate de transport auto. În calcul valoarea lui a fost egală cu 16 lei, mărime actuală pentru RM. Similar ar fi putut să fie considerat și un alt indicator, cum ar fi cel de plată pentru tona de greutate transportată, care actualmente pentru RM este egală aproximativ cu 23,6 lei

A fost efectuat calculul tuturor costurilor unităților de transport auto de tonaj mare și mediu pe teritoriul PI TRACOM”,care accesează (intră și iese) PCT-urile și se deplaseazăcătre rezidenți, în conformitate cu schema ce urmează /în continuare R-rezident/:

PCT 2->R->PCT 2

PCT 2->R->PCT 4

PCT 2->R->PCT 5

PCT 3->R->PCT 3

PCT 3->R->PCT 4

PCT 3->R->PCT 5

PCT 4->R->PCT 4

PCT 5->R->PCT 5

Rezultatele calculului sânt prezentate în Anexa 5, pentru transportul auto de tonaj mare, și în Anexa 6, pentru transportul auto de tonaj mediu.

Astfel, optimizarea a fost efectuată în baza precondițiilor de mai sus, adică:

prin reducerea accesului la PCT 3 și redirecționarea lui către PCT 2, 4 și 5, precum și

minimizarea costului unității de transport la deplasarea lui pe calea de la PCT-uri spre rezidenți și de la rezidenți spre PCT-uri, adică intrări-ieșiri.

În conformitate cu algoritmul expus mai sus și datele disponibile din Raportul menționat, în calitate de soluții se propun următoarele scheme de utilizare a PCT-urilor, cu lista rezidenților atașată de ele. Rezultatele sânt prezentate în Anexa 7.

REMARCĂ:

Soluția propusă este evident una aproximativă și a fost obținută doar reieșind din datele prezentate în Raportul “Informația privind fluxul pe transport, înregistrat la PCT 2 și PCT 3 din cadrul PI „TRACOM” pentru perioada 01.09.2014-21.09.2014 ” Anexa 1.

Precizare. Problema examinată nu prezintă optimizarea „fluxului”, ci doar a accesului (intrările și ieșirile) transportului auto de tonaj mare și mediu pe teritoriul PI „TRACOM” prin PCT-uri.

Pentru soluționarea problemei a fost scris un cod în Pascal, în combinație cu Borland software, care ne facilitează procesul de soluționare a problemei. Acesta constă în următorii pași:

Lansarea programului

Figura 3.3.2.1 crearea grafului

Selectarea tipului de graf, numerotarea vîrfurilor și selectarea punctului de pornire pentru crearea grafului.

Figura 3.3.2.2 Lansarea programului

Introducem punctele de pornire și oprire

Figura 3.3.2.3 Vîrful de pornire

Figura 3.3.2.4 Vîrful final

Crearea legăturilor

Figura 3.3.2.4 Crearea legăturilor

Vizualizăm matricea creată

Figura 3.3.2.5 Matrice

Verificăm numărul ciclurilor

Figura 3.3.2.6 Cicluri

Alegerea algoritmului

Căutarea drumului optim

Figura 3.3.2.7Drum optim

Alegerea culorilor folosite în graf

Figura 3.3.2.7 Vizualizarea grafului

Programul conține următoarele opțiuni:

Crearea grafului

Anulare

Tipul grafului

Graf incarcat

Numerotarea virfurilor

Setari manual

Matrice

Inchidere

Vizualizarea grafului

Salveaza

Setarea culorilor,mărimii,grosimii pentru fiecare element

Editare

Rezolvare

Numărarea arcurilor, muchiilor, ciclurilor

Înregistrarea

Informații

Proiectarea aplicației privind optimizarea accesului (intrărilor și ieșirilor) transportului auto de tonaj mare și mediu pe teritoriulPI „TRACOM”

În timpul proiectării aplicației privind optimizarea accesului transportului auto de tonaj mare și mediu au fost folosite următoarele fișiere, componente a schemei-bloc al programului.

Figura 3.3.3.1 Parte componentă a programului

În anexe este prezentat listing-ul programului în întregime.

Analiza rezultatelor

Rezultatele-soluții pentru Problema formulată, scheme de utilizare a PCT-urilor, cu lista rezidenților

Mai jos sunt prezentate căile optime – calculate de la PCT 2 spre rezidenți:

Figura 3.3.4.1

Figura 3.3.4.2

Figura 3.3.4.3

Figura 3.3.4.4

Mai jos sunt reprezentate căile optime – calculate de la PCT 3, spre rezidenți.

Figura 3.3.4.5

Figura 3.3.4.6

Figura 3.3.4.7

Figura 3.3.4.8

CONCLUZIE

În baza studiului cu privire la optimizarea fluxului de intrări și ieșiri de transport în parcul industrial Tracom se pot face următoarele concluzii:

Intrările și ieșirile în PCT 2, PCT 4 , PCT 5 sunt cele mai optimale atît pentru transportul de tonaj mare, cît și pentru transportul cu tonaj mediu

Intrările PCT 4 și ieșile prin PCT 4, dar și intrările PCT 5 și ieșirile PCT 5 sunt optime pentru circularea transportului de tonaj mare

Intrările PCT 2 și ieșirile PCT 4, dar și intrările PCT 5 și ieșirile prin PCT 5 sunt optime pentru transportul de tonaj mediu, toate fiind pe teritoriul parcului industrial

Luînd în considerare că prin PCT 3 urmează a fi redus accesul (intrarea și ieșirea) transportului auto de tonaj mare și mediu, precum și reieșind din faptul că costurile totale pentru rezidenții DraurGrup, Torpedo, Cartnord, Radiator după schema (Intrare) PCT 4->Rezident->PCT 4 (Iesire) sunt egale cu 60,1 lei, iar pentru schema (Intrare) PCT 5->Rezident->PCT 5 (Iesire) sunt egale cu 64,1 lei, optimală se consideră schema (Intrare)PCT 4->Rezident->PCT 4 (Ieșire), iar schema (Intrare) PCT 5->Rezident->PCT 5 (Ieșire) urmează a fi considerată recomandabilă.

Luînd în considerare că prin PCT 3 urmează a fi redus accesul (intrarea și ieșirea) transportului auto de tonaj mare si mediu, precum și reieșind din faptul că costurile totale pentru rezidenții ce vor utiliza schema pentru transportul de tonaj mediu, StopElit, Mopasauto, DraurGrup, Torpedo, Zidarul, Glutonus, Capațina (Intrare)PCT 4->Rezident->PCT 4(Ieșire) sunt egale cu 207,5 lei, iar pentru schema (Intrare) PCT 5->Rezident->PCT 5(Ieșire) sunt egale cu 151,7 lei, a considera optimală pentru ei schema (Intrare)PCT 5->Rezident->PCT 5(Ieșire), iar schema (Intrare)PCT 4->Rezident->PCT 4(Ieșire) urmează a fi considerată recomandabilă.

Deci, pentru repartizarea echitabilă a mijloacelor , autoritățile trebuie să dispună de o evaluare a tuturor factorilor care pot afecta fluxul de transport. În baza acestei evaluari, se pot elabora strategii și de a preveni deficiențe în fluxul de transport, cît și a finanțelor foarte mari.

În teza de licență a fost elaborată o aplicație software, care reprezintă un instrument de simulare și oferă o viziune amplă asupra căilor de trecere care pot influența fluxul.

Pentru moment, aplicația nu este un produs finit, deoarece rezultatul reprezintăo schemă cu soluțiiposibile, însă fără ca sistemul informațional să ofere o variantă sigură, aceasta fiind aleasă de utilizator. Pentru urmatoarea etapă se prevede utilizarea algoritmilor multicriteriali care în baza caracteristicilor va selecta varianta optimă.

La etapa actuală, metoda a fost testată pentru structura cheltuieli și optimizare. De asemenea, au fost studiate minuțios teme extracuriculare cum ar fi: Borland software, optimizări, metode noi de procesare în limbajul Pascal, algoritmi care utilizează metoda grafurilor.

BIBLIOGRAFIE

http://ro.wikipedia.org/wiki/Graf – Graf

D. Jungnickel, Graphs, Networks and Algorithms, Algorithms and Computation in Mathematics, 3rd Edition, Springer, 2008.

http://civile.utcb.ro/mao.pdf – Romică Trandafir, Modele și algoritmi de optimizare

C. Croitoru, Tehnici de baza in optimizarea combinatorie, Editura Univ. Al. I. Cuza Iasi, Iasi, 1992.

Planul Urbanistic General și Planul de Amenajare a Teritoriului municipal Chișinău.

Eficiența tehnică a transportului rutier de persoane în regim urban din mun.Chișinău, Victor Ceban,Chișinău 2012

Я. Ю. БЕРЕЗИНА, ГРАФЫ И ИХ ПРИМЕНЕНИЕ , МОСКВА«ПРОСВЕЩЕНИЕ» 1979, pag 6-36

Веткасов Н.И., Псигин Ю.В.Применение методов Теории графов и линейного программирования для решения производственных и технологических задач: Методические указания.Ульяновск: УлГТУ, 2001. Pag 9-36 .

О. Б. Гладких,О. Н. БелыхОсновные понятиятеории графовУчебное пособие2008

В.А.Емеличев, О.И.Мельников, В.И.Сарванов, Р.И.Тышкевич. Лекции по теории графов. М., Наука, 1990

C. Amihăesei. Curs de cercetări operațională. Universitatea Al. I. Cuza.

Sergiu Cataranciuc. Teoria grafurilor în problem și aplicații. Chișinău – 2004

http://www.asecib.ase.ro/Mitrut%20Dorin/Curs/bazeCO/pdf/33Grafuri.pdf

ANEXE

Anexa 1

Listing-ul programului

Maingraf.bdsproj

program MainGraf;

uses

Forms,

Graf in 'Graf.pas' {Form1},

PaintGraf in 'PaintGraf.pas',

newGraf in 'newGraf.pas' {CreateForm2},

FTAbout in 'FTAbout.pas' {AboutFrm},

UnitMartixText in 'UnitMartixText.pas' {FormTextMatrix},

mindAboutProgram in 'mindAboutProgram.pas' {mindProgram},

MatrixWindows in 'MatrixWindows.pas' {MatrixForm},

mapZoom in 'mapZoom.pas' {Form5},

TitleGraf in 'TitleGraf.pas',

Configuration in 'Configuration.pas',

GrafTypes in 'GrafTypes.pas',

AllGrafUnit in 'AllGrafUnit.pas',

HelpFunctions in 'HelpFunctions.pas',

HistoryManager in 'HistoryManager.pas',

ViewSettingGraf in 'ViewSettingGraf.pas' {ViewSettings},

TranslateManager in 'TranslateManager.pas',

SelectGraf in 'SelectGraf.pas' {Form2},

HTMLReport in 'HTMLReport.pas',

registrationHelper in 'registrationHelper.pas',

registration in 'registration.pas' {Form3};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TCreateForm2, CreateForm2);

Application.CreateForm(TAboutFrm, AboutFrm);

Application.CreateForm(TMatrixForm, MatrixForm);

Application.CreateForm(TFormTextMatrix, FormTextMatrix);

Application.CreateForm(TmindProgram, mindProgram);

Application.CreateForm(TForm5, Form5);

Application.CreateForm(TViewSettings, ViewSettings);

Application.CreateForm(TForm2, Form2);

//Application.hint

Application.HintColor := 3128813;

Application.HintPause := 300;

//Form1.SetShortCutHandled(true);

Application.Run;

//Form1.SetShortCutHandled(false);

end.

ViewSettingGraf

ViewSettingGraf;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, PaintGraf, GrafTypes, TranslateManager;

type

TViewSettings = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Image1: TImage;

Label1: TLabel;

GroupBox1: TGroupBox;

Shape1: TShape;

Label2: TLabel;

Label3: TLabel;

Shape2: TShape;

Shape3: TShape;

Shape4: TShape;

Shape5: TShape;

Shape6: TShape;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

GrafSizeTrack: TTrackBar;

GroupBox2: TGroupBox;

Shape7: TShape;

Shape8: TShape;

Shape9: TShape;

Shape10: TShape;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

TrackBar1: TTrackBar;

Label12: TLabel;

GroupBox3: TGroupBox;

Label13: TLabel;

Label14: TLabel;

Shape11: TShape;

Shape12: TShape;

Shape13: TShape;

Shape14: TShape;

Label15: TLabel;

Label16: TLabel;

FontDialog1: TFontDialog;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

ColorDialog1: TColorDialog;

Label17: TLabel;

Label18: TLabel;

procedure FormActivate(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape2MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape4MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape5MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape3MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape6MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape10MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape9MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape7MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape8MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape11MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape12MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape14MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Shape13MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure GrafSizeTrackChange(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{

NormalGraf: TGrafPoint;

ActGraf: TGrafPoint;

NormalDuga: TDuga;

ActDuga: TDuga;

}

normalGraf : TGrafPoint;

normalLine : TDuga;

actGraf : TGrafPoint;

actLine : TDuga;

titleNormal : TTitle;

titleAct : TTitle;

IsPressedOK : boolean;

procedure RedrawPreview();

procedure SaveSettings();

procedure ChangeColor(shape : TShape);

{ Private declarations }

public

procedure SetSettings( NGraf: TGrafPoint; AGraf: TGrafPoint; NDuga: TDuga; ADuga: TDuga;

NTitle: TTitle; ATitle : TTitle);

function IsUserClickOk() : boolean;

procedure GetSavedSettings(var NGraf: TGrafPoint; var AGraf: TGrafPoint; var NDuga: TDuga;

var ADuga: TDuga; var NTitle: TTitle; var ATitle : TTitle);

procedure DoTranslate();

{ Public declarations }

end;

var

ViewSettings: TViewSettings;

implementation

{$R *.dfm}

procedure TViewSettings.FormActivate(Sender: TObject);

begin

RedrawPreview();

end;

procedure TViewSettings.FormCreate(Sender: TObject);

begin

//DoTranslate();

normalGraf := TGrafPoint.create;

normalLine := TDuga.create;

actGraf := TGrafPoint.create;

actLine := TDuga.create;

titleNormal := TTitle.create;;

titleAct := TTitle.create;;

end;

procedure TViewSettings.FormDestroy(Sender: TObject);

begin

normalGraf.Free();

normalLine.Free();

actGraf.Free();

actLine.Free();

titleNormal.Free();

titleAct.Free();

end;

procedure TViewSettings.FormShow(Sender: TObject);

begin

IsPressedOK := false;

end;

procedure TViewSettings.GrafSizeTrackChange(Sender: TObject);

begin

RedrawPreview();

end;

procedure TViewSettings.RedrawPreview();

const

PosShift = 40;

var

w, h, firstActGraf, i, x1, y1, x2, y2 : integer;

posGraf : array [1..5] of TPoint;

//x – first graf y – second graf

posNormalDug : array [1..2] of TPoint;

posActDug : array [1..2] of TPoint;

text : array [1..3] of TSeeText;

Pole : TBitMap;

begin

SaveSettings();

w := image1.width;

h := image1.height;

posGraf[1].x := PosShift;

posGraf[1].y := PosShift;

posGraf[2].x := w – PosShift;

posGraf[2].y := h – PosShift;

firstActGraf := 2;

posGraf[3].x := w – PosShift;

posGraf[3].y := PosShift;

posGraf[4].x := round(w / 2);

posGraf[4].y := round(h / 2);

posGraf[5].x := PosShift;

posGraf[5].y := h – PosShift;

posNormalDug[1].x := 1;

posNormalDug[1].y := 4;

posNormalDug[2].x := 4;

posNormalDug[2].y := 2;

posActDug[1].x := 3;

posActDug[1].y := 4;

posActDug[2].x := 4;

posActDug[2].y := 5;

text[1].x := w – PosShift * 2 – round(PosShift / 2);

text[1].y := 20;

text[1].isActive := false;

text[1].text := TranslateText('Start'){'Старт'};

text[2].x := 2 * PosShift;

text[2].y := h – PosShift;

text[2].isActive := false;

text[2].text := TranslateText('Finish'){'Финиш'};

text[3].x := round(w / 2) – (w shr 2);

text[3].y := round(h / 2) – (h shr 2);

text[3].isActive := true;

text[3].text := TranslateText('Selected_text'){'Выделенный текст'};

Pole := TbitMap.Create;

Pole.Height := image1.Height;

Pole.Width := image1.Width;

// draw duge

for i:= 1 to 2 do

begin

titleNormal.SetStyle(Pole);

x1 := posGraf[posNormalDug[i].x].x;

y1 := posGraf[posNormalDug[i].x].y;

x2 := posGraf[posNormalDug[i].y].x;

y2 := posGraf[posNormalDug[i].y].y;

normalLine.InputDugaData(x1, y1,

x2, y2, round((x1 + x2) / 2), round((y1 + y2) / 2),

normalLine.radius, 1, 2, true);

normalLine.PaintTree(Pole, 0, '');

end;

for i:= 1 to 2 do

begin

titleAct.SetStyle(Pole);

x1 := posGraf[posActDug[i].x].x;

y1 := posGraf[posActDug[i].x].y;

x2 := posGraf[posActDug[i].y].x;

y2 := posGraf[posActDug[i].y].y;

actLine.InputDugaData(x1, y1,

x2, y2, round((x1 + x2) / 2), round((y1 + y2) / 2),

actLine.radius, 1, 2, true);

actLine.PaintTree(Pole, 0, '');

end;

//draf graf

for i:= 1 to 5 do

begin

if (i <= firstActGraf)

then begin

titleNormal.SetStyle(Pole);

normalGraf.InputGrafData(posGraf[i].x, posGraf[i].y, ActGraf.radius, inttostr(i));

normalGraf.PaintPoint(Pole);

end

else begin

titleAct.SetStyle(Pole);

ActGraf.InputGrafData(posGraf[i].x, posGraf[i].y, ActGraf.radius, inttostr(i));

ActGraf.PaintPoint(Pole);

end;

end;

for i:= 1 to 3 do

begin

if (text[i].isActive )

then titleAct.PaintTitle(Pole, text[i].x, text[i].y, text[i].text)

else titleNormal.PaintTitle(Pole, text[i].x, text[i].y, text[i].text);

end;

image1.Canvas.Draw(0, 0, Pole);

Pole.Free;

end;

procedure TViewSettings.SaveSettings();

begin

normalGraf.ColorBrush := Shape4.brush.color;

normalGraf.ColorPen := Shape1.brush.color;

normalGraf.ColorText := Shape5.brush.color;

normalGraf.SizePen := 1;

normalGraf.radius := GrafSizeTrack.position;

actGraf.ColorBrush := Shape3.brush.color;

actGraf.ColorPen := Shape2.brush.color;

actGraf.ColorText := Shape6.brush.color;

actGraf.SizePen := 1;

actGraf.radius := GrafSizeTrack.position;

normalLine.ColorPen := Shape10.brush.color;

normalLine.ColorText := Shape7.brush.color;

normalLine.SizePen := TrackBar1.position;

normalLine.radius := actGraf.radius;

actLine.ColorPen := Shape9.brush.color;

actLine.ColorText := Shape8.brush.color;

actLine.SizePen := TrackBar1.position;

actLine.radius := actGraf.radius;

titleAct.fontLabelColor := Shape14.brush.color;

titleAct.fontLabelBackground := Shape13.brush.color;

titleNormal.fontLabelColor := Shape11.brush.color;

titleNormal.fontLabelBackground := Shape12.brush.color;

end;

procedure TViewSettings.SetSettings( NGraf: TGrafPoint; AGraf: TGrafPoint; NDuga: TDuga;

ADuga: TDuga; NTitle: TTitle; ATitle : TTitle);

begin

Shape4.brush.color := NGraf.ColorBrush;

Shape1.brush.color := NGraf.ColorPen;

Shape5.brush.color := NGraf.ColorText;

GrafSizeTrack.position := NGraf.radius;

Shape3.brush.color := AGraf.ColorBrush;

Shape2.brush.color := AGraf.ColorPen;

Shape6.brush.color := AGraf.ColorText;

GrafSizeTrack.position := AGraf.radius;

Shape10.brush.color := NDuga.ColorPen;

Shape7.brush.color := NDuga.ColorText;

TrackBar1.position := NDuga.SizePen;

Shape9.brush.color := ADuga.ColorPen;

Shape8.brush.color := ADuga.ColorText;

TrackBar1.position := ADuga.SizePen;

Shape14.brush.color := ATitle.fontLabelColor;

Shape13.brush.color := ATitle.fontLabelBackground;

Shape11.brush.color := NTitle.fontLabelColor;

Shape12.brush.color := NTitle.fontLabelBackground;

titleNormal.copyFrom(NTitle);

titleAct.copyFrom(ATitle);

normalGraf.CopyFrom(NGraf);

normalLine.CopyFrom(NDuga);

actGraf.CopyFrom(AGraf);

actLine.CopyFrom(ActLine);

end;

procedure TViewSettings.Shape10MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape10);

end;

procedure TViewSettings.Shape11MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape11);

end;

procedure TViewSettings.Shape12MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape12);

end;

procedure TViewSettings.Shape13MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape13);

end;

procedure TViewSettings.Shape14MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape14);

end;

procedure TViewSettings.Shape1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape1);

end;

procedure TViewSettings.Shape2MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape2);

end;

procedure TViewSettings.Shape3MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape3);

end;

procedure TViewSettings.Shape4MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape4);

end;

procedure TViewSettings.Shape5MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape5);

end;

procedure TViewSettings.Shape6MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape6);

end;

procedure TViewSettings.Shape7MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape7);

end;

procedure TViewSettings.Shape8MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape8);

end;

procedure TViewSettings.Shape9MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ChangeColor(Shape9);

end;

procedure TViewSettings.TrackBar1Change(Sender: TObject);

begin

RedrawPreview();

end;

procedure TViewSettings.BitBtn1Click(Sender: TObject);

begin

IsPressedOK := true;

close();

end;

procedure TViewSettings.BitBtn2Click(Sender: TObject);

begin

IsPressedOK := false;

close();

end;

procedure TViewSettings.BitBtn3Click(Sender: TObject);

begin

fontdialog1.font.name := titleNormal.Name;

fontdialog1.font.style := TFontStyles(titleNormal.fontStyle);

fontdialog1.font.size := titleNormal.fontSizeLabel;

if fontdialog1.execute

then begin

titleNormal.Name := fontdialog1.font.name;

titleNormal.fontStyle := TFontStyle(fontdialog1.font.style);

titleNormal.fontSizeLabel := fontdialog1.font.size;

RedrawPreview();

end;

end;

procedure TViewSettings.BitBtn4Click(Sender: TObject);

begin

fontdialog1.font.name := titleAct.Name;

fontdialog1.font.style := TFontStyles(titleAct.fontStyle);

fontdialog1.font.size := titleAct.fontSizeLabel;

if fontdialog1.execute

then begin

titleAct.Name := fontdialog1.font.name;

titleAct.fontStyle := TFontStyle(fontdialog1.font.style);

titleAct.fontSizeLabel := fontdialog1.font.size;

RedrawPreview();

end;

end;

procedure TViewSettings.ChangeColor(shape : TShape);

begin

colordialog1.color := shape.brush.color;

if colordialog1.execute

then begin

shape.brush.color := colordialog1.color;

RedrawPreview();

end;

end;

function TViewSettings.IsUserClickOk() : boolean;

begin

result := IsPressedOK;

end;

procedure TViewSettings.GetSavedSettings(var NGraf: TGrafPoint; var AGraf: TGrafPoint; var NDuga: TDuga;

var ADuga: TDuga; var NTitle: TTitle; var ATitle : TTitle);

begin

SaveSettings();

NTitle.copyFrom(titleNormal);

ATitle.copyFrom(titleAct);

NGraf.copyFrom(normalGraf);

AGraf.copyFrom(actGraf);

NDuga.copyFrom(normalLine);

ADuga.copyFrom(actLine);

end;

procedure TViewSettings.DoTranslate();

begin

ViewSettings.Caption := TranslateText('View_graph');

Label1.Caption := TranslateText('Current_setting');

Label15.Caption := TranslateText('Active');

Label16.Caption := TranslateText('Common');

BitBtn1.Caption := TranslateText('Save');

BitBtn2.Caption := TranslateText('Cancel');

GroupBox1.Caption := TranslateText('Point_view');

Label2.Caption := TranslateText('Common');

Label3.Caption := TranslateText('Active');

Label4.Caption := TranslateText('_color_line_');

Label5.Caption := TranslateText('_color_fill_');

Label6.Caption := TranslateText('_color_text_');

Label7.Caption := TranslateText('point_size');

GroupBox2.Caption := TranslateText('Arc_view');

Label8.Caption := TranslateText('Common');

Label9.Caption := TranslateText('Active');

Label10.Caption := TranslateText('_color_line_');

Label11.Caption := TranslateText('_color_text_');

Label12.Caption := TranslateText('thickness_arc');

GroupBox3.Caption := TranslateText('text_view');

Label13.Caption := TranslateText('Active');

Label14.Caption := TranslateText('Common');

Label17.Caption := TranslateText('_color_text_');

Label18.Caption := TranslateText('_color_bg_');

BitBtn3.Caption := TranslateText('Font');

BitBtn4.Caption := TranslateText('Font');

end;

end.

Translatemanager

unit TranslateManager;

interface

uses IniFiles, Classes, windows, Dialogs, Configuration, SysUtils, Forms, SelectGraf;

type

// Manager for translate

CTranslateManager = class

iniTranslateFile : TIniFile;

currentLanguage : string;

originalText : TStringList;

translatedText : TStringList;

currentFile : string;

public

destructor Destry();

constructor Create();

procedure LoadFromFile(filename : string);

procedure SetDefaultFileLang();

function GetTranslateText(origText : string) : string;

procedure SaveDefaultIni(filename : string);

procedure ReTranslateAllForm();

function GetDefaultLangFile() : string;

function GetCurrentFile() : string;

private

function GetDefaultText(origText : string) : string;

function GetLanguageSettings() : integer;

end;

function TranslateText(text : string) : string;

const

defaultLanguage = 'Русский';

CTRY_BELARUS = 375; // Belarus

CTRY_KAZAKSTAN = 7; // Kazakstan

CTRY_RUSSIA = 7; // Russin

CTRY_UKRAINE = 380; // Ukraine

var

translate : CTranslateManager;

implementation

uses Graf, FTAbout, mapZoom, MatrixWindows, mindAboutProgram, newGraf, UnitMartixText,

ViewSettingGraf, wait, registration;

function TranslateText(text : string) : string;

begin

result := translate.GetTranslateText(text);

end;

destructor CTranslateManager.Destry();

begin

if (assigned(iniTranslateFile))

then iniTranslateFile.Free;

originalText.Free;

translatedText.Free;

end;

function CTranslateManager.GetDefaultText(origText : string) : string;

var

i : integer;

begin

result := '';

for i:= 0 to originalText.count – 1 do

begin

if (originalText[i] = origText )

then begin

result := translatedText[i];

break;

end;

end;

end;

procedure CTranslateManager.LoadFromFile(filename : string);

begin

if (assigned(iniTranslateFile))

then iniTranslateFile.Free();

currentFile := filename;

iniTranslateFile := TiniFile.Create(ExtractFileDir(Application.ExeName) + '\local\'+ filename);

currentLanguage := iniTranslateFile.ReadString('Main', 'LanguageTitle', currentLanguage);

ReTranslateAllForm();

end;

procedure CTranslateManager.SetDefaultFileLang();

begin

if (assigned(iniTranslateFile))

then begin

iniTranslateFile.Free();

iniTranslateFile := nil;

end;

currentFile := '';

currentLanguage := defaultLanguage;

ReTranslateAllForm();

end;

procedure CTranslateManager.ReTranslateAllForm();

//var

// i : integer;

begin

Form1.DoTranslate();

AboutFrm.DoTranslate();

Form5.DoTranslate();

MatrixForm.DoTranslate();

mindProgram.DoTranslate();

CreateForm2.DoTranslate();

FormTextMatrix.DoTranslate();

ViewSettings.DoTranslate();

form2.DoTranslate();

form4.DoTranslate();

form3.DoTranslate();

//assignfile(output, 'D:\MainProject\!CodingPrj!\!Export_SOFT\Графы\Перевод\newword.txt');

//rewrite(output);

//for i := 0 to originalText.Count – 1 do

//begin

// writeln(originalText[i], '|', translatedText[i], '|', GetTranslateText(originalText[i]));

//end;

//closefile(output);

end;

function CTranslateManager.GetTranslateText(origText : string) : string;

begin

result := '';

if (assigned(iniTranslateFile))

then begin

result := iniTranslateFile.ReadString('Translate', origText, '');

end;

if (result = '')

then begin

result := GetDefaultText(origText);

end;

end;

procedure CTranslateManager.SaveDefaultIni(filename : string);

var

iniFile : TIniFile;

i : integer;

begin

iniFile := TiniFile.Create(filename);

iniFile.WriteString('Head','Language', defaultLanguage);

iniFile.WriteInteger('Head','version', lastVersion);

for i := 0 to originalText.Count – 1 do

begin

iniFile.WriteString('Translate', originalText[i], translatedText[i]);

end;

iniFile.Free;

end;

function CTranslateManager.GetLanguageSettings() : integer;

var

OutputBuffer: PChar;

SelectedLCID: LCID; //DWORD constand in Windows.pas

begin

OutputBuffer := StrAlloc(4); //alocate memory for the PChar

try

try

SelectedLCID := GetUserDefaultLCID;

GetLocaleInfo(SelectedLCID, LOCALE_ICOUNTRY, OutputBuffer, 3);

Result := StrToInt(OutputBuffer);

except

Result := CTRY_RUSSIA; //rusian

Abort;

end;

finally

StrDispose(OutputBuffer); //alway's free the memory alocated

end;

end;

function CTranslateManager.GetDefaultLangFile() : string;

var

lang : integer;

begin

lang := GetLanguageSettings();

if (lang = CTRY_BELARUS)

or (lang = CTRY_KAZAKSTAN)

or (lang = CTRY_RUSSIA)

or (lang = CTRY_UKRAINE)

then result := 'grafEnglish.lang'

else result := 'grafEnglish.lang';

end;

function CTranslateManager.GetCurrentFile() : string;

begin

result := currentFile;

end;

constructor CTranslateManager.Create();

begin

currentLanguage := 'English';

originalText := TStringList.Create();

translatedText := TStringList.Create();

originalText.Add('Not_load_graph');

translatedText.Add('Algoritm pentru graf ponderat');

originalText.Add('Not_ortgraf');

translatedText.Add('Algoritm pentru digrafuri');

originalText.Add('Algor_not_for_load');

translatedText.Add('Algoritm care nu este despre algoritm ponderat.');

originalText.Add('Find_trace_ignory_load');

translatedText.Add('In timpul cautarii, calea este ignorata arce de greutate.');

originalText.Add('Find_trace_ignory_load');

translatedText.Add('Atunci când caută modalități de a ignora greutatea arcului.');

originalText.Add('graph_is_connectivity');

translatedText.Add('Graful este conectat');

originalText.Add('graph_is_not_connectivity');

translatedText.Add('Graful nu este conectat');

originalText.Add('need_select_graph');

translatedText.Add('Este necesar sa se sublinieze virful!');

originalText.Add('concentricity');

translatedText.Add('Excentricitatea virfului ');

originalText.Add('radius_graph_is');

translatedText.Add('Raza grafului este ');

originalText.Add('diametr_graph_is');

translatedText.Add('. diametrul este ');

originalText.Add('algoritm_not_for_load_orgraf');

translatedText.Add('Algoritm pentru digraf incarcat');

originalText.Add('algorint_only_for_load_orgraf');

translatedText.Add('Algoritm doar pentru digraf incarcat ');

originalText.Add('Graf_have_cicle');

translatedText.Add('Graful contine cicluri. cautarea drumului critic este imposibila.');

originalText.Add('load_graf_must_be');

translatedText.Add('Graful trebuie sa fie de la 1 la 50000');

originalText.Add('Enter_not_corret_matrix');

translatedText.Add('Iste introdusa gresit matricea.');

originalText.Add('Matrix_have_not_correct_value');

translatedText.Add('In matrice exista date incorecte.');

originalText.Add('Matrix_is_not_sqr');

translatedText.Add('Matricea nu este patratata.');

originalText.Add('Not_correct_matrix_not_load_matrix');

translatedText.Add('Matricea gresita grafului neincarcat.');

originalText.Add('Matrix_must_be_simertic');

translatedText.Add('Matricea trebuie sa fie simetrica.');

originalText.Add('Scale_setting');

translatedText.Add('Setarea scarii: ');

originalText.Add('Lost_old_graf');

translatedText.Add('In crearea unui nou graf, se pierd datele grafului precedent!!!');

originalText.Add('Contin');

translatedText.Add('Continuare?');

originalText.Add('Create');

translatedText.Add('Creare');

originalText.Add('Matrix_smg');

translatedText.Add('Matrice:');

originalText.Add('First_need_create');

translatedText.Add('Pentru inceput se creaza graful');

originalText.Add('Find_mode');

translatedText.Add('Cautare');

originalText.Add('Version_not_support_count');

translatedText.Add('Aceasta versiune de program nu suporta mai multe muchii.');

originalText.Add('Name_graf');

translatedText.Add('Numele grafului');

originalText.Add('Enter_name_graf');

translatedText.Add('Introduceti numele grafului:');

originalText.Add('Want_save_graf');

translatedText.Add('Salvati acest graf');

originalText.Add('Do_save');

translatedText.Add('Salvare?');

originalText.Add('Show_matrix');

translatedText.Add('Afisarea matricei');

originalText.Add('Hide_matrix');

translatedText.Add('Ascundem matricea');

originalText.Add('Smg_have_more_5000_chars');

translatedText.Add('Mesajul contine mai mult de 5000 simboluri. Mesajul va fi miscorat');

originalText.Add('Have_new_version');

translatedText.Add('Serverul contine o versiune noua .');

originalText.Add('Download_from_site');

translatedText.Add('Accesati site-ul si download versiunea noua?');

originalText.Add('You_have_last_version');

translatedText.Add('Aveti ultima versiune a programului.');

originalText.Add('Error_connect');

translatedText.Add('Eroare de conectare la server !');

originalText.Add('Server_anv');

translatedText.Add('Serverul nu este accesibil.');

originalText.Add('Repeat');

translatedText.Add('Repetati procedura.');

originalText.Add('Internet_connect');

translatedText.Add('Nu sunteti conectat la internet.');

originalText.Add('Edit');

translatedText.Add('Editeaza');

originalText.Add('Enter_new_name');

translatedText.Add('Introduceti un nou nume grafului ');

originalText.Add('Enter_int');

translatedText.Add('Introduceti un numar intreg');

originalText.Add('Enter_load');

translatedText.Add('Introduceti arcul :');

originalText.Add('Uncorrect_number');

translatedText.Add('Este introdus un numar gresit');

originalText.Add('Load_must_be');

translatedText.Add('Arcul contine de la 1 la 50000!');

originalText.Add('Only_load_graf_map');

translatedText.Add('Doar grafurile incarcate contin mapa');

originalText.Add('Graf_is_not_connected');

translatedText.Add('Граф не является связанным');

originalText.Add('First_and_last_must_be_different');

translatedText.Add('Primul si ultimul nod trebuie sa fie diferite.');

originalText.Add('Orgraf_have_more_2stok');

translatedText.Add('Digraful contine mai mult de 2stocuri ');

originalText.Add('Orgraf_must_have_stok');

translatedText.Add('Digraful trebuie sa contina un stoc');

originalText.Add('Orgraf_has_2istok');

translatedText.Add('Digraful contine mai multe de 2 istocuri');

originalText.Add('Orgraf_must_have_stok');

translatedText.Add('Digraful trebuie sa contina stoc');

originalText.Add('Max_stream_is');

translatedText.Add('Volumul maxim este ');

originalText.Add('Graf_');

translatedText.Add(' virf:');

originalText.Add('Hrom_number');

translatedText.Add('Numarul cromatic al grafului ');

originalText.Add('Cannot_find_min_base');

translatedText.Add('Imposibil de gasit arborele cu valoare minima.');

originalText.Add('Graf_have_min');

translatedText.Add('Graful contine arbore de valoare minima ');

originalText.Add('Graf_have_not_gam_trace');

translatedText.Add('Graful nu contine ciclul Hamilton');

originalText.Add('Graf_have_gam_cycle');

translatedText.Add('Graful contine ciclul Hamilton');

originalText.Add('Trace');

translatedText.Add('Drumul');

originalText.Add('Graf_have_not_gam_chain');

translatedText.Add('Graful nu are legatura Hamilton');

originalText.Add('Graf_have_gam_chain');

translatedText.Add('Graful are legatura Hamilton');

originalText.Add('Graf_have_not_el_cycle');

translatedText.Add('Graful nu contine ciclul Eulerian');

originalText.Add('Graf_have_el_cycle');

translatedText.Add('Graful contine ciclul Eulerian');

originalText.Add('Cycle');

translatedText.Add('Ciclul');

originalText.Add('Graf_have_not_duga');

translatedText.Add('Graful nu contine duga');

originalText.Add('Graf_have_not_el_chain');

translatedText.Add('Graful nu contine legatura euleriana ');

originalText.Add('Graf_have_el_chain');

translatedText.Add('Graful contine legatura euleriana ');

originalText.Add('Chain');

translatedText.Add('Legatura ');

originalText.Add('Enter_text');

translatedText.Add('Introduceti textul:');

originalText.Add('Text_tip');

translatedText.Add('Tips pentru text ');

originalText.Add('Algor_floid');

translatedText.Add('Algoritmul Floyd-Warshall:');

originalText.Add('Graf__');

translatedText.Add('Virfuri ');

originalText.Add('Not_reach');

translatedText.Add('Virf imposibil de atins ');

originalText.Add('reach');

translatedText.Add('Posibil de atins ');

originalText.Add('Length_trace');

translatedText.Add('Lungimea legaturii ');

originalText.Add('Algor_dejkstry');

translatedText.Add('Algoritmul Dijkstra :');

originalText.Add('_over_');

translatedText.Add(' peste ');

originalText.Add('reach_graf');

translatedText.Add('Atingerea virfului de virf ');

originalText.Add('Graf_is_not_tree');

translatedText.Add('Graful nu este arbore');

originalText.Add('Graf_is_tree');

translatedText.Add('Graful este un arbore');

originalText.Add('Graf_maybe_planar');

translatedText.Add('Graful este planar. ');

originalText.Add('Graf_is_planar');

translatedText.Add('Graful este planar');

originalText.Add('Graf_is_not_planar');

translatedText.Add('Graful nu este planar ');

originalText.Add('Do_planar_delete');

translatedText.Add('Pentru a cred un graf planar este necesara stergerea uneia din urmatoarele dugi:');

originalText.Add('Graf_have_more32');

translatedText.Add('Graful poate sa contina maxim 32 virfuri');

originalText.Add('Alg_fordBel');

translatedText.Add('Algoritmul Ford-Belman:');

originalText.Add('Graf_is_not_orint');

translatedText.Add('Graful nu este orientat');

originalText.Add('Happend_error');

translatedText.Add('A aparut o eroare');

originalText.Add('Alg_terry');

translatedText.Add('Algoritmul Terry:');

originalText.Add('Not_');

translatedText.Add('nu ');

originalText.Add('Wave_algol');

translatedText.Add('Algoritmul Wave :');

originalText.Add('_over_');

translatedText.Add(' peste ');

originalText.Add('_Graf');

translatedText.Add(' virfuri');

originalText.Add('Text');

translatedText.Add('Text');

originalText.Add('Matrix_smg_uncorrect');

translatedText.Add('Format incorect al matricei');

originalText.Add('In_graf');

translatedText.Add('In fiecare virf');

originalText.Add('Message_sended');

translatedText.Add('Mesaj expediat!');

originalText.Add('Senks_help');

translatedText.Add('Multumimi pentru ajutor!!!');

originalText.Add('Message_not_sent');

translatedText.Add('Mesajul nu a fost trimis!');

originalText.Add('chars_from');

translatedText.Add(' simboluri din 5000 )');

originalText.Add('First_create_garf');

translatedText.Add('Moscova');

originalText.Add('Second_create_garf');

translatedText.Add('Cassiopeia');

originalText.Add('Start');

translatedText.Add('Start');

originalText.Add('Finish');

translatedText.Add('Final');

originalText.Add('Selected_text');

translatedText.Add('Text evidentiat');

originalText.Add('ProgramTitle');

translatedText.Add('Programul "Grafoanalizator" 1.3');

originalText.Add('AddGraf');

translatedText.Add('Adauga virf' );

originalText.Add('DelGrafDuge');

translatedText.Add('Sterge virful sau dugul' );

originalText.Add('HromoNum');

translatedText.Add('Numar Hromo' );

originalText.Add('MaxStream');

translatedText.Add('Flux maxim' );

originalText.Add('AddText');

translatedText.Add('Adauga text' );

originalText.Add('ResultOfAlgoritm');

translatedText.Add('Rezultatele procesarii algoritmului' );

originalText.Add('File');

translatedText.Add('Fisier' );

originalText.Add('LoadGraf');

translatedText.Add('Incarca graf' );

originalText.Add('SaveGraf');

translatedText.Add('Salveaza graf');

originalText.Add('-');

translatedText.Add('-');

originalText.Add('SaveImage');

translatedText.Add('Salveaza imaginea');

originalText.Add('Exit');

translatedText.Add('Iesire');

originalText.Add('GrafMenu');

translatedText.Add('Graf');

originalText.Add('Create__');

translatedText.Add('Creare…');

originalText.Add('AddDuga');

translatedText.Add('Adauga duga' );

originalText.Add('AddText');

translatedText.Add('Adauga text' );

originalText.Add('EditNameGraf');

translatedText.Add('Sugereaza nume virf' );

originalText.Add('EditLoadDuga');

translatedText.Add('Sugereaza informatie dug' );

originalText.Add('DeleteObject');

translatedText.Add('Stergere' );

originalText.Add('ConvertGraf');

translatedText.Add('Convertirea grafului' );

originalText.Add('__notorgarf');

translatedText.Add('… in bigraf' );

originalText.Add('__orgraf');

translatedText.Add('… in bigraf' );

originalText.Add('__load');

translatedText.Add('… in incarcat' );

originalText.Add('__notload');

translatedText.Add('… in neincarcat' );

originalText.Add('EditMatrix');

translatedText.Add('Editeaza matricea' );

originalText.Add('PropGraf');

translatedText.Add('Proprietati graf' );

originalText.Add('Edit');

translatedText.Add('Ajutor' );

originalText.Add('Undo');

translatedText.Add('Anulare' );

originalText.Add('Redo');

translatedText.Add('Repetare' );

originalText.Add('View');

translatedText.Add('Vizualizare' );

originalText.Add('ShowMatrix');

translatedText.Add('Vizualizare matrice' );

originalText.Add('LoadFon');

translatedText.Add('Incarca fundal' );

originalText.Add('ClearFon');

translatedText.Add('Curata fundal' );

originalText.Add('Settings…');

translatedText.Add('Seteaza…' );

originalText.Add('WorkMode');

translatedText.Add('Regim de lucru' );

originalText.Add('MapMode');

translatedText.Add('Regim mapa ' );

originalText.Add('On');

translatedText.Add('Activeaza' );

originalText.Add('Off');

translatedText.Add('Dezactiveaza' );

originalText.Add('ScaleSettings');

translatedText.Add('Seteaza scara: 10;' );

originalText.Add('ModeWorkMouse');

translatedText.Add('Regim de lucru mouse' );

originalText.Add('Construct');

translatedText.Add('Constructor' );

originalText.Add('FindPath');

translatedText.Add('Cauta calea' );

originalText.Add('Algoritm');

translatedText.Add('Algoritm' );

originalText.Add('FindTrace');

translatedText.Add('Cauta drum' );

originalText.Add('AlgoritmTerry');

translatedText.Add('Algoritmul Terry' );

originalText.Add('AlgoritmVawe');

translatedText.Add('Algoritmul "Wave front"' );

originalText.Add('AlgoritmFordBelman' );

translatedText.Add('Algoritm Ford-Belman');

originalText.Add('AlgoritmDejkstri');

translatedText.Add('Algoritm Dejkstri' );

originalText.Add('AlgoritmFloid');

translatedText.Add('Algoritm Floyd-Wallman' );

originalText.Add('ElerTrace');

translatedText.Add('Rutele euleane' );

originalText.Add('FindLoop');

translatedText.Add('Cautarea ciclului' );

originalText.Add('FindTrace');

translatedText.Add('Cautarea legaturii' );

originalText.Add('ExistsElerTrace');

translatedText.Add('Verificarea existentei Eler' );

originalText.Add('GameltonTrace');

translatedText.Add('Ruta Gemelton' );

originalText.Add('DeterminHromNumber' );

translatedText.Add('Determinarea numarului Hrom ' );

originalText.Add('FindMinimalTree');

translatedText.Add('Cautarea arborelui cu acoperire minima' );

originalText.Add('FindMaxStream');

translatedText.Add('Determinarea fluxului maxim' );

originalText.Add('ConnectionDetermin' );

translatedText.Add('Verificarea conexiunii' );

originalText.Add('ExtrensGraf');

translatedText.Add('Excentrarea virfului' );

originalText.Add('DeterminRadiusDiametr' );

translatedText.Add('Determinarea razei si diametrului' );

originalText.Add('IsGrafTree');

translatedText.Add('Verificarea daca graful este arbore' );

originalText.Add('FindCriticalTrace');

translatedText.Add('Cautarea drumului critic' );

originalText.Add('AdvanceAlgoritm');

translatedText.Add('Algoritme speciale ' );

originalText.Add('MaxStream');

translatedText.Add('Trecerea peste posibilitate' );

originalText.Add('GrafAsMap');

translatedText.Add('Crearea grafului in baza mapei ' );

originalText.Add('DeterminPlanar');

translatedText.Add('Verifica planar' );

originalText.Add('VeryLongTrace');

translatedText.Add('Cea mai lunga cale fara obstacole ' );

originalText.Add('LoadNetwork');

translatedText.Add('Calculul incarcatorii prin metoda modelarii ' );

originalText.Add('DeterminALoop');

translatedText.Add('Verificarea aciclitatii' );

originalText.Add('Help');

translatedText.Add('Ajutor' );

originalText.Add('HelpLocal');

translatedText.Add('Ajutor (format PDF)' );

originalText.Add('HelpOnline');

translatedText.Add('Ajutor online' );

originalText.Add('SiteProgram');

translatedText.Add('Siteul programului' );

originalText.Add('MindProgram');

translatedText.Add('Parerea Dvs despre program' );

originalText.Add('CheckUpdate');

translatedText.Add('Verifica noutatile' );

originalText.Add('FeedBack');

translatedText.Add('Feedback' );

originalText.Add('AboutProgram');

translatedText.Add('Despre program' );

originalText.Add('DrawDuga');

translatedText.Add('Deseneaza Duga' );

originalText.Add('DialogFilters');

translatedText.Add('Fisierele grafului(*.txt;*.grafa)|*.txt;*.grafa|Toate fisierele (*.*)|*.*' );

originalText.Add('DialogFilters');

translatedText.Add('Fisierele grafului(*.txt;*.grafa)|*.txt;*.grafa|Toate fisierele(*.*)|*.*' );

originalText.Add('Bitmaps');

translatedText.Add('Bitmaps (*.bmp)|*.bmp' );

//–––––––––––––––––-

originalText.Add('inform' );

translatedText.Add('Informatie' );

originalText.Add('about' );

translatedText.Add('Despre program' );

originalText.Add('FeedBack' );

translatedText.Add('Feedback' );

originalText.Add('Close' );

translatedText.Add('Inchide' );

originalText.Add('Program_' );

translatedText.Add('Program:' );

originalText.Add('grafanaliz' );

translatedText.Add('"Grafoanalizator"' );

originalText.Add('ver' );

translatedText.Add('Versiune:' );

originalText.Add('mainDev' );

translatedText.Add('Principal:' );

originalText.Add('me' );

translatedText.Add('Salunov Ana' );

originalText.Add('Date_create' );

translatedText.Add('Data crearii:' );

originalText.Add('last_update' );

translatedText.Add('Ultima actualizare:' );

originalText.Add('yar' );

translatedText.Add('2004 an' );

originalText.Add('from_aut' );

translatedText.Add('De la autor:' );

originalText.Add('gratitude_pam' );

translatedText.Add('Multumiri V.Drotiev' );

originalText.Add('algor_from_book' );

translatedText.Add('Algoritmi din manuale' );

originalText.Add('SiteProgram:' );

translatedText.Add('Site-ul programului:' );

originalText.Add('WriteToAutor' );

translatedText.Add('Scrie autorului:' );

originalText.Add('LokeProgram' );

translatedText.Add('Va placut programul?' );

originalText.Add('IfwantSupport' );

translatedText.Add('Pentru sustinerea proiectului…' );

originalText.Add('SendMindTo' );

translatedText.Add('Trimite o parere');

originalText.Add('SendToAuthor' );

translatedText.Add('Scrie autorului' );

originalText.Add('CreatingGraf');

translatedText.Add('Crearea grafului');

originalText.Add('Cancel');

translatedText.Add('Anulare');

originalText.Add('Graph_type');

translatedText.Add('Tipul grafului');

originalText.Add('Orintgraph');

translatedText.Add('Bigraf');

originalText.Add('weighted_graph');

translatedText.Add('Graf incarcat');

originalText.Add('Point_marks');

translatedText.Add('Numerotarea virfurilor');

originalText.Add('Begin_from');

translatedText.Add('Incepe cu');

originalText.Add('Numbers');

translatedText.Add('Cifre');

originalText.Add('Roman_alphabet');

translatedText.Add('Alfabet roman');

originalText.Add('Manual_setup');

translatedText.Add('Setari manuale');

originalText.Add('Adjacency_matrix');

translatedText.Add('Matrice');

originalText.Add('Start_point');

translatedText.Add(' De la virful');

originalText.Add('Apply');

translatedText.Add('Aplica');

originalText.Add('Close');

translatedText.Add('Inchidere');

originalText.Add('Please_send');

translatedText.Add('Ne intereseaza parerea Dvs despre program.');

originalText.Add('Youremail');

translatedText.Add('Emailul Dvs');

originalText.Add('rInternet');

translatedText.Add('Este necesara conexiunea la internet');

originalText.Add('64Chars');

translatedText.Add('(64 simboluri)');

originalText.Add('1000Chars');

translatedText.Add('(5000 simboluri)');

originalText.Add('Send');

translatedText.Add('Trimite');

originalText.Add('View_graph');

translatedText.Add('Vizualizarea grafului');

originalText.Add('Current_setting');

translatedText.Add('Setari curente');

originalText.Add('Active');

translatedText.Add('Activ');

originalText.Add('Save');

translatedText.Add('Salveaza');

originalText.Add('Common');

translatedText.Add('Comun');

originalText.Add('Point_view');

translatedText.Add('Vizualizare');

originalText.Add('_color_line_');

translatedText.Add('- culoarea liniei -');

originalText.Add('_color_fill_');

translatedText.Add('- culoare fundal -');

originalText.Add('_color_text_');

translatedText.Add('- culoare text -');

originalText.Add('point_size');

translatedText.Add('Marime virf');

originalText.Add('Arc_view');

translatedText.Add('Vizualizare arc');

originalText.Add('thickness_arc');

translatedText.Add('Grosime arc');

originalText.Add('text_view');

translatedText.Add('Setari text');

originalText.Add('_color_bg_');

translatedText.Add('Culoare fundal');

originalText.Add('Font');

translatedText.Add('Font');

originalText.Add('Select_form_caption');

translatedText.Add('Verifica virf');

originalText.Add('OK');

translatedText.Add('OK');

originalText.Add('Select_first_point');

translatedText.Add('Alegeti virful de pornire');

originalText.Add('Select_finish_point');

translatedText.Add('Alegeti virful final');

originalText.Add('HTMLReport');

translatedText.Add('HTML');

originalText.Add('TXTReport');

translatedText.Add('Text');

originalText.Add('EditText');

translatedText.Add('Editeaza text');

originalText.Add('LastFiles');

translatedText.Add('Ultimele fisiere');

originalText.Add('solve_step');

translatedText.Add('Rezolvare:');

originalText.Add('Point__');

translatedText.Add('Virf ');

originalText.Add('set_color');

translatedText.Add(' culoarea setata ');

originalText.Add('about_drotiev');

translatedText.Add('Multumiri V.Drotiev');

originalText.Add('help_create');

translatedText.Add('pentru ajutor de editare a programului');

originalText.Add('gratitude');

translatedText.Add('Multumiri');

originalText.Add('Weight_line');

translatedText.Add('Linia');

originalText.Add('FindHromNumberAlternativ');

translatedText.Add('Cauta numar Hrom cu algoritmul aliterat');

originalText.Add('MaxClick');

translatedText.Add('Cautarea click maxim');

originalText.Add('Found_click');

translatedText.Add('Click gasit');

originalText.Add('Max_click_is');

translatedText.Add('Maximul click al grafului este ');

originalText.Add('Graf_of_max_click');

translatedText.Add('Virfurile care sunt incluse in click maxim');

originalText.Add('All_click');

translatedText.Add('Clickurile grafului gasite');

originalText.Add('Critacal_path_is');

translatedText.Add('Punctul critic este ');

originalText.Add('Graf_have_cycle_one_down');

translatedText.Add('Graful contine cicluri. Un ciclu il vedeti mai jos :');

originalText.Add('Graf_has_not_cycles');

translatedText.Add('Graful nu contine cicluri.');

originalText.Add('ScaleMapMode');

translatedText.Add('Scara mapei');

originalText.Add('Setup_scale');

translatedText.Add('Setare scara:');

originalText.Add('_10pixels_');

translatedText.Add('(Numarul unitatilor 10 pixel)');

originalText.Add('_int_ ');

translatedText.Add('(numar intreg):');

originalText.Add('10pixes');

translatedText.Add('Numarul unitatilor 10 pixel imagine');

originalText.Add('For_off_register');

translatedText.Add('Pentru a deschide fereastra este necesara inregistrarea.');

originalText.Add('Remaind_time');

translatedText.Add('Timp ramas');

originalText.Add('Reg_is_bad');

translatedText.Add('Inregistrarea ne ajuta sa imbunatatim programul. :)');

originalText.Add('Reg');

translatedText.Add('Inregistrarea');

originalText.Add('For_run_need_reg');

translatedText.Add('Pentru lansare inregistrati-va');

originalText.Add('reg_time');

translatedText.Add('Inregistrarea nu dureaza mult .');

originalText.Add('open_site');

translatedText.Add('Accesati site-ul');

originalText.Add('Get_reg_code');

translatedText.Add('Primiti codul inregistrarii.');

originalText.Add('product_number');

translatedText.Add('Numar produs:');

originalText.Add('Enter_reg_code');

translatedText.Add('Introduceti codul inregistrarii si tastati"Inregistrare":');

originalText.Add('reg_code');

translatedText.Add('Codul registrarii:');

originalText.Add('reg_email');

translatedText.Add('Inregistrati copia , trimitind la adresa [anonimizat] numarul produsului.');

originalText.Add('Registration');

translatedText.Add('Inregistrare');

originalText.Add('need_reg');

translatedText.Add('Este necesara inregistrarea');

originalText.Add('good_reg');

translatedText.Add('Copia este inregistrata');

originalText.Add('bad_reg');

translatedText.Add('Cod gresit');

originalText.Add('regURL');

translatedText.Add('http://grafoanalizator.unick-soft.ru/registration/');

originalText.Add('DetailInfo');

translatedText.Add('Informatii detalii');

originalText.Add('licenseText');

translatedText.Add('Licenta');

end;

end.

Graphtypes

unit GrafTypes;

interface

uses Configuration;

type

TSeeGraf = record//struct of Point

x,y : integer;

radius : integer;

number : integer;

Activ : boolean;

end;

TSeeDuge = record//struct of Arc

x,y : integer;

cost : integer;

Activ : boolean;

activeOrint : integer;

end;

TSeeText = record//struct for text

x, y : integer;

w, h : integer;

wa, ha : integer;

isActive : boolean;

text : string;

end;

// matrix

TMatrix = array of array of integer;

// max matrix

TMaxMatrix = array[1..MaxN, 1..MaxN] of integer;

// type of Events

// sobitoja dlja mishi vniz, dvigat`,Click, 2 click, pravij clik

TMouseEvets=(Mdown, Mup, MMove, Mcl, MDcl, MRCL, KeyDEL, MTfind);

//connectivity matrix

TMasPoint=array[1..MaxN, 1..MaxN] of TSeeDuge;

//array for combinate

//201376 – for 32 element

TMasCombinate = array [1..201376, 1..5] of integer;

// type Title

TTitleType = (TTStaticNumber, TTStaticLetter, TTDinamyc);

procedure CopySeeText(src : TSeeText; var dest : TSeeText);

implementation

procedure CopySeeText(src : TSeeText; var dest : TSeeText);

begin

dest.x := src.x;

dest.y := src.y;

dest.w := src.w;

dest.h := src.h;

dest.wa := src.wa;

dest.ha := src.ha;

dest.isActive := src.isActive;

dest.text := src.text;

end;

end.

Title Graf

unit TitleGraf;

interface

uses Configuration, SysUtils, GrafTypes;

type

CTitleGraf = class

private

// title of graf

graphTitle : array [1..MaxN] of string;

// current type

tType : TTitleType;

// begin number

_beginNumber : integer;

// begin char

_beginChar : char;

// is use big number

_isBigChars : boolean;

public

// fill number title for graf

procedure fillTitleGrafNumber(beginNumber : integer);

// fill eng title for graf

procedure fillTitleGrafEngChars(beginChar : char; isBigChars : boolean);

// return title

function GetTitle(index : integer) : string;

// set type of graf

procedure SetType(titleType : TTitleType);

// delete graf

procedure DeleteGraf(number : integer);

// add new graf

procedure AddGraf(number : integer; title : string);

// return type

function GetType() : TTitleType;

function EQ(other : CTitleGraf) : boolean;

procedure copy(other : CTitleGraf);

function GetBeginNumber() : integer;

function GetBeginChar() : char;

function GetIsBigChar() : boolean;

end;

implementation

// return title

function CTitleGraf.GetTitle(index : integer) : string;

begin

result := graphTitle[index];

end;

// fill number title for graf

procedure CTitleGraf.fillTitleGrafNumber(beginNumber : integer);

var

i : integer;

begin

_beginNumber := beginNumber;

for i:= 1 to MaxN do

begin

graphTitle[i] := IntToStr(beginNumber + i – 1);

end;

end;

// fill eng title for graf

procedure CTitleGraf.fillTitleGrafEngChars(beginChar : char; isBigChars : boolean);

const

charsCount = 26;

var

i, j : integer;

defChar: array [1..MaxN + charsCount] of string;

baseChar : char;

begin

_beginChar := beginChar;

_isBigChars := isBigChars;

if (isBigChars)

then baseChar := 'A'

else baseChar := 'a';

FillChar(defChar, 0, sizeof(defChar));

for i := 1 to MaxN + charsCount do

begin

j := i – 1;

while (j >= charsCount) do

begin

defChar[i] := chr((j mod charsCount) + ord(baseChar)) + defChar[i];

j := round(j / charsCount);

end;

defChar[i] := chr((j mod charsCount) + ord(baseChar)) + defChar[i];

end;

for i:= 1 to MaxN do

begin

graphTitle[i] := defChar[i + ord(beginChar) – ord(baseChar)];

end;

end;

// delete graf

procedure CTitleGraf.DeleteGraf(number : integer);

begin

if (tType = TTDinamyc)

then begin

graphTitle[number] := '';

end;

end;

// add new graf

procedure CTitleGraf.AddGraf(number : integer; title : string);

begin

if (tType = TTDinamyc)

then begin

graphTitle[number] := title;

end;

end;

// return type

function CTitleGraf.GetType() : TTitleType;

begin

result := tType;

end;

// set type of graf

procedure CTitleGraf.SetType(titleType : TTitleType);

begin

tType := titleType;

end;

function CTitleGraf.EQ(other : CTitleGraf) : boolean;

begin

result := (tType = other.tType)

and

(CompareMem(@graphTitle, @other.graphTitle, sizeof(graphTitle)))

end;

procedure CTitleGraf.copy(other : CTitleGraf);

var

i : integer;

begin

tType := other.tType;

for i := 1 to MaxN do

begin

graphTitle[i] := other.graphTitle[i];

end;

end;

function CTitleGraf.GetBeginNumber() : integer;

begin

result := _beginNumber;

end;

function CTitleGraf.GetBeginChar() : char;

begin

result := _beginChar;

end;

function CTitleGraf.GetIsBigChar() : boolean;

begin

result := _isBigChars;

end;

end.

MatrixWindows

unit MatrixWindows;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, ExtCtrls;

type

TMatrixForm = class(TForm)

currentMatrixGrid: TStringGrid;

Label3: TLabel;

Label4: TLabel;

Label1: TLabel;

procedure currentMatrixGridSetEditText(Sender: TObject; ACol, ARow: Integer;

const Value: string);

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormShow(Sender: TObject);

procedure currentMatrixGridKeyPress(Sender: TObject; var Key: Char);

procedure currentMatrixGridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure currentMatrixGridSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

private

{ Private declarations }

public

{ Public declarations }

procedure DoTranslate();

end;

var

MatrixForm: TMatrixForm;

implementation

uses Graf;

{$R *.dfm}

procedure TMatrixForm.currentMatrixGridDrawCell(Sender: TObject; ACol,

ARow: Integer; Rect: TRect; State: TGridDrawState);

var

backColor : TColor;

begin

if(ARow = ACol) and (ACol <> 0)

then begin

backColor := currentMatrixGrid.canvas.brush.color;

currentMatrixGrid.canvas.brush.color := clSilver;

currentMatrixGrid.canvas.rectangle(Rect);

currentMatrixGrid.canvas.brush.color := backColor;

end;

end;

procedure TMatrixForm.currentMatrixGridKeyPress(Sender: TObject; var Key: Char);

begin

if((Key<'0') or (Key>'9')) and (ord(Key) > 16)

then key := char(0);

end;

procedure TMatrixForm.currentMatrixGridSelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

if(ACol = ARow)

then CanSelect := false;

end;

procedure TMatrixForm.currentMatrixGridSetEditText(Sender: TObject; ACol,

ARow: Integer; const Value: string);

var

val : string;

grafVal : integer;

begin

if not assigned(MainGraf)

then exit;

Form1.SaveState();

val := Value;

if(ARow = ACol)

then begin

currentMatrixGrid.cells[ACol, ARow] := '0';

end;

TryStrToInt(val, grafVal);

if (not MainGraf.have_cost) and (grafVal <> 0) and (ARow <> ACol)

then begin

val := '1';

currentMatrixGrid.cells[ACol, ARow] := val;

end;

if(ARow <> ACol) and (MainGraf.orint = 0 ) and (currentMatrixGrid.cells[ARow, ACol] <> Val)

then begin

currentMatrixGrid.cells[ARow, ACol] := Val;

end;

if(not MainGraf.LoadFromGrid(currentMatrixGrid))

then begin

label1.caption := TranslateText('Matrix_smg_uncorrect');

end

else label1.caption := TranslateText('Matrix_smg');

end;

procedure TMatrixForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.N68.caption := TranslateText('Show_matrix');

end;

procedure TMatrixForm.FormCreate(Sender: TObject);

var

s : string;

i : integer;

begin

//DoTranslate();

s := TranslateText('In_graf');

MatrixForm.label4.caption := '';

MatrixForm.label1.caption := TranslateText('Matrix_smg');

for i:= 1 to length(s) do

MatrixForm.label4.caption := label4.caption + s[i] + #13;

top := form1.top + (height shr 1);

left := form1.left + form1.width – (width shr 1);

end;

procedure TMatrixForm.FormShow(Sender: TObject);

begin

Form1.N68.caption := TranslateText('Hide_matrix');

end;

procedure TMatrixForm.DoTranslate();

begin

MatrixForm.Caption := TranslateText('Adjacency_matrix');

Label3.Caption := TranslateText('Start_point');

Label1.Caption := TranslateText('Start_point');

end;

end.

Anexa 2

Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele

Anexa 3

Amplasarea rezidenților, PCT-urile și distanțele dintre ei și ele, GRAF orientat, un model matematic.

Anexa 4

Analiza Accesului (intrare și ieșire) a transportului de tonaj mare prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 2, cu eventuala ieșire spre PCT 4, pentru transportul auto, camioane de tonaj mare, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

Mopasauto, DraurGrup, Torpedo, Glutonus – (Intrare)PCT 2->Rezident->PCT 2(Iesire) /optimală/,

Cartnord, Radiator, Tracom – (Intrare)PCT 4->Rezident->PCT 4(Iesire) /optimală/, sau opțiunea (Intrare)PCT 2->Rezident->PCT 4(Iesire) /recomandabilă/

Anexa 4/continuare/

Analiza Accesului (intrare și ieșire) a transportului de tonaj mare prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 2, cu eventuala ieșire spre PCT 5, pentru transportul auto, camioane de tonaj mare, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

Mopasauto, DraurGrup, Torpedo, Glutonus – (Intrare)PCT 2->Rezident->PCT 2(Iesire) /optimală/,

Cartnord, Radiator, Tracom – (Intrare)PCT 5->Rezident->PCT 5(Iesire) /optimală/, sau opțiunea (Intrare)PCT 2->Rezident->PCT 5(Iesire) /recomandabilă

Anexa 4 /continuare/

Analiza Accesului (intrare și ieșire) a transportului de tonaj mare prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 3, cu eventuala ieșire spre PCT 5, pentru transportul auto, camioane de tonaj mare, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

DraurGrup, Torpedo, Cartnord, Radiator – (Intrare)PCT 5->Rezident->PCT 5(Iesire) /optimală/.

Anexa 5

Analiza Accesului (intrare și ieșire) a transportului de tonaj mediu prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 2, cu eventuala ieșire spre PCT 4, pentru transportul auto, camioane de tonaj mediu, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

StopElit, Mopasauto, DraurGrup, Torpedo, Zidarul, Glutonus, Capațina – (Intrare)PCT 2->Rezident->PCT 2(Iesire) /optimală/.

Arama, Solonix, Microcell, Dotarcom, Bicotra, Aralit, Cartnord, Radiator – (Intrare)PCT 4->Rezident->PCT 4(Iesire) /recomandabilă/, sau opțiunea (Intrare)PCT 2->Rezident->PCT 4(Iesire) /optimală/.

Anexa 5 /continuare/

Analiza Accesului (intrare și ieșire) a transportului de tonaj mediu prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 2, cu eventuala ieșire spre PCT 5, pentru transportul auto, camioane de tonaj mediu, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

StopElit, Mopasauto, DraurGrup, Torpedo, Zidarul, Glutonus, Capațina – (Intrare)PCT 2->Rezident->PCT 2(Iesire) /optimală/.

Arama, Solonix, Microcell, Dotarcom, Bicotra, Aralit, Cartnord, Radiator – (Intrare)PCT 5->Rezident->PCT 5(Iesire) /optimală/, sau schema (Intrare)PCT 2->Rezident->PCT 5(Iesire) /recomandabilă/

Anexa 5 /continuare/

Analiza Accesului (intrare și ieșire) a transportului de tonaj mediu prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 3, cu eventuala ieșire spre PCT 4, pentru transportul auto, camioane de tonaj mediu, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

StopElit, Mopasauto, DraurGrup, Torpedo, Zidarul, Glutonus, Capațina – (Intrare)PCT 4->Rezident->PCT 4(Iesire) /optimală/.

Arama, Solonix, Microcell, Dotarcom, Bicotra, Aralit, Cartnord, Radiator – (Intrare)PCT 4->Rezident->PCT 4(Iesire) /optimală/, sau schema (Intrare)PCT 3->Rezident->PCT 4(Iesire) /recomandabilă/

Anexa 5 /continuare/

Analiza Accesului (intrare și ieșire) a transportului de tonaj mediu prin PCT 2, 3, 4 și 5

Accesul (intrarea și ieșirea) prin PCT 3, cu eventuala ieșire spre PCT 5, pentru transportul auto, camioane de tonaj mediu, urmează să se desfășoare pentru rezidenții care au fost studiați, în conformitate cu schema:

StopElit, Mopasauto, DraurGrup, Torpedo, Zidarul, Glutonus, Capațina – (Intrare)PCT 5->Rezident->PCT 5(Iesire) /optimală/.

Arama, Solonix, Microcell, Dotarcom, Bicotra, Aralit, Cartnord, Radiator – (Intrare)PCT 5->Rezident->PCT 5(Iesire) /optimală/, sau schema (Intrare)PCT 3->Rezident->PCT 5(Iesire) /recomandabilă/

Similar Posts