Documente Academic
Documente Profesional
Documente Cultură
2
firmei se realizează prin intermediul activităţii managerilor care în esenţă
reprezintă o înlănţuire de decizii interdependente.
Decizia constituie punctul central al activităţii de management întrucât ea se
regăseşte în toate funcţiile acestuia, şi mai mult, integrarea firmei în cadrul
mediului depinde de calitatea deciziei. În acelaşi timp, calitatea procesului
decizional influenţează reducerea costurilor, eficienţa folosirii fondurilor,
creşterea profitului etc.
3
foarte bine cunoscute de către decident. Procesul decizional implică un consum
mare de timp, pe parcursul căruia se culeg şi analizează informaţii, se consultă
persoane în vederea conturării situaţiei decizionale. În esenţă procesul decizional
constă dintr-un ansamblu de etape prin intermediul cărora se pregăteşte, adoptă,
aplică şi evaluează decizia managerială.
Oportunitatea deciziei. Este de preferat o decizie bună luată în timp util unei
decizii foarte bune luate cu întârziere.
Eficienţa deciziei. Se urmăreşte obţinerea unui efect cît mai bun pentru un
anumit efort.
4
Tip de Caracteristici
decizie
Programate Repetitive, de rutină, reguli şi procese decizionale
Structurate cunoscute, deseori automate, de obicei presupun
"lucruri" mai degrabă decât oameni, pot fi delegate la
nivele inferioare ale organizaţiei.
Neprogramate Noi, nerutiniere, regulile de decizie nu sunt
Nestructurate cunoscute, au un grad ridicat de incertitudine, nu pot fi
delegate la nivele inferioare, pot implica "lucruri", dar
întotdeauna implică oameni.
5
disponibile, estimării valorilor si a probabilităţilor de apariţie a rezultatelor
posibile. Astfel, practic, incertitudinea se transformă în risc.
Starea Explicaţii
rezultatului
Certitudine Există un singur rezultat pentru fiecare alternativă
şi există cunoştinţe complete si exacte referitoare la el.
Risc Exista mai multe rezultate posibile pentru fiecare
alternativă şi fiecăreia-i pot fi ataşate o valoare şi o
probabilitate de realizare a acesteia.
Incertitudine Numărul rezultatelor, valorile si probabilităţile nu
sunt cunoscute.
Procesul decizional este definit ca fiind o serie de paşi care încep cu analiza
informaţiei, continuă cu selectarea dintre mai multe alternative si verificarea
alternativei selectate pe problema aflată în studiu.
6
managerială creatoare, consultarea experţilor, efectuarea de cercetări. În
momentul identificării problemei decizionale, decidentul conştientizează existenţa
mai multor cursuri de acţiune posibile. El poate cunoaşte aceste alternative prin
implicare directa sau prin intermediul altor persoane. Alegerea variantei optime se
face după o serie de metode corespunzătoare modelului matematic care
caracterizează situaţia decizională.
Mulţimea criteriilor decizionale include o serie de caracteristici pe baza
cărora se evaluează şi compară variantele decizionale, în vederea adoptării celei
mai raţionale decizii. Mulţimea criteriilor decizionale este reprezentată de
punctele de vedere ale decidentului care izolează aspecte ale realităţii economice
în cadrul procesului decizional. Criteriile decizionale se caracterizează prin mai
multe niveluri, corespunzătoare diferitelor variante şi/sau stări ale condiţiilor
obiective. Luarea în considerare, într-o situaţie decizională, a mai multor criterii,
trebuie să se facă ţinînd cont de posibilitatea divizării si grupării criteriilor,
precum şi de proprietatea de interdependenţă a acestora. De exemplu, profitul
poate fi divizat pe produse, subunităţi etc. De asemenea, profitul si costul pot fi
grupate într-un criteriu global reprezentat de rentabilitate. Două criterii sunt
independente dacă fixarea unui obiectiv din punct de vedere al unui criteriu nu
influenţează stabilirea unui alt obiectiv, din punct de vedere al celui de-al doilea
criteriu. În managementul firmei pot fi utilizate criterii de tipul: profit, preţ,
calitate, termen de recuperare a investiţiei, durata ciclului de producţie, gradul de
utilizare a capacităţii de producţie etc.
Mediul ambiant (condiţiile obiective) este reprezentat de ansamblul
condiţiilor interne si externe care sunt influenţate si influenţează decizia. În
mediul ambiant se pot manifesta, pentru o anumita situaţie decizională, mai
multe stări ale condiţiilor obiective. Mediul ambiant se caracterizează printr-o
mobilitate deosebită. În cadrul condiţiilor interne se observă o perfecţionare a
pregătirii personalului, perfecţionare a sistemului informaţional, iar în ceea ce
priveşte condiţiile externe, se înregistrează modificări în legislaţia ţării, modificări
7
în relaţiile firmei cu diverse organisme. Evoluţia mediului ambiant se manifestă
uneori contradictoriu în ceea ce priveşte influenţa asupra procesului de elaborare a
deciziilor în cadrul firmei. Astfel, creşterea complexităţii activităţii firmei
influenţează în mod nefavorabil fundamentarea deciziilor, în timp ce ridicarea
nivelului de pregătire profesională şi în domeniul managementului are efecte
favorabile asupra luării deciziilor.
Mulţimea consecinţelor cuprinde ansamblul rezultatelor ce s-ar obţine
conform fiecărui criteriu decizional şi fiecărei stări a condiţiilor obiective prin
aplicarea variantelor decizionale. Stabilirea consecinţelor este o activitate care nu
se realizează întotdeauna cu exactitate deoarece nu se cunosc cu certitudine
cauzele ce ar determina producerea lor. Consecinţele pot fi în forma cantitativă
sau calitativă.
Obiectivele deciziei sunt nivelele propuse de către decident pentru a fi
atinse în urma implementării variantei decizionale alese.
8
definite şi structurate, şi tratează procesul decizional ca pe un proces complet
raţional. Ele constituie tehnici de optimizare care presupun condiţii de risc sau
certitudine.
9
CAPITOLUL I
a ij
xj (1.1)
j 1
în restricţiile :
n
a ij x j bi 0, (i 1,..., m)
j 1 (1.2)
x j 0, ( j 1..., n)
10
modelului. Presupunerea despre determinarea parametrilor necontrolabili este
admisibilitatea destul de justificată în timpul planificării pe intervale de timp nu
prea mari, în timpul cărora caracteristicile de bază ale sistemului nu se modifică
esenţial şi se pot determina destul de exact. La planificarea de lungă durată şi de
perspectivă este inevitabilă apariţia erorilor ocazionale (neprevăzute). Erorile de
prognozare permit numai obţinerea domeniilor posibile ale parametrilor
modelelor: noi metode tehnologice, cererea, careva resurse naturale,
productivitatea, cheltuieli specifice şi de lansare. Ignorarea caracterului aleator al
parametrilor negestionabili poate atrage erori enorme la adoptarea deciziilor de
plan. L.V.Kantarovici indică, că normativele cheltuielilor în metode, în mod
deosebit în prognozare pentru anii viitori, datele despre resurse, în particular,
despre resursele naturii, necesitatea de calcul şi cererea pentru anii viitori prezintă
în realitate valori stochastice, cunoscută nouă numai cu o anumită probabilitate.
De aceea problema de construire a planului optim, de asemenea trebuie să fie
cercetată ca problemă a programării stochastice. Pe lîngă faptul complicării
procesului de soluţionare, această circumstanţă influenţează într-un mod calitativ
estimarea eficacităţii soluţiei şi formarea costurilor.
În modelele programării stochastice parametrii aij , bi sunt priviţi ca valori
aleatoare. În caz general ei pot fi valori aleatoare independente, de aceea putem
conveni că aij , bi sunt funcţii de parametri aleatori sau, mai general, funcţii ale
evenimentului elementar al spaţiului probabilistic (, , ) ; în acelaşi timp
nu este obligatoriu un număr. Aici - mulţimea evenimentelor elementare, T-
mulţimea evenimentelor (sistemul submulţimilor ), peste care este definită
probabilitatea P. Se consideră că, clasa evenimentelor T formează - algebra
evenimentelor, adică conţine evenimentul sigur (mulţimea ), evenimentul
imposibil (Ø), închis, referitor apariţiilor de calcul a reuniunii, intersecţiei şi
negaţiei. Deseori se numeşte stare a naturii. Indicarea dependenţei aij , bi de
11
2. Paralel cu dependenţa de mărimile aij deseori depind de dimensiunile
(masştabul) producerii, adică sunt funcţii de intensităţi x ( x1 ,..., xn ) , totodată,
destul de des se poate considera că aij depinde numai de xj , adică aij aij x j , .
În figura 1 este ilustrat graficul tipic schimbării cheltuielilor specifice aij în
dependenţă de x . El caracterizează scăderea cheltuielilor la producerea unei
j
x 0
x1 x 2 x x 0 x1 x
2
x
Figura 2
12
3. Fie aij aij , bi bi (i 1,..., m; j 1,..., n) . În acest caz, trebuie de
înţeles în relaţiile care se obţin formal indicînd în modelele (1.1)-(1.3) dependenţa
aij şi bi de :
n
a
i 1
0j ( ) x j max , (1.4)
n
a
i 1
ij ( ) x j b j ( ) 0, (i 1, m) , (1.5)
x j 0, ( j 1, n) (1.6)
unde aij ( ), bi ( ) - valori aleatoare? Oricare vector fixat x ( x1 ,..., xn )
pentru careva valori poate satisface condiţiile (1.4-1.6), iar pentru un alt - nu.
În acest caz netrivial apare întrebarea care vector îl putem considera admisibil.
Modelul determinist nu ia în consideraţie dispersia valorilor pe care le poate lua
aij ( ), bi ( ) ; în aceste modele valorile aleatoare se schimbă cu valorile
deterministe. Cel mai des, în loc de aij ( ), bi ( ) se cercetează valorile lor medii:
a ij ( ) , b i ( ) . Planificarea se realizează bazîndu-se pe valorile medii ale
cheltuielilor, producţiei, resurselor etc., deci se cercetează problema:
n
a
j 1
ij ( )x j max , (1.7)
n
a j 1
ij ( ) x j b i ( ) 0, (i 1, m) , (1.8)
x j 0, ( j 1, n) , (1.9)
Se pot remarca 2 neajunsuri considerabile ale acestei metode. În primul rând,
putem efectua erori mari prin alegerea planului de soluţii în dependenţă de (1.7)-
(1.9). În realitate acest plan nu este satisfăcător pentru un anumit .Cele mai dese
ori această situaţie are loc atunci când aij ( ), bi ( ) au dispersie discretă.
Să cercetăm un simplu exemplu. Trebuie de maximizat x1 x2 în
condiţiile x1 x2 0 ; x1 0 ; x2 0 , unde 1 cu probabilitatea 2/3 şi 1 cu
1
probabilitatea 1/3. Atunci
3
. Planul x, care satisface condiţiile problemei date
13
nenegativ cu careva semiplan haşurat (din figura 3). În acelaşi timp planul optim
al soluţiei (utilizînd parametrii medii) maximizării x1 x2 în condiţiile
1 1
x1 x 2 1 ; x1 0 ; x2 0 ; este punctul , 0 care nu aparţine porţiunii găsite.
3 3
a
j 1
ij ( ) x j bi ( ) 0, , (i 1, m) , (1.10)
x j 0, ( j 1, n)
a ( ) x
j 1
ij j
bi ( ) 0, mod P, (i 1, m),
x j 0, ( j 1, n) .
Aceasta este aşa zisa formulare dură a programării stohastice. În acest caz
soluţia se alege cu atenţie maximă astfel încât planul căutat să satisfacă condiţiile
”echilibrate” după toate ”ingredientele ” pentru toate cel mai puţin probabile
valori ale lui . Evident că sistemul (1.10) nu are alte soluţii decât cea trivială.
De exemplu , fie avem inegalitatea:
x 1, x 0,
14
unde =1 cu probabilitatea 0.4 , =2 cu probabilitatea 0.5 şi =-1 cu
probabilitatea 0.1. Sistemul :
x 1,2 x 1, x 1, x 0
n
P{ aij ( ) x j bi ( ) 0} pi , ( i 1, m ) (1.11)
j 1
xj 0, ( j 1, n )
unde pi- mărimi date. În conformitate cu restricţiile (1.11), cele mai mari
dificultăţi sunt cele legate de alegerea pi. În afară de acesta, ca regulă, mulţimea
planelor admisibile nu sunt convexe. Aşadar, în figura 3 punctele care aparţin
măcar unui spaţiu haşurat formează o mulţime neconvexă, care descrie relaţia :
P{1 x x2 1} 1/ 3.
Câte odată în loc de (1.11) se cercetează o singură condiţie :
n
P{ aij ( ) x j bi ( ) 0, (i 1, m)} p ,
j 1
xj 0 ( j 1, n ).
Să remarcăm că alegerea modelului depinde de careva situaţie concretă. De
exemplu modelul (1.7)-(1.9), după toate cercetările, nu este satisfăcător dacă
parametrii au dispersia mare.
5. În calitate de funcţie scop, în toate problemele atinse mai sus ale formării
problemei programării stohastice, nu este obligatoriu de a fi cazuri de ingredient
nul sau probabilitatea depăşirii producerii ingredientului nul de careva nivel. De
exemplu, producerea ingredientului nul poate fi maximizată după Paretto, adică în
15
calitate de plan optim să se considere planul x pentru care nu există plan admisibil
- y astfel încât :
n n
a
j 1
0j ( ) x j aij ( ) y i ,
j 1
(1.12)
diferite mărimile a
j 1
0j ( ) x j şi a
j 1
ij ( ) x j bi ( ) . Restricţiile problemei
a0 j ( ) x j ri ( aij ( ) x j bi ( )).
j 1 i 1 j 1
în condiţiile:
16
x j 0, ( j 1, n) , (1.14)
Dacă inegalitatea (1.5) o vom cerceta ca egalitate şi vom presupune
dependenţa proporţională dintre eroare şi disconcordanţă atunci funcţia eroare va
avea forma:
i v , v 0
ri (v ) max{ i v, j v}
i v , v 0 (1.15)
unde
n
v aij ( ) x j bi ( ), (i 1, m) (1.16)
j 1
a ( ) x
ij j
yi yi bi ( ) 0, (i 1, m) , (1.17)
j 1
x j o, ( j 1, n), yi 0, (i 1.m)
(
i yi i y i ) (1.18)
i 1
Evident, că dacă:
n
a ( ) x
j 1
ij j
bi ( ) 0,
atunci:
n
yi ( x, ) aij ( ) x j bi ( ),
j 1
yi ( x, ) 0;
dacă:
n
a ( ) x
j 1
ij j
bi ( ) 0 ,
17
atunci:
yi ( x, ) 0,
n
yi ( x, ) aij ( ) x j bi ( ).
j 1
Altfel spus,
n
yi ( x, ) max{0, aij ( ) x j bi ( )},
j 1
n
yi ( x, ) max{0, aij ( ) x j bi ( )},
j 1
j 1 i 1
n m n
a 0 j ( ) x j M ( i max{0, aij ( ) x j bi ( )} (1.19)
j 1 i 1 j 1
n
i max{0, aij ( ) x j bi ( )}) min(max).
j 1
a ( ) x ij j bi ( ) 0, (i 1, m),
j 1
(1.20)
x j 0, ( j 1, m)
18
Corectitudinea planului în procesul de producere este o caracteristică a
planificării economice reale. Necesitatea corectării planului nu este o urmare a
neajunsului planificării. Corectitudinea depinde de alegerea şi planificarea
acţiunilor în condiţii de incertitudine. Neajunsurile planificării în informaţie
incompletă sunt legate de cheltuieli mari care sunt necesare pentru corectarea
planului ales anterior. Este important de ales aşa planuri care necesită cheltuieli
generale minime la realizarea şi corectarea lor, sau maximizarea efectului sumar
aşteptat de le implementarea şi corectarea planului.
În cadrul modelului determinist nu pot fi unite 2 etape - etapa alegerii
planului şi etapa corectării lui. Există sisteme ale modelului determinist care
descriu fiecare din aceste etape în parte. Trecerea de la valorile deterministe la
cele aleatoare, care sunt cauzele cercetării, permit obţinerea modelului care
sumează cele 2 etape ale planificării menţionate mai sus, adică ne permit a vorbi
despre modelele alegerii planurilor stabile la incertitudinile avute care
minimizează cheltuielile prevăzute la realizare şi colectare, sau maximizează
efectul general mediu al planului iniţial şi corectarea lui. Acesta este aşa-numitul
model din 2 etape al programării stohastice. În modelele din 2 etape ale
programării stohastice sunt reflectate următoarele proprietăţi caracteristice în
condiţiile planificării incerte:
1. Caracterul probabilistic al informaţiei iniţiale;
2. Corectarea planului ales anterior pe parcursul acumulării informaţiei;
3. alegerea planului iniţial cu evidenţa corectărilor din viitor.
Cum a fost deja menţionat, modelul (1.17)-(1.19) este modelul de
programare stohastică din 2 etape cel mai simplu. În caz general planul-corectare
se introduce în sistemul condiţiilor cu ajutorul matriţei de corectare în forma
generală, elementele căreia depind de , adică se cercetează sistemul
inegalităţilor
n r
a ( ) x
j 1
ij j
d ik ( ) y k bi ( ) 0, (i 1, m),
k 1
19
x j 0, ( j 1, n); y k 0, ( k 1, r ) ,
a ( ) x d ik ( ) y k yi bi ( ) 0,
ij j
i 1 k 1
d ( ) y C yi .
k k
k i
20
Efectul aşteptat de la planul-corecţie este egal cu
r
M d k ( ) y k ( x, ).
k 1
în restricţiile:
D ( ) A( ) x b( 0),
y 0, x 0. (1.24)
21
Exemple: Vom cerceta un şir de probleme concrete, care se rezolvă cu
ajutorul unei metode generale a modelelor stohastice în 2 etape.
Fie bi(k)- cantitatea muncii de tipul I (strânsul roadei, semănatul etc.) în perioada
k a calendarului, xij(k)- numărul agregatelor de tipul j pentru lucrul de tipul i,
wij(k)- productivitatea variabilă a agregatului. În cazul când bi(k) sunt mărimi
deterministe are loc egalitatea:
22
w j
ij (k ) xij (k ) bi (k ), xij (k ) 0
M d i ( k ) max 0, bi ( k , ) w ( k ) xij ( k )
i ,k ij
j
d i ( k ) max 0, wij ( k ) xij ( k ) bi ( k , )
j
d i ( k ) max 0, wij ( k ) x ij ( k ) bi ( k , ) ,
j
neliniară a cheltuielilor.
1.3. Modelul stochastic în legătura (balanţa) dintre ramuri
O problemă destul de grea în cercetările mai multor ramuri este obţinerea
unei informaţii mai mult, sau mai puţin exactă a coeficienţilor cheltuielilor
directe. De aceea matricea cheltuielilor directe deseori este considerată aleatoare.
De aici pot apărea noi construcţii de optimizare a modelelor cu mai multe ramuri
de producţie.
Vom introduce notaţiile: n - numărul tipurilor de produs, aij ( ) -
23
La planul determinat de producere a produsului brut producerea produsului
finit va fi un vector aleator:
x A( , x) E A( ) x,
a ij ( ) x j
n
ij 1, i j ,
min
j 1 , unde ij
0, i j.
j
t
j 1
j x j L, x j 0, ( j 1, n).
24
Mz ( ) max,
E A( ) x y ( ) z ( ),
t , x L1 , t , y ( ) L2 , x 0, y ( ) 0.
Sensul economic al acestui model este destul de transparent: este necesar de
ales aşa plan de producere ale produsului brut până şi după ce vor fi cunoscuţi
coeficienţii cheltuielilor directe, pentru a maximiza aşteptarea matematică a
producerii volumului final de produs în proporţiile date cu condiţiile că se vor
îndeplini restricţiile de muncă în prima şi a doua perioadă.
CAPITOLUL II
25
Problema de luare a deciziei in codiţii de totală incertitudine
26
( z ) - densitatea de repartiţie
( z) 0 , ( z)dz 1
1
rnd r
a Zr b Z
Incertitudine
27
1. Pe parcursul proiectării (elaborării) deciziei, grupul factorilor
sunt neschimbaţi, dar cunoscuţi.
2. Factorul de control (decizia) x se presupune aparţinînd unui
domeniu X (cunoscut)- numit mulţimea admisibilă a factorilor de decizie
3. Factorul - numit stare a naturii reprezintă un eveniment
elementar al domeniului , sau cu alte cuvinte – toate mărimile care depind
de c, de x, şi de reprezintă nişte mărimi măsurabile pe un spaţiu
probabilist în ( , F, P).
- spaţiul evenimentelor elementare
1. F ( x) M [ f ( , x)] min
xX , dacă orientăm procesul decizional spre minim cu
procesului decizional în direcţia obţinerii unui venit mediu, profit mediu maximal.
Problema de proiectare a unei decizii în condiţiile de risc (A) poate fi mai
puţin complexă, sau mai mult complexă. Relativ e mai simplă problema în cazul
cînd domeniul X al deciziilor admisibile nu depinde de starea naturii .
Procesul decizional devine esenţial complex (mult mai complicat) dacă domeniul
deciziilor admisibile X este dependent de starea naturii : X=X( ), . În
această situaţie, în fiecare caz concret se cere de precizat care decizie poate fi
considerată admisibilă şi, corespunzător inadmisibilă. În caz dacă s-ar cere ca
factorul de decizie:
28
a. x să aparţină lui X( ), pentru orice ;
b. P{ : x X ( )} 1 ;
29
minimizării funcţiei F ( x) max [ f ( , x)] care i-ar asigura valoarea minimă a
funcţiei F(x). În acest caz f( ,x) s-ar interpreta ca o funcţie de cost cînd se ia
decizia x şi factorul necontrolabil. F(x) reprezintă costul maximal (pesimist).
Metoda Arrow-Hurwcz
Ipoteze:
1. Mulţimea deciziilor X este o mulţime convexă şi compactă în
En . Mulţimea etse convexă şi compactă în En .
2. Funcţia f( , x ) este funcţie continuă în raport cu perechea (
,x) pe produsul cartezian X .
3. Funcţia f( , x ) este o funcţie convexă în raport cu x pe
domeniul X pentru orice , f( , x ) este concavă în raport cu pe
domeniul , pentru orice x X .
4. Pentru orice , f( , x ) este diferenţiabilă pe domeniul X,
30
Arrow şi Hurwcz, pentru soluţionarea problemei (1.27) în condiţiile de
respectare a ipotezelor 1), 2), 3), 4) propun un algoritm numeric de determinare
aproximativă a punctului şa şi, deci şi a deciziei optime a modelului (1.27) care,
de altfel coincide cu componenta x* .
Remarcă: Desigur, în general nu orice model de tipul (1.27) posedă punct
şa.
Vom expune algoritmul lui Arrow-Hurwcz. Acest algoritm reprezintă un
proces iterativ de forma:
x k 1 x ( x k k f ' x ( k , x k ))
(1.28)
k 1 ( k k f ' ( k , x k ))
unde:
0 , x0 - punct iniiţial (punct de start), este un element arbitrar din X şi
se determină apriori.
k - mărimea pasului la iteraţia k- o mărime scalară care trebuie să
respecte condiţiile:
k 0, k 0(k ), k (1.28)
k 0
k
x (x ) - reprezintă proiecţia elementului x
k
pe domeniul X, adică xk+1
determinat prin relaţiile (1.28) este rezultatul proiecţiei x
k
pe domeniul X,
sau cu alte cuvinte xk+1 este soluţia următoarei probleme:
k k
x k 1 x min x x
x X
Dacă k
x X x k 1 x
k
.
k
Analogic, dacă notăm cu k k f ' ( k , x k ) , atunci k 1 este proiecţia pe
domeniul a punctului , cu alte cuvinte k 1 este soluţia problemei:
k
k k
k 1 min
31
Dacă domeniile X şi sunt mulţimi relativ simple, spre exemplu: mulţimi
poliedrale complexe, sfere, elipsoidale; atunci şi proiectarea pe asemenea mulţimi
reprezintă o problemă relativ simplă.
Precizări:
1. {x E n : ai xi bi , i 1, n} - paralepiped în spaţiul En , muchiile căruia sunt
paralele axelor de coordonate.
a i , x ik
ai
k 1
k
xi bi , x i bi
k k k
x i
, xi a i , x i bi
forma: F ( x) max f ( , x) min - soluţie optimă a căreia este x*. Cea dea doua
xX
În caz dacă numărul m este relativ nu prea mare (m n), atunci pentru
soluţionarea problemei în cauză se poate aplica un algoritm determinist care poate
fi definit astfel:
x k 1 X ( x k k k ) (1.31)
cu
k grad f i( xk ) ( x k )
i ( x k ) 1,2,..., m pentru care f i ( x ) ( x ) max
k
Aici k fi (x k ) , i( x k ) este unul din
1i m
acei indici 1,2,3,...,m care realizează valoarea maximă dintre toate valorile de
forma: f 1 ( x k ), f 2 ( x k ),..., f m ( x k ) . Aşadar în algoritmul (1.31) se presupune că
valorile funcţiei F(x) şi a derivatelor parţiale ale funcţiei f i ( x ) ( x) care o defineşte
pe F (x ) se calculează exact. Cu alte cuvinte, în orice punct al şirului xk se
33
dettermină exact valoarea funcţiei F ( x ) f ix ( x ) şi se determină toate derivatele
k k
k
f i ( x ) ( x k )
k
parţiale: , j 1,2,..., n .
x j
f i ( x k ) ( x k )
x1
, X (Z ) -
Astfel k este vectorul de forma: k
f (x k
)
i( xk )
x n
, k
k
0 , k .
k 0
34
iar factorul incert E m şi care se află sub controlul unui alt decident
(persoană) B care la rândul său manifestă un comportament loial, sau din contra,
un comportament extrem de dur în raport cu decidentul A. Indiferent de viziunea
comportamentului lui B, A îşi proiectează decizia de comportament optim reieşind
din conceptul de maximă prudenţă (conceptul Wald- pesimistului). Astfel, dacă A,
pentru orice x X dispune de valorile unui indicator al eficienţei, expus în forma
numerică prin relaţia f ( , x ) (cost, cheltuieli, pierderi), atunci, evident că
P A( , ) p ( d ) .
V ( , )
P
K
V ( , ) k 1, , 0 .
k
k 1
35
SP ( d ) 1 .
Descrierea algoritmului
1. Iniţial se ia un element arbitrar x 0 X , se simulează (random) în
conformitate cu P ( d ) - definită pe spaţiul de evenimente elementare o
x 2 X x1 1 f x ( 1 , x1 )
'
Şi aşa mai departe.
Să admitem că deja s-a obţinut întregul şir x 0 , x1 , x 2 ,..., x k . Ne aflăm acum la
iteraţia k+1 care constă în determinarea unui nou element x k+1 . Pentru aceasta, în
conformitate cu distribuţia P ( d ) simulăm elementul ~ . k
~
k k 1 , dacă f ( k 1 , x k ) f ( k , x k ) ,
~ ~
k k , dacă f ( k 1 , x k ) f ( k , x k ) .
x k 1 X x k k f x ( k , x k ) - aspectul general al schemei probabiliste de
'
36
Remarcă: Dacă k 0 , k 0 ,
k 0
k atunci şirul xk converge în
(3) u U
Funcţiile r u; şi ri u; se presupun, pentru orice stare posibilă a naturii,
exprimată prin parametrul aleator , funcţii convexe în raport cu factorul de
37
control u pe mulţimea U (presupusă mulţime convexă în spaţiul factorilor de
control).
Într-un anumit aspect economic funcţia r u; ar putea exprima în formă
numerică anumite cheltuieli sau pierderi condiţionate de alegerea factorului de
conducere u ce ar verifica restricţiile (2) şi (3) cu condiţia că factorul aleatoriu se
află în starea .
Remarcă: dacă situaţia impune ca decizia să se ia înainte de a cunoaşte
starea concretă a naturii la momentul dat, modelul matematic corespunzător
unui asemenea sistem, se încadrează în clasa modelelor de elaborare a deciziei în
perspectivă.
Funcţia de performanţă R u se evaluează prin media de selecţie:
N
1
R u r u;
i
N i 1
( 2 ) Ri u M ri u; 0 , i 1,2, , N
( 3 ) u U
Remarcă: există două modalităţi de soluţionare a problemei (1)-(3) sau ( 1
)-( 3 ).
Modalitatea 1 - include metodele indirecte care se bazează:
a) pe calculul exact al valorii performanţei R u ;
1 N
de forma: R u r u; i min , unde u U .
N i 1 u
38
Fie că
uN realizează valoarea minimă a funcţiei
R N u : R N u N min R N u .
uU
E
foarte probabil ca pentru valori ale lui N suficient de mari, soluţia uN să exprime
într-un mod „suficient” calităţile lui u - soluţie optimă a problemei ( 1 )-( 3 ) (în
formă exactă), adică abaterea RN u N R u
- ar fi suficient de mică.
Modalitatea 2 de soluţionare întruneşte metodele directe. Acestea se
bazează pe momentele:
1) Posibilitatea simulării, pentru legea dată de repartiţie a factorilor
aleatori, a diferitor scenarii, obţinând orice număr de realizări a factorilor
aleatori. Acest şir 1 , 2 , , N să reprezinte scenarii independente a
stărilor lui , în raport cu cele precedente (deja simulate).
2) Posibilitatea de calcul exact a valorilor funcţiei r u; pentru orice set
u; .
3) Posibilitatea determinării gradientului sau subgradientului r u;
39
Metoda directă
Spre exemplu, R(u) ar exprima cheltuielile medii, dacă s-ar lua decizia
(factorul de control) u U convexă.
Presupunem că funcţia r u; este convexă în raport cu u pe mulţimea U pentru
orice element aleator - totalitatea valorilor (parametri cantitativi) sau stărilor
(parametri calitativi) posibile ale naturii.
Admitem că pentru orice set u; u U şi poate fi calculat
gradientul sau subgradientul în raport cu u al funcţiei r u; .
Notaţii:
Exemplul 1.
n
r u ; i u i
i 1
r u;
Funcţia este diferenţiabilă şi i .
u i
Exemplul 2.
n
r u; C i u i2
i 1
r u; 2C i u i , daca u i2 i
i 1, n
u i 2C i u i , pentru u i i
2
40
sunt componentele subgradientului:
Exemplul 3.
r u; max Ci i u i
1i n
Vom nota:
ri (u 0 ; 0 )
0
ui
0 10 ; 20 ; ; n0
41
Determinăm un număr h0 0 cu caracter determinist sau aleator. Trecem la
iteraţia întâi în cadrul căreia se va aprecia o nouă variantă a factorului de control
notată cu u 1 .
1) u 1 PU u 0 h0 0 . Vectorii u 0
; u 1 ; vor avea caracter stochastic.
În continuare în corespundere cu legea dată de distribuţie şi metodele de
simulare, vom obţine starea naturii 1 care împreună cu factorul u 1 va da
posibilitatea de a evalua
r u 1 ; 1 şi de a determina componentele
i1
r u1 ; 1
ui
Şirul de valori
r u 0 ; 0 ; r u 1 ; 1 ;; r u k ; k nu posedă nici o legitate (spre
deosebire de şirul u ).
k
42
Remarcă: un mare interes l-ar prezenta informaţia despre şirul de valori
R u 0 , R u 2 , , R u k .
Pentru a estima valorile performanţei R u vom utiliza formula estimatoare
(estimaţie statistică):
r u;
N
1
R u s
N s 1
Şi corespunzător:
Ru 0 r u ; s
N
1 0
N s 1
Ru k r u ; s
N
1 k
N s 1
Sisteme dinamice
La soluţionarea modelelor dinamice în condiţii de risc experimentul nu
determină în mod complet starea naturii. Dacă procesul de control optim al unui
sistem stochastic poate fi descris în succesiunea de genul:
Control – experiment – control – … – experiment
Unde “control” se va întâlni de M ori, atunci se spune că suntem în cazul de
conducere a unui sistem, în perspectivă, cu M etape de elaborare a deciziei.
Dacă lanţul se caracterizează prin alternarea cuvintelor:
Experiment – Control – …
43
unde “experiment” se întâlneşte de M ori atunci avem o situaţie de control în M
etape cu caracter operativ.
am
ym n bn
44
La prima etapă de decizie (distribuţia produsului la depozite) sânt suportate
m m
X: x ij yi ; x ij b j ; xij 0 ; X X y;
j 1 i 1
P u C
i i ij xij y;
i 1 i 1 j 1
45
şi scopul urmărit ar consta în determinarea volumelor ui, i=1,2,...,m ce ar asigura
valoarea minimă a performanţei indicate R(u).
CAPITOLUL IV
46
Alternative
Evenimente ...
A1 A2 Aj ... An
E1 a11 a12 ... a1j ... a1n
E2 a21 a22 ... a2j ... a2n
... ... ... ... ... ... ...
Ei ai1 ai2 ... aij ... ain
... ... ... ... ... ...
Em am1 am2 ... amj ... amn
Tabelul 4.2
Matricea de plăţi cu probabilităţi
Probabil Alternative
Evenimente
ităţi A1 A2 ... Aj ... An
E1 p1 a11 a12 ... a1j ... a1n
E2 p2 a21 a22 ... a2j ... a2n
... ... ... ... ... ... ... ...
Ei pi ai1 ai2 ... aij ... ain
... ... ... ... ... ... ...
Em pm am1 am2 ... amj ... amn
47
Firma de construcţie Internation Ltd are de ales din patru alternative, metode
de construcţie a obiectului (A1, A2, A3, A4) la folosirea cărora în diferite situaţii
climaterice aduc anumite pierderi.
Tabelul 4.3
Pierderile firmei
Alternative
Stări ale naturii
A1 A2 A3 A4
E1 Ninsoare 20 20 26 30
E2 Ploaie 25 30 35 30
E3 Timp favorabil 20 18 10 22
Probabilităţile evenimentelor
Stare a naturii E1 E2 E3
Probabilitatea 0,2 0,3 0,5
Alternative
Stări ale naturii Probabilităţi
A1 A2 A3 A4
E1 0,2 -20 -20 -26 -30
E2 0,3 -25 -30 -35 -30
E3 0,5 -20 -18 -10 -22
Alternative
Stări ale naturii Probabilităţi
A1 A2 A3
E1 0,2 -20 -20 -26
E2 0,3 -25 -30 -35
E3 0,5 -20 -18 -10
A1 A2 A3
Fig. 4.1 Cea mai bună alternativă
Răspuns: Cea mai bună metodă de construcţie din punct de vedere a
criteriului verosimilităţii maxime o are alternativa A3.
50
Tabelul 4.8
Utilităţile alternativelor
Alternativele A1 A2 A3
Utilitatea alternativelor -21,5 -22,0 -20,7
În calitate de răspuns se alege acea alternativă, căreia îi corespunde
utilitatea cea mai mare, figura 4.2.
A1 A2 A3
Fig. 4.2 Cea mai bună alternativă
Răspuns: Cea mai bună alternativă din punc de vedere a criteriului mediei
maximale a câştigului aşteptat este A3.
A1 A2 A3
Fig. 4.3 Cea mai bună alternativă
52
Tabelul 4.11
Alegerea elementului minimal
A1 A2 A3
Fig. 4.4 Cea mai bună alternativă
53
CAPITOLUL V
V ( y; Y ) v j min y j , Y j p j max 0; y j Y j max
n
y
(1.32)
j 1
a
j 1
ij y j bi , i 1, m (1.33)
y j y j y j , j 1, n (1.34)
Y j Y j Y j , j 1, n (1.35)
Indiferent de natura cererii (poartă ea un caracter determinist, sau este cu
caracter aleator sau incert) există situaţii când modelul dat se reduce la un model
clasic bine cunoscut:
n
V ( y ) v j y j max (1.36)
y
j 1
a
j 1
ij y j bi , i 1, m (1.37)
54
y j 0, j 1, n (1.38)
în particular aceasta are loc când valorile minimal posibile ale cererii pentru
fiecare produs respectiv depăşeşte valorile maximale posibile ale ofertei din
cadrul domeniului admisibil de valori.
Pentru fiecare situaţie (caz determinist, stochastic şi incertitudine) se propun
algoritmi numerici iterativi care permit de a obţine soluţii (decizii) aproximative
dar suficient de apropiate de cele optime. Putem remarca că pentru modelul iniţial
astfel de metode ca Simplex sau alte metode finite nu pot fi aplicate, deoarece
modelul nu este linear şi mai are o proprietate specifică (deosebită) este
nediferenţiabil în raport cu factorul de decizie.
Analizând proprietăţile funcţiei scop putem constata că aceasta este concavă
în raport cu factorul de decizie (Fig.5.1)
j(yj; Yj)
vj·Yj
Vj·yj
yj Yj yj yj
55
j(yj;
Yj )
j(yjmax;Yj)
j(yj; Yj)
+
0
yjmax Yj yj Yj yjmax
- Outputul
yi
j(yj; Yj)
Vj ·yj
yj Yj
-pj ·yj
56
Algoritmul 1. Cazul stochastic (risc). Are forma (5.8) în care
g Vk ( y k ; Y k ), dacã Ψ(y k ) 0
k
g ( y ), dacã Ψ(y k ) 0
k k
(1.39)
unde Y k reprezintă o simulare independentă a vectorului-cerere Y obţinută la
iteraţia k în conformitate cu distribuţia acestuia pe domeniul de valori posibile
D(Y) ale acestui factor. În acest caz se presupun cunoscute probabilităţile
distribuţiei factorului de cerere.
În algoritmul 2, elaborat pentru luarea de decizii în condiţii de
incertitudine. Vom presupune că decizia se ia în aspectul maxmin (Wald), formal
având aceeaşi structură (5.8), în conformitate cu o anumită distribuţie la fiecare
iteraţie k se simulează un set al cererii notat cu Y~ k . k se ia ca şi în cazul
algoritmului stochastic, unde:
~
Y k 1 , daca V ( y k , Y k 1 ) V ( y k , Y k )
Y k ~k k 1 ~k (1.40)
Y , daca V ( y , Y ) V ( y , Y )
k k
3
b ;
4
57
nediferenţiabil, această situaţie fiind cauzată de raportul dintre posibilităţile output
al sistemului şi de caracterul de manifestare a cererii.
58
CONCLUZIE
59
Anexa 1
61
Figura 5.6. Rezultatele de calcul: problema în condiţii de incertitudine
62
Eficienţa economică a sistemului informatic este redată de raportul dintre
rezultatul util (efectul sistemului informatic în procesul de conducere) şi
cheltuielile (efortul SI) avansate pentru realizarea efectului dorit.
Efectele economice sunt datorate unor factori, dintre care cei mai importanţi
sunt:
modernizarea procesului de conducere tactică, strategică şi operativă
prin intermediul sistemului informatic;
minimalizarea timpului de răspuns pentru sistemul proiectat;
utilizarea unui volum minim de resurse financiare şi materiale;
mărirea gradului de informatizare a activităţii de bază, inclusiv a
unităţilor economice externe.
La proiectarea sistemului informatic este necesar să se fundamenteze un
sistem de indicatori a eficientei economice care ne va permite compararea tuturor
variantelor posibile de realizare în raport cu resursele informatice existente.
63
Aceşti indicatori vor fi determinaţi pe bază de calcule, iar în faza de exploatare
curentă a sistemului prin observări şi măsurări concrete.
S
U t med *I c , (5.10)
Tlun
unde:
Tlun– fondul de timp al unui lucrător – 182 ore
Smed– salariul mediu al operatorului – 400 lei
Ic–coeficientul privind salariul suplimentar, decontări în fondul social–1,5
Ut=400/182*1.5=3,29 lei
2. Cheltuieli de muncă pentru realizarea calculelor în varianta de bază
n
C mb Vinf * (5.11)
B
unde:
Vinf – volumul informaţiilor 48560 semne
n – periodicitatea de efectuare a calculelor – 12 ori pe an
B – normativul de prelucrare a informaţiei – 350 semne pe oră.
Cmb=48560*12/350=1664,91 ore
3. Numărul convenţional de lucrători
Pb=Cmb/Tan (5.12)
64
unde:
Tan – Fondul de timp a unui lucrător – 2100 ore
Pb=1664,9/2100=0,79 oameni
4. Cheltuieli privind prelucrarea informaţiei în varianta de bază
Cb=Tan*Ut*Pb (5.13)
Cb=2100*3,29*0,79=5458,11 lei
Pentru calcularea cheltuielilor în varianta proiectată va fi nevoie de
următoarele date:
1. Ore-maşină necesare pentru prelucrarea informaţiei
Vin
Tm Tmed (5.14)
3600
unde:
Vin – volumul de date iniţial de calcul –30900 semne
Tmed – timpul mediu necesar la realizarea operaţiilor de calcul pentru
indicatorii de informaţii iniţiale inclusiv introducerea şi emiterea informaţiei – 6
secunde
Tm=30900*6/3600=60.08 ore–maşină
2. Valoarea timp-maşină pentru prelucrarea informaţiei
Cm=Tm*P1m (5.15)
unde:
P1m – preţul unei maşini-ore – 1.1 lei
Cm=60.08*1.1=66,09 lei
3. Cheltuieli privind întocmirea, controlul şi perfectarea datelor rezultative
Ccof=Kof*Cm (5.16)
unde:
Kof – coeficientul privind timpul de control, întocmirea şi emiterea datelor
finale – 0.2
65
Ccof=0.2*66,09=13,22 lei
4. Cheltuieli privind prelucrarea automată a datelor
Ca=(Cm+Ccof)*n (5.17)
Ca=(66,09+13,22)*12=951,72 lei
5. Economia anuală a cheltuielilor curente
Ea=Cb– Ca (5.18)
Kc=Ea/Cb (5.19)
Is=Cb/Ca (5.20)
Is=5458,11 / 951,72=5,73
Deci cheltuielile băneşti în varianta de proiect sunt de 5,73 ori mai mici
66
comparativ cu varianta de bază.
Indicele absolut al reducerii cheltuielilor de muncă:
Erm=Cmb-Cma (5.21)
Km=Erm/Cmb (5.22)
67
Anexa 2
1
Start
Nr. de produse: n.
Nr. de resurse: m.
2 Matricea tehnologică a[i][j].
Datele Vectorul resurselor disponibile: b[i].
iniţial Venitul pe o unitate de produs: V[j].
Costul pentru o unitate de produs P[j].
086
30
Val. iniţiale a resurselor y şi intervalul
de variaţie: y1[i], ymin[i], ymax[i].
3 Valorile E şi H: Eps, h.
psi[i]=0;
5 4
j<=m
psi[i]=psi[i]+a[i][j]*y1[j]; j=0,m
j>m
6
7 i<=n
i=0,n
psi[i]=psi[i]-b[i];
i>n
8 9
da
psimax<psi[i] psimax=psi[i]; l=i;
nu
10
i<=n
i=0,n
i>n
11
nu
psimax<Eps
da
12 13
nu
y1[j]<=Y[j]
teta[j]=V[j];
da
14
teta[j]=-P[j];
15
j>m
j=0,m
j<=m
086
16
68
Anexa2 Continuare
085
15
16 da
psimax<Eps
nu
17
18
j>m j=0,m
teta[j]=-a[l][j];
j<=m
19
ybar[j]=y1[j]+h*teta[j];
20 da 21
ybar[j]<ymin[j] y2[j]=ymin[j];
nu
22 da
23
ybar[j]>ymax[j] y2[j]=ymax[j];
24
y2[j]=ybar[j];
25
j>m j=0,m
j<=m
27
26 da
y1[j]<=Y[j] Vmax=Vmax+V[j]*y1[j];
nu
28
Vmax=Vmax+V[j]*Y[j]-P[j]*(y1[j]-Y[j]);
29
j>m
j = 0, m
j<=m
30 03 085
k = 0, kstop k > kstop
k<= kstop
31 32
Obţinerea soluţiei
Înscrierea rezultatelor
problemei
în fişier
33
Stop
69
Anexa2 Continuare
1
Start
Nr. de produse: n.
Nr. de resurse: m.
2
Matricea tehnologică a[i][j].
Datele Vectorul resurselor disponibile: b[i].
iniţial Venitul pe o unitate de produs: V[j].
Costul pentru o unitate de produs P[j].
Val. iniţiale a resurselor y şi intervalul
de variaţie: y1[i], ymin[i], ymax[i].
4 3
Valorile E şi H: Eps, h.
j<=m j = 0, m
YL[z][j] = Random
j>m
5
z<=L
z = 0, L
z>L
41 089
6
psi[i]=0; Vmax=0; Vmed=0;
8 7
j<=m j = 0, m
Y[j] = Random
j>m
9
i<=Pk
i = 0, Pk
i>Pk
11 10
j<=m j=0,m
psi[i]=psi[i]+a[i][j]*y1[j];
j>m
12
13 i<=n
i=0,n
psi[i]=psi[i]-b[i];
i>n
14 15
da
psimax<psi[i] psimax=psi[i]; l=i;
nu
16
i<=n
i=0,n
i>n
088
17
70
Anexa2 Continuare
087
16
17 nu
psimax<Eps
da
18 19
nu
y1[j]<=Y[j]
teta[j]=V[j];
da
20
teta[j]=-P[j];
21
j>m
j=0,m
j<=m
22 da
psimax<Eps
nu
23
24 j>m
teta[j]=-a[l][j]; j=0,m
j<=m
25
ybar[j]=y1[j]+h*teta[j];
26 da 27
ybar[j]<ymin[j] y2[j]=ymin[j];
nu
28 da 29
ybar[j]>ymax[j] y2[j]=ymax[j];
nu
30
y2[j]=ybar[j];
31
j>m j=0,m
j<=m
089
32
71
Anexa2 Continuare
088
31
33
32 da
y1[j]<=Y[j] Vmax=Vmax+V[j]*y1[j];
nu
34
Vmax=Vmax+V[j]*Y[j]-P[j]*(y1[j]-Y[j]);
35
j>m
j = 0, m
j<=m
37
36 da
y1[j]<=YL[j] Vmed=Vmed+V[j]*y1[j];
nu
38
Vmed=Vmed+V[j]*YL[j]-P[j]*(y1[j]-YL[j]);
39
j>m
j = 0, m
j<=m
40
z>L
z = 0, L
z<=L
41
k = 0, kstop k > kstop
06 087
k<= kstop
42 43
Obţinerea soluţiei
Înscrierea rezultatelor
problemei
în fişier
44
Stop
72
Anexa 3: Codul sursă
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Index.h"
#include "CazulB.h"
#include "CazulBCerere.h"
#include "CazulC.h"
#include "CazulCCerere.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TIndexForm *IndexForm;
//---------------------------------------------------------------------------
__fastcall TIndexForm::TIndexForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TIndexForm::Iesire1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TIndexForm::Risc1Click(TObject *Sender)
{
//CazulBForm->Panel5->Caption=0;
CazulBForm->Show();
CazulBForm->Enabled=false;
CazulBCerereForm->Edit1->Enabled=true;
CazulBCerereForm->Edit2->Enabled=true;
CazulBCerereForm->Show();
IndexForm->Visible=false;
}
//---------------------------------------------------------------------------
#include "Index.h"
#include "CazulA.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCazulAForm *CazulAForm;
//---------------------------------------------------------------------------
__fastcall TCazulAForm::TCazulAForm(TComponent* Owner)
: TForm(Owner)
{
Label13->Visible=false;
Image1->Canvas->MoveTo(0,0);
int X=10,Y=210;
73
int i,j;
//---- Graficul ------------------
//---- Axa X -------------------
Image1->Canvas->MoveTo(5,Y);
Image1->Canvas->LineTo(440,Y);
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(X,10);
Image1->Canvas->LineTo(X,215);
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(5,20);
}
//---------------------------------------------------------------------------
void __fastcall TCazulAForm::BitBtn3Click(TObject *Sender)
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]="0";
StringGrid3->Cells[1][0]="0";
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
74
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
Label13->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TCazulAForm::BitBtn2Click(TObject *Sender)
{
int j,n,m;
String s;
n=StrToInt(Edit1->Text);
m=StrToInt(Edit3->Text);
StringGrid2->ColCount=m;
StringGrid2->Enabled=true;
StringGrid3->ColCount=m;
StringGrid3->Enabled=true;
StringGrid4->ColCount=m;
StringGrid4->Enabled=true;
StringGrid5->ColCount=m;
StringGrid5->Enabled=true;
StringGrid6->ColCount=m;
StringGrid6->Enabled=true;
StringGrid7->ColCount=m;
StringGrid7->Enabled=true;
StringGrid8->RowCount=n;
StringGrid8->Enabled=true;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Enabled=true;
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
Label13->Visible=false;
75
//---------------------------------------------------------------------------
void __fastcall TCazulAForm::BitBtn1Click(TObject *Sender)
{
int i,j,n,m,H,k,kstop,c,cdv;
int l; // valoarea maxima a psi
double a[20][20],b[20];
double y1[20],y2[20],ybar[20],Y[20],ymin[20],ymax[20];
double psi[20],psimax,Eps;
double teta[20],V[20],P[20],Vmax;
double h;
String s;
int XG=10,YG=210,YG1;
int XG2=10,YG2=210;
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(XG2,10);
Image1->Canvas->LineTo(XG2,215);
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(5,20);
Label13->Visible=false;
n=StrToInt(Edit1->Text);
m=StrToInt(Edit3->Text);
Eps=StrToFloat(Edit2->Text);
H=StrToInt(Edit4->Text);
kstop=StrToInt(Edit5->Text);
cdv=StrToInt(Edit6->Text);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j]=StrToFloat(StringGrid9->Cells[j][i]);
for(j=0;j<m;j++)
{
Y[j]=StrToFloat(StringGrid2->Cells[j][0]);
y1[j]=StrToFloat(StringGrid3->Cells[j][0]);
76
ymin[j]=StrToFloat(StringGrid4->Cells[j][0]);
ymax[j]=StrToFloat(StringGrid5->Cells[j][0]);
V[j]=StrToFloat(StringGrid6->Cells[j][0]);
P[j]=StrToFloat(StringGrid7->Cells[j][0]);
}
for(i=0;i<n;i++)
{
b[i]=StrToFloat(StringGrid8->Cells[0][i]);
psi[i]=0;
}
k=0;
//---------------------------------
do
{
psimax=0;
Vmax=0;
for(i=0;i<n;i++)
{
psi[i]=0;
for(j=0;j<m;j++)
psi[i]=psi[i]+a[i][j]*y1[j];
psi[i]=psi[i]-b[i];
}
for(i=0;i<n;i++)
if(psimax<psi[i])
{
psimax=psi[i];
l=i;
}
if(psimax<=Eps)
for(j=0;j<m;j++)
if(y1[j]<=Y[j])
teta[j]=V[j];
else
teta[j]=-P[j];
else
for(j=0;j<m;j++)
teta[j]=-a[l][j];
h=H/(k+1.0);
for(j=0;j<m;j++)
{
ybar[j]=y1[j]+h*teta[j];
if(ybar[j]<ymin[j])
y2[j]=ymin[j];
else
if(ybar[j]>ymax[j])
y2[j]=ymax[j];
else
y2[j]=ybar[j];
}
for(j=0;j<m;j++)
{
if(y1[j]<=Y[j])
Vmax=Vmax+V[j]*y1[j];
else
Vmax=Vmax+V[j]*Y[j]-P[j]*(y1[j]-Y[j]);
}
77
c=psimax*pow(10.0,cdv);
psimax=c/pow(10.0,cdv);
StringGrid1->Cells[m+1][k+1]=psimax;
c=Vmax*pow(10.0,cdv);
Vmax=c/pow(10.0,cdv);
StringGrid1->Cells[m+2][k+1]=Vmax;
//x = div(k,25);
if(k==0)
YG1=YG-Vmax*10;
/*
if(x.rem==0)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+10;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==100)break;
*/
if(k==100)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==200)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==300)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==400)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==500)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==600)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
78
if(k==700)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==800)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==900)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==1000)
{
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
//--- ----------------
for(j=0;j<m;j++)
y1[j]=y2[j];
k++;
}
while(k<=kstop);
if(k>=kstop)
Label13->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TCazulAForm::Inapoi1Click(TObject *Sender)
{
IndexForm->Show();
IndexForm->Visible=true;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulAForm::Iesire1Click(TObject *Sender)
{
IndexForm->Close();
}
//---------------------------------------------------------------------------
79
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=20;
StringGrid3->Cells[1][0]=20;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
Label13->Visible=false;
}
//---------------------------------------------------------------------------
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
80
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
StringGrid2->Cells[0][0]=30;
StringGrid2->Cells[1][0]=40;
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=0;
StringGrid3->Cells[1][0]=0;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
Label13->Visible=false;
}
//---------------------------------------------------------------------------
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
StringGrid2->Cells[0][0]=30;
StringGrid2->Cells[1][0]=40;
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=20;
StringGrid3->Cells[1][0]=20;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
81
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
Label13->Visible=false;
}
//---------------------------------------------------------------------------
Cazul B
//---------------------------------------------------------------------------
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <vcl.h>
#pragma hdrstop
#include "Index.h"
#include "CazulB.h"
#include "CazulBCerere.h"
div_t x;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCazulBForm *CazulBForm;
//---------------------------------------------------------------------------
__fastcall TCazulBForm::TCazulBForm(TComponent* Owner)
: TForm(Owner)
{
Image1->Canvas->MoveTo(0,0);
int X=10,Y=210;
int i,j;
//---- Graficul ------------------
//---- Axa X -------------------
Image1->Canvas->MoveTo(5,Y);
Image1->Canvas->LineTo(440,Y);
82
//------- Sageata ----------------
Image1->Canvas->MoveTo(430,205);
Image1->Canvas->LineTo(440,210);
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(X,10);
Image1->Canvas->LineTo(X,215);
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(5,20);
}
//---------------------------------------------------------------------------
void __fastcall TCazulBForm::Inapoi1Click(TObject *Sender)
{
IndexForm->Show();
IndexForm->Visible=true;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulBForm::Iesire1Click(TObject *Sender)
{
IndexForm->Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulBForm::BitBtn3Click(TObject *Sender)
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+4;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid1->Cells[m+3][0]="Vmed";
StringGrid2->ColCount=m;
/*
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
*/
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=0;
StringGrid3->Cells[1][0]=0;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
83
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
/*
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
*/
Label13->Visible=false;
CazulBForm->Enabled=false;
CazulBCerereForm->Show();
CazulBCerereForm->Edit2->Text=n;
CazulBCerereForm->Edit1->Text=m;
CazulBCerereForm->Edit1->Enabled=false;
CazulBCerereForm->Edit2->Enabled=false;
}
//---------------------------------------------------------------------------
84
Image1->Canvas->LineTo(440,210);
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(XG2,10);
Image1->Canvas->LineTo(XG2,215);
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(5,20);
//randomize();
String s;
Label13->Visible=false;
n=StrToInt(Edit1->Text);
m=StrToInt(Edit3->Text);
Eps=StrToFloat(Edit2->Text);
H=StrToInt(Edit4->Text);
kstop=StrToInt(Edit5->Text);
cdv=StrToInt(Edit6->Text);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j]=StrToFloat(StringGrid9->Cells[j][i]);
for(j=0;j<m;j++)
{
Y[j]=StrToFloat(StringGrid2->Cells[j][0]);
y1[j]=StrToFloat(StringGrid3->Cells[j][0]);
ymin[j]=StrToFloat(StringGrid4->Cells[j][0]);
ymax[j]=StrToFloat(StringGrid5->Cells[j][0]);
V[j]=StrToFloat(StringGrid6->Cells[j][0]);
P[j]=StrToFloat(StringGrid7->Cells[j][0]);
}
for(i=0;i<n;i++)
{
b[i]=StrToFloat(StringGrid8->Cells[0][i]);
psi[i]=0;
}
//-----------------------------------------
Pk=StrToFloat(CazulBCerereForm->Edit3->Text);
Pmin=StrToFloat(CazulBCerereForm->Edit4->Text);
Pmax=StrToFloat(CazulBCerereForm->Edit5->Text);
for(i=1;i<=Pk;i++)
{
PY[i]=StrToFloat(CazulBCerereForm->StringGrid1->Cells[i][1]);
PP[i]=StrToFloat(CazulBCerereForm->StringGrid1->Cells[i][2]);
}
Prnd[0]=0;
for(i=1;i<=Pk;i++)
Prnd[i]=Prnd[i-1]+PP[i];
//-----------------------------------------
randomize();
for(z=0;z<L;z++)
{
85
Rnd=random(1000)/1000.0;
for(i=0;i<Pk;i++)
if((Prnd[i]<=Rnd)&&(Rnd<=Prnd[i+1]))
YL[z][0]=PY[i+1];
for(j=1;j<m;j++)
YL[z][j]=Rnd*(Pmax-Pmin)+Pmin;
}
k=0;
//---------------------------------
do
{
psimax=0;
Vmax=0;
Vmed=0;
for(j=1;j<m;j++)
Y[j]=Rnd*(Pmax-Pmin)+Pmin;
//----------------------------
for(i=0;i<n;i++)
{
psi[i]=0;
for(j=0;j<m;j++)
psi[i]=psi[i]+a[i][j]*y1[j];
psi[i]=psi[i]-b[i];
}
for(i=0;i<n;i++)
if(psimax<psi[i])
{
psimax=psi[i];
l=i;
}
if(psimax<=Eps)
for(j=0;j<m;j++)
if(y1[j]<=Y[j])
teta[j]=V[j];
else
teta[j]=-P[j];
else
for(j=0;j<m;j++)
teta[j]=-a[l][j];
h=H/(k+1.0);
for(j=0;j<m;j++)
{
ybar[j]=y1[j]+h*teta[j];
if(ybar[j]<ymin[j])
y2[j]=ymin[j];
else
if(ybar[j]>ymax[j])
y2[j]=ymax[j];
else
y2[j]=ybar[j];
}
for(j=0;j<m;j++)
{
if(y1[j]<=Y[j])
Vmax=Vmax+V[j]*y1[j];
else
Vmax=Vmax+V[j]*Y[j]-P[j]*(y1[j]-Y[j]);
}
86
//--- Vmed ----------------------
if(psimax<=Eps)
{
for(i=0;i<L;i++)
for(j=0;j<m;j++)
{
if(y1[j]<=YL[i][j])
Vmed=Vmed+V[j]*y1[j];
else
Vmed=Vmed+V[j]*YL[i][j]-P[j]*(y1[j]-YL[i][j]);
}
Est=(Vmed/L);
}
else
Est=0;
c=psimax*pow(10.0,cdv);
psimax=c/pow(10.0,cdv);
StringGrid1->Cells[m+1][k+1]=psimax;
c=Vmax*pow(10.0,cdv);
Vmax=c/pow(10.0,cdv);
StringGrid1->Cells[m+2][k+1]=Vmax;
c=Est*pow(10.0,cdv);
Est=c/pow(10.0,cdv);
StringGrid1->Cells[m+3][k+1]=Est;
if(Est==0)
Image1->Canvas->Ellipse(XG3-2,YG3-2,XG3+2,YG3+2);
XG3=XG3+0.4;
if(k==0)
{
XG=10;
YG1=YG-Est*10;
}
if(k==98) U1=Est;
if(k==99) U2=Est;
if(k==100)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==198) U1=Est;
if(k==199) U2=Est;
if(k==200)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
87
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==298) U1=Est;
if(k==299) U2=Est;
if(k==300)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==398) U1=Est;
if(k==399) U2=Est;
if(k==400)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==498) U1=Est;
if(k==499) U2=Est;
if(k==500)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==598) U1=Est;
if(k==599) U2=Est;
if(k==600)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==698) U1=Est;
if(k==699) U2=Est;
if(k==700)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
88
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==798) U1=Est;
if(k==799) U2=Est;
if(k==800)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==898) U1=Est;
if(k==899) U2=Est;
if(k==900)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==998) U1=Est;
if(k==999) U2=Est;
if(k==1000)
{
U3=Est;
if(U1>U2) Est=U1;
else
if(U2>=U3) Est=U2;
else Est=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Est*10;
Image1->Canvas->LineTo(XG,YG1);
}
//--- ----------------
for(j=0;j<m;j++)
y1[j]=y2[j];
k++;
}
while(k<=kstop);
if(k>=kstop)
Label13->Visible=true;
}
//---------------------------------------------------------------------------
89
void __fastcall TCazulBForm::Button1Click(TObject *Sender)
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+4;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid1->Cells[m+3][0]="Vmed";
StringGrid2->ColCount=m;
/*
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
*/
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=20;
StringGrid3->Cells[1][0]=20;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
/*
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
*/
Label13->Visible=false;
CazulBForm->Enabled=false;
CazulBCerereForm->Show();
CazulBCerereForm->Edit2->Text=n;
CazulBCerereForm->Edit1->Text=m;
CazulBCerereForm->Edit1->Enabled=false;
CazulBCerereForm->Edit2->Enabled=false;
}
//---------------------------------------------------------------------------
Cazul B- Cerere
//---------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <vcl.h>
90
#pragma hdrstop
#include "CazulBCerere.h"
#include "CazulB.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCazulBCerereForm *CazulBCerereForm;
//---------------------------------------------------------------------------
__fastcall TCazulBCerereForm::TCazulBCerereForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
CazulBForm->StringGrid2->ColCount=m;
CazulBForm->StringGrid2->Enabled=true;
CazulBForm->StringGrid3->ColCount=m;
CazulBForm->StringGrid3->Enabled=true;
CazulBForm->StringGrid4->ColCount=m;
CazulBForm->StringGrid4->Enabled=true;
CazulBForm->StringGrid5->ColCount=m;
CazulBForm->StringGrid5->Enabled=true;
CazulBForm->StringGrid6->ColCount=m;
CazulBForm->StringGrid6->Enabled=true;
CazulBForm->StringGrid7->ColCount=m;
CazulBForm->StringGrid7->Enabled=true;
CazulBForm->StringGrid8->RowCount=n;
CazulBForm->StringGrid8->Enabled=true;
CazulBForm->StringGrid9->ColCount=m;
CazulBForm->StringGrid9->RowCount=n;
CazulBForm->StringGrid9->Enabled=true;
CazulBForm->StringGrid1->ColCount=m+4;
CazulBForm->StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
CazulBForm->StringGrid1->Cells[j][0]=s;
}
CazulBForm->StringGrid1->Cells[m+1][0]="Fi";
CazulBForm->StringGrid1->Cells[m+2][0]="V";
CazulBForm->StringGrid1->Cells[m+3][0]="Vmed";
CazulBForm->Label13->Visible=false;
//---------------------------------------
StringGrid1->ColCount=k+1;
StringGrid1->Cells[0][1]="Cererea";
StringGrid1->Cells[0][2]="Probabilitea";
for(j=1;j<=k;j++)
StringGrid1->Cells[j][0]=j;
Button1->Visible=true;
Label13->Visible=false;
Label14->Visible=false;
StringGrid2->RowCount=m;
for(j=1;j<=m;j++)
{
91
s="Y"; s=s+j;
StringGrid2->Cells[0][j-1]=s;
}
}
//---------------------------------------------------------------------------
Label13->Visible=false;
Label14->Visible=false;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit1->Text);
k=StrToInt(Edit3->Text);
for(j=0;j<k;j++)
{
Y1[j]=StrToFloat(StringGrid1->Cells[j+1][1]);
P[j]=StrToFloat(StringGrid1->Cells[j+1][2]);
}
min=StrToInt(Edit4->Text);
max=StrToInt(Edit5->Text);
Pmax=0;
for(j=0;j<k;j++)
{
if(Pmax<P[j])
{
Pmax=P[j];
Y2[0]=Y1[j];
}
V=V+P[j];
}
randomize();
for(j=1;j<m;j++)
Y2[j]=random(max-min)+min;
//--------------------------
if(V<1) Label14->Visible=true;
if(V>1) Label13->Visible=true;
if(V==1)
for(i=0;i<m;i++)
StringGrid2->Cells[1][i]=Y2[i];
BitBtn1->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TCazulBCerereForm::BitBtn1Click(TObject *Sender)
{
int j,m;
m=StrToInt(Edit1->Text);
for(j=0;j<m;j++)
CazulBForm->StringGrid2->Cells[j][0]=StringGrid2->Cells[1][j];
CazulBForm->Edit1->Text=Edit2->Text;
CazulBForm->Edit2->Text=0.0001;
CazulBForm->Edit3->Text=Edit1->Text;
CazulBForm->Edit4->Text=20;
CazulBForm->Edit5->Text=1000;
CazulBForm->Edit6->Text=5;
CazulBForm->Enabled=true;
CazulBCerereForm->Close();
}
//---------------------------------------------------------------------------
92
{
CazulBForm->Enabled=true;
CazulBCerereForm->Close();
}
//---------------------------------------------------------------------------
Edit1->Text=2;
Edit2->Text=2;
Edit3->Text=4;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit1->Text);
k=StrToInt(Edit3->Text);
CazulBForm->StringGrid2->ColCount=m;
CazulBForm->StringGrid2->Enabled=true;
CazulBForm->StringGrid3->ColCount=m;
CazulBForm->StringGrid3->Enabled=true;
CazulBForm->StringGrid4->ColCount=m;
CazulBForm->StringGrid4->Enabled=true;
CazulBForm->StringGrid5->ColCount=m;
CazulBForm->StringGrid5->Enabled=true;
CazulBForm->StringGrid6->ColCount=m;
CazulBForm->StringGrid6->Enabled=true;
CazulBForm->StringGrid7->ColCount=m;
CazulBForm->StringGrid7->Enabled=true;
CazulBForm->StringGrid8->RowCount=n;
CazulBForm->StringGrid8->Enabled=true;
CazulBForm->StringGrid9->ColCount=m;
CazulBForm->StringGrid9->RowCount=n;
CazulBForm->StringGrid9->Enabled=true;
CazulBForm->StringGrid1->ColCount=m+4;
CazulBForm->StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
CazulBForm->StringGrid1->Cells[j][0]=s;
}
CazulBForm->StringGrid1->Cells[m+1][0]="Fi";
CazulBForm->StringGrid1->Cells[m+2][0]="V";
CazulBForm->StringGrid1->Cells[m+3][0]="Vmed";
CazulBForm->Label13->Visible=false;
//---------------------------------------
StringGrid1->ColCount=k+1;
StringGrid1->Cells[0][1]="Cererea";
StringGrid1->Cells[0][2]="Probabilitea";
for(j=1;j<=k;j++)
StringGrid1->Cells[j][0]=j;
Button1->Visible=true;
Label13->Visible=false;
Label14->Visible=false;
StringGrid2->RowCount=m;
for(j=1;j<=m;j++)
{
s="Y"; s=s+j;
StringGrid2->Cells[0][j-1]=s;
}
93
StringGrid1->Cells[1][1]=0;
StringGrid1->Cells[2][1]=1;
StringGrid1->Cells[3][1]=2;
StringGrid1->Cells[4][1]=10;
StringGrid1->Cells[1][2]=0.2;
StringGrid1->Cells[2][2]=0.2;
StringGrid1->Cells[3][2]=0.05;
StringGrid1->Cells[4][2]=0.55;
Edit4->Text=2;
Edit5->Text=12;
}
//---------------------------------------------------------------------------
Cazul C
//---------------------------------------------------------------------------
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <vcl.h>
#pragma hdrstop
#include "Index.h"
#include "CazulC.h"
#include "CazulCCerere.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCazulCForm *CazulCForm;
//---------------------------------------------------------------------------
__fastcall TCazulCForm::TCazulCForm(TComponent* Owner)
: TForm(Owner)
{
Image1->Canvas->MoveTo(0,0);
int X=10,Y=210;
int i,j;
//---- Graficul ------------------
//---- Axa X -------------------
Image1->Canvas->MoveTo(5,Y);
Image1->Canvas->LineTo(440,Y);
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(X,10);
Image1->Canvas->LineTo(X,215);
94
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(5,20);
}
//---------------------------------------------------------------------------
void __fastcall TCazulCForm::Iesire1Click(TObject *Sender)
{
IndexForm->Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulCForm::Inapoi1Click(TObject *Sender)
{
IndexForm->Show();
IndexForm->Visible=true;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulCForm::BitBtn1Click(TObject *Sender)
{
int i,j,z,n,m,H,k,kstop,c,cdv;
int l,L=1000; // valoarea maxima a psi
double a[20][20],b[20],YL[1005][50],A,B;
double y0[20],y1[20],y2[20],ybar[20],Y[20],Ybar[20],ymin[20],ymax[20];
double psi[20],psimax,Eps;
double teta[20],V[20],P[20],Vmax;
double h;
int Pk;
double PP[20],PY[20],Prnd[20],Pmax,Pmin,Rnd;
double XG=10,YG=210;
double YG1;
int XG2=10,YG2=210;
double U1,U2,U3;
Image1->Canvas->MoveTo(430,215);
Image1->Canvas->LineTo(440,210);
//--------------------------------
//---- Axa Y -------------------
Image1->Canvas->MoveTo(XG2,10);
Image1->Canvas->LineTo(XG2,215);
Image1->Canvas->MoveTo(10,10);
95
Image1->Canvas->LineTo(5,20);
//randomize();
String s;
Label13->Visible=false;
n=StrToInt(Edit1->Text);
m=StrToInt(Edit3->Text);
Eps=StrToFloat(Edit2->Text);
H=StrToInt(Edit4->Text);
kstop=StrToInt(Edit5->Text);
cdv=StrToInt(Edit6->Text);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j]=StrToFloat(StringGrid9->Cells[j][i]);
for(j=0;j<m;j++)
{
y0[j]=0;
Y[j]=StrToFloat(StringGrid2->Cells[j][0]);
y1[j]=StrToFloat(StringGrid3->Cells[j][0]);
ymin[j]=StrToFloat(StringGrid4->Cells[j][0]);
ymax[j]=StrToFloat(StringGrid5->Cells[j][0]);
V[j]=StrToFloat(StringGrid6->Cells[j][0]);
P[j]=StrToFloat(StringGrid7->Cells[j][0]);
}
for(i=0;i<n;i++)
{
b[i]=StrToFloat(StringGrid8->Cells[0][i]);
psi[i]=0;
}
//-----------------------------------------
Pk=StrToFloat(CazulCCerereForm->Edit3->Text);
Pmin=StrToFloat(CazulCCerereForm->Edit4->Text);
Pmax=StrToFloat(CazulCCerereForm->Edit5->Text);
for(i=1;i<=Pk;i++)
{
PY[i]=StrToFloat(CazulCCerereForm->StringGrid1->Cells[i][1]);
PP[i]=StrToFloat(CazulCCerereForm->StringGrid1->Cells[i][2]);
}
Prnd[0]=0;
for(i=1;i<=Pk;i++)
Prnd[i]=Prnd[i-1]+PP[i];
//-----------------------------------------
randomize();
for(z=0;z<L;z++)
{
Rnd=random(1000)/1000.0;
for(i=0;i<Pk;i++)
if((Prnd[i]<=Rnd)&&(Rnd<=Prnd[i+1]))
YL[z][0]=PY[i+1];
for(j=1;j<m;j++)
YL[z][j]=Rnd*(Pmax-Pmin)+Pmin;
}
k=0;
//---------------------------------
do
{
psimax=0;
Vmax=0;
A=0;
B=0;
96
if((Prnd[i]<=Rnd)&&(Rnd<=Prnd[i+1]))
Ybar[0]=PY[i+1];
for(j=1;j<m;j++)
Ybar[j]=Rnd*(Pmax-Pmin)+Pmin;
//----------------------------
for(i=0;i<n;i++)
{
psi[i]=0;
for(j=0;j<m;j++)
psi[i]=psi[i]+a[i][j]*y1[j];
psi[i]=psi[i]-b[i];
}
for(i=0;i<n;i++)
if(psimax<psi[i])
{
psimax=psi[i];
l=i;
}
for(j=0;j<m;j++)
{
if(y1[j]<=Ybar[j])
B=B+V[j]*y1[j];
else
B=B+V[j]*Ybar[j]-P[j]*(y1[j]-Ybar[j]);
}
if(A<=B)
for(j=0;j<m;j++)
Y[j]=Y[j];
else
for(j=0;j<m;j++)
Y[j]=Ybar[j];
}
if(psimax<=Eps)
for(j=0;j<m;j++)
if(y1[j]<=Y[j])
teta[j]=V[j];
else
teta[j]=-P[j];
else
for(j=0;j<m;j++)
teta[j]=-a[l][j];
h=H/(k+1.0);
for(j=0;j<m;j++)
{
ybar[j]=y1[j]+h*teta[j];
if(ybar[j]<ymin[j])
y2[j]=ymin[j];
else
if(ybar[j]>ymax[j])
y2[j]=ymax[j];
else
y2[j]=ybar[j];
}
97
for(j=0;j<m;j++)
{
if(y1[j]<=Y[j])
Vmax=Vmax+V[j]*y1[j];
else
Vmax=Vmax+V[j]*Y[j]-P[j]*(y1[j]-Y[j]);
}
c=psimax*pow(10.0,cdv);
psimax=c/pow(10.0,cdv);
StringGrid1->Cells[m+1][k+1]=psimax;
c=Vmax*pow(10.0,cdv);
Vmax=c/pow(10.0,cdv);
StringGrid1->Cells[m+2][k+1]=Vmax;
if(k==0)
{
XG=10;
YG1=YG-Vmax*10;
}
if(k==98) U1=Vmax;
if(k==99) U2=Vmax;
if(k==100)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==198) U1=Vmax;
if(k==199) U2=Vmax;
if(k==200)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==298) U1=Vmax;
if(k==299) U2=Vmax;
if(k==300)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
98
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==398) U1=Vmax;
if(k==399) U2=Vmax;
if(k==400)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==498) U1=Vmax;
if(k==499) U2=Vmax;
if(k==500)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==598) U1=Vmax;
if(k==599) U2=Vmax;
if(k==600)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==698) U1=Vmax;
if(k==699) U2=Vmax;
if(k==700)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==798) U1=Vmax;
if(k==799) U2=Vmax;
if(k==800)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
99
Image1->Canvas->LineTo(XG,YG1);
}
if(k==898) U1=Vmax;
if(k==899) U2=Vmax;
if(k==900)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
if(k==998) U1=Vmax;
if(k==999) U2=Vmax;
if(k==1000)
{
U3=Vmax;
if(U1>U2) Vmax=U1;
else
if(U2>=U3) Vmax=U2;
else Vmax=U3;
Image1->Canvas->MoveTo(XG,YG1);
XG=XG+40;
YG1=YG-Vmax*10;
Image1->Canvas->LineTo(XG,YG1);
}
//--- ----------------
for(j=0;j<m;j++)
{
y0[j]=y1[j];
y1[j]=y2[j];
}
k++;
}
while(k<=kstop);
if(k>=kstop)
Label13->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TCazulCForm::BitBtn3Click(TObject *Sender)
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
/*
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
*/
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=0;
StringGrid3->Cells[1][0]=0;
100
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
/*
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
*/
Label13->Visible=false;
CazulCForm->Enabled=false;
CazulCCerereForm->Show();
CazulCCerereForm->Edit2->Text=n;
CazulCCerereForm->Edit1->Text=m;
CazulCCerereForm->Edit1->Enabled=false;
CazulCCerereForm->Edit2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TCazulCForm::Button1Click(TObject *Sender)
{
int i,j,n,m;
String s;
n=m=2;
StringGrid1->ColCount=m+3;
StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
StringGrid1->Cells[j][0]=s;
}
StringGrid1->Cells[m+1][0]="Fi";
StringGrid1->Cells[m+2][0]="V";
StringGrid2->ColCount=m;
/*
StringGrid2->Cells[0][0]=3;
StringGrid2->Cells[1][0]=7;
*/
StringGrid3->ColCount=m;
StringGrid3->Cells[0][0]=20;
StringGrid3->Cells[1][0]=20;
StringGrid4->ColCount=m;
StringGrid4->Cells[0][0]=0;
StringGrid4->Cells[1][0]=0;
StringGrid5->ColCount=m;
StringGrid5->Cells[0][0]=20;
101
StringGrid5->Cells[1][0]=20;
StringGrid6->ColCount=m;
StringGrid6->Cells[0][0]=0.5;
StringGrid6->Cells[1][0]=1.5;
StringGrid7->ColCount=m;
StringGrid7->Cells[0][0]=0.25;
StringGrid7->Cells[1][0]=0.8;
StringGrid8->RowCount=n;
StringGrid8->Cells[0][0]=3;
StringGrid8->Cells[0][1]=4;
StringGrid9->ColCount=m;
StringGrid9->RowCount=n;
StringGrid9->Cells[0][0]=0.1;
StringGrid9->Cells[1][0]=0.2;
StringGrid9->Cells[0][1]=0.5;
StringGrid9->Cells[1][1]=0.3;
/*
Edit1->Text=2;
Edit2->Text=0.0001;
Edit3->Text=2;
Edit4->Text=20;
Edit5->Text=1000;
Edit6->Text=5;
*/
Label13->Visible=false;
CazulCForm->Enabled=false;
CazulCCerereForm->Show();
CazulCCerereForm->Edit2->Text=n;
CazulCCerereForm->Edit1->Text=m;
CazulCCerereForm->Edit1->Enabled=false;
CazulCCerereForm->Edit2->Enabled=false;
}
//---------------------------------------------------------------------------
Cazul C- cerere
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CazulC.h"
#include "CazulCCerere.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TCazulCCerereForm *CazulCCerereForm;
//---------------------------------------------------------------------------
__fastcall TCazulCCerereForm::TCazulCCerereForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TCazulCCerereForm::BitBtn2Click(TObject *Sender)
{
int j,n,m,k;
String s;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit1->Text);
k=StrToInt(Edit3->Text);
CazulCForm->StringGrid2->ColCount=m;
CazulCForm->StringGrid2->Enabled=true;
CazulCForm->StringGrid3->ColCount=m;
CazulCForm->StringGrid3->Enabled=true;
CazulCForm->StringGrid4->ColCount=m;
CazulCForm->StringGrid4->Enabled=true;
CazulCForm->StringGrid5->ColCount=m;
CazulCForm->StringGrid5->Enabled=true;
102
CazulCForm->StringGrid6->ColCount=m;
CazulCForm->StringGrid6->Enabled=true;
CazulCForm->StringGrid7->ColCount=m;
CazulCForm->StringGrid7->Enabled=true;
CazulCForm->StringGrid8->RowCount=n;
CazulCForm->StringGrid8->Enabled=true;
CazulCForm->StringGrid9->ColCount=m;
CazulCForm->StringGrid9->RowCount=n;
CazulCForm->StringGrid9->Enabled=true;
CazulCForm->StringGrid1->ColCount=m+3;
CazulCForm->StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
CazulCForm->StringGrid1->Cells[j][0]=s;
}
CazulCForm->StringGrid1->Cells[m+1][0]="Fi";
CazulCForm->StringGrid1->Cells[m+2][0]="V";
CazulCForm->Label13->Visible=false;
//---------------------------------------
StringGrid1->ColCount=k+1;
StringGrid1->Cells[0][1]="Cererea";
StringGrid1->Cells[0][2]="Probabilitea";
for(j=1;j<=k;j++)
StringGrid1->Cells[j][0]=j;
Button1->Visible=true;
Label13->Visible=false;
Label14->Visible=false;
StringGrid2->RowCount=m;
for(j=1;j<=m;j++)
{
s="Y"; s=s+j;
StringGrid2->Cells[0][j-1]=s;
}
}
//---------------------------------------------------------------------------
Label13->Visible=false;
Label14->Visible=false;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit1->Text);
k=StrToInt(Edit3->Text);
for(j=0;j<k;j++)
{
Y1[j]=StrToFloat(StringGrid1->Cells[j+1][1]);
P[j]=StrToFloat(StringGrid1->Cells[j+1][2]);
}
min=StrToInt(Edit4->Text);
max=StrToInt(Edit5->Text);
Pmax=0;
for(j=0;j<k;j++)
{
if(Pmax<P[j])
{
Pmax=P[j];
103
Y2[0]=Y1[j];
}
V=V+P[j];
}
randomize();
for(j=1;j<m;j++)
Y2[j]=random(max-min)+min;
//--------------------------
if(V<1) Label14->Visible=true;
if(V>1) Label13->Visible=true;
if(V==1)
for(i=0;i<m;i++)
StringGrid2->Cells[1][i]=Y2[i];
BitBtn1->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TCazulCCerereForm::BitBtn1Click(TObject *Sender)
{
int j,m;
m=StrToInt(Edit1->Text);
for(j=0;j<m;j++)
CazulCForm->StringGrid2->Cells[j][0]=StringGrid2->Cells[1][j];
CazulCForm->Edit1->Text=Edit2->Text;
CazulCForm->Edit2->Text=0.0001;
CazulCForm->Edit3->Text=Edit1->Text;
CazulCForm->Edit4->Text=20;
CazulCForm->Edit5->Text=1000;
CazulCForm->Edit6->Text=5;
CazulCForm->Enabled=true;
CazulCCerereForm->Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulCCerereForm::Button2Click(TObject *Sender)
{
CazulCForm->Enabled=true;
CazulCCerereForm->Close();
}
//---------------------------------------------------------------------------
void __fastcall TCazulCCerereForm::Button3Click(TObject *Sender)
{
int j,n,m,k;
String s;
Edit1->Text=2;
Edit2->Text=2;
Edit3->Text=4;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit1->Text);
k=StrToInt(Edit3->Text);
CazulCForm->StringGrid2->ColCount=m;
CazulCForm->StringGrid2->Enabled=true;
CazulCForm->StringGrid3->ColCount=m;
CazulCForm->StringGrid3->Enabled=true;
CazulCForm->StringGrid4->ColCount=m;
CazulCForm->StringGrid4->Enabled=true;
CazulCForm->StringGrid5->ColCount=m;
CazulCForm->StringGrid5->Enabled=true;
CazulCForm->StringGrid6->ColCount=m;
CazulCForm->StringGrid6->Enabled=true;
CazulCForm->StringGrid7->ColCount=m;
CazulCForm->StringGrid7->Enabled=true;
104
CazulCForm->StringGrid8->RowCount=n;
CazulCForm->StringGrid8->Enabled=true;
CazulCForm->StringGrid9->ColCount=m;
CazulCForm->StringGrid9->RowCount=n;
CazulCForm->StringGrid9->Enabled=true;
CazulCForm->StringGrid1->ColCount=m+4;
CazulCForm->StringGrid1->Cells[0][0]="k";
for(j=1;j<=m;j++)
{
s="y("; s=s+j; s=s+")";
CazulCForm->StringGrid1->Cells[j][0]=s;
}
CazulCForm->StringGrid1->Cells[m+1][0]="Fi";
CazulCForm->StringGrid1->Cells[m+2][0]="V";
CazulCForm->StringGrid1->Cells[m+3][0]="Vmed";
CazulCForm->Label13->Visible=false;
//---------------------------------------
StringGrid1->ColCount=k+1;
StringGrid1->Cells[0][1]="Cererea";
StringGrid1->Cells[0][2]="Probabilitea";
for(j=1;j<=k;j++)
StringGrid1->Cells[j][0]=j;
Button1->Visible=true;
Label13->Visible=false;
Label14->Visible=false;
StringGrid2->RowCount=m;
for(j=1;j<=m;j++)
{
s="Y"; s=s+j;
StringGrid2->Cells[0][j-1]=s;
}
StringGrid1->Cells[1][1]=0;
StringGrid1->Cells[2][1]=1;
StringGrid1->Cells[3][1]=2;
StringGrid1->Cells[4][1]=10;
StringGrid1->Cells[1][2]=0.2;
StringGrid1->Cells[2][2]=0.2;
StringGrid1->Cells[3][2]=0.05;
StringGrid1->Cells[4][2]=0.55;
Edit4->Text=2;
Edit5->Text=12;
}
//---------------------------------------------------------------------------
105