Sunteți pe pagina 1din 13

Facultatea de Inginerie Electrică și Știința Calculatoarelor

Proiect Optimizări
DETERMINAREA DOMENIULUI DE SOLUȚII
ADMISIBILE ÎN PROBLEMELE DE OPTIMIZARE
PRIN PROGRAMARE LINIARĂ

Bițică Adrian Profesor


3241 AIA conf. dr. ing. Mahalu George

Suceava
2020
Cuprins
1.Tema proiectului.............................................................................................................3
2. Metode de implementare...............................................................................................3
3.Concepte de bază în modelare........................................................................................3
4.Măsuri ale performanţei.................................................................................................3
5.Tipuri de probleme..........................................................................................................4
6. Enunţul problemei..........................................................................................................5
7.Cod....................................................................................................................................7
8.Concluzii.........................................................................................................................12
9.Bibliografie.....................................................................................................................13

2
1.Tema proiectului

Reprezentarea grafică a problemei de optimizare operaţională


utilizând limbajul de programare Scilab.

2. Metode de implementare

Reprezentarea grafică a problemelor de optimizare operaţională poate


fi realizată prin utilizarea limbajului de programare Scilab.

3.Concepte de bază în modelare

Primul pas în construirea unui model este stabilirea factorilor şi


variabilelor pe care decidentul le consideră importante. Acestea pot fi
clasificate în cinci categorii: variabile de decizie, variabile exogene,
restricţii, măsuri ale performanţei şi variabile intermediare.

4.Măsuri ale performanţei

În luarea unei decizii decidentul are un scop, un obiectiv pe care


încearcă să-l atingă. Criteriile sau măsurile performanţei sunt expresii
cantitative ale acestor obiective.
Variabilele intermediare sunt necesare pentru includerea tuturor
factorilor importanţi în problema de decizie. Adesea ele leagă factorii de cost
şi de câştig. Se folosesc să lege variabilele de decizie şi exogene de măsurile
de performanţă.
Metodele de optimizare au o largă aplicabilitate în aproape orice
activitate în care sunt prelucrate informaţiile numerice: ştiinţă, inginerie,
matematică, economie, comerţ etc.
Conceptul de optimizare este bine încetăţenit ca principiul de bază în
analiza problemelor complexe de decizie sau alocare. Folosirea optimizării
se bazează pe concentrarea atenţiei asupra unui singur obiectiv conceput să
cuantifice performanţa şi calitatea deciziei într-o problemă ce ar necesita
determinarea valorilor unui număr mare de variabile interconectate. Acest
obiectiv este maximizat sau minimizat supus unor restricţii care să limiteze
alegerea variabilelor de decizie. Dacă un aspect al problemei poate fi
identificat şi caracterizat printr-un obiectiv (de exemplu: profitul într-o
afacere) atunci optimizarea poate să ofere un cadru adecvat pentru o astfel de
analiză.
Optimizarea ar trebui privită ca un instrument de concepere şi analiză,
şi nu ca un principiu care să ducă la soluţia corectă din punct de vedere
3
filozofic. Formularea problemei implică întotdeauna găsirea unui echilibru
între construirea unui model suficient de complex pentru a descrie cât mai
bine problema şi uşurinţa de rezolvare a acestuia.

5.Tipuri de probleme

Atunci când variabilele sunt supuse unor restricţii (relaţii) avem de-a
face cu programare cu restricţii, care face obiectul acestei lucrări. În lipsa
restricţiilor spunem că avem programare fără restricţii (Luenberger, 1989).
Problemele fără restricţii par lipsite de proprietăţi structurale astfel
încât aplicabilitatea lor în probleme practice este redusă.
Problemele cu restricţii permit modelarea fenomenelor complexe prin
descompunerea în subprobleme şi fiecare subproblemă având mai multe
restricţii.

Forma generală a unei probleme de programare cu restricţii este

unde: f este funcţia obiectiv,


sunt funcţiile care dau restricţiile asupra variabilelor
C este mulţimea indicilor pentru restricţiile cu egalitate, iar
I este mulţimea indicilor pentru restricţiile cu inegalitate.
Prin schimbarea

problema de maximizare devine o problemă de minimizare, aşa că în


continuare se pot considera numai probleme de minimizare.

4
6. Enunţul problemei

Programul a fost gândit executând următorii pași pentru rezolvarea afișării


grafice a soluțiilor admisibile:
 Se introduce de la tastatură un set de restricții de tip inecuații;
 Citește dacă în sistem se regăsesc inecuații de gradul 2;
 Programul trasează panta dreptei fiecărei ecuații introduse pe un interval
cuprins între {-10,10} pentru fiecare inecuație;
 Compară fiecare inegalitate daca este mai mică sau mai mare față de 0;
 Hașurează domeniul de soluții admisibile.
Astfel, că indiferent de numărul de restricții impuse, programul trebuie să
afișeze soluțiile admisibile. În figurile următoare se pot observa graficele care
afișează soluții în funcție de inecuațiile introduse.

5
6
7.Cod

global nr_ecuatii
global ecuatii_speciale
nr_ecuatii = 0
ecuatii_speciale = 0

global grad_ecuatii
global semn_functie
global OK
OK=0
grad_ecuatii = []
semn_functie = []

a = []
b = []
c = []

//FUNCTII FOLOSITE
//functie info autor
function informatii_autor()
mprintf("\nProiect Optimizari \n")
mprintf("Nume student: Bițică Adrian \n")
mprintf("Grupa: AIA \n Semigrupa: 3241A\n")
endfunction

//functie de creare grafic


function creare_grafic()
optiuni = get("current_axes")
optiuni.x_location = "origin"
optiuni.y_location = "origin"
optiuni.axes_visible = "on"
optiuni.font_size = 2
set(gca(),"data_bounds", [0,0,0,0])
endfunction

//functie de verificare ecuatie de gradul 2


function verificare_grad_ec(index_ecuatie)
global grad_ecuatii
global OK
grad2 = input("Este ecuatie de grad 2 [da/nu]: ","string")
if (grad2 == "da") then
grad_ecuatii(index_ecuatie) = 2
OK=1

7
else
if (grad2 == "nu") then
grad_ecuatii(index_ecuatie) = 1
end
end
endfunction

//functie pentru semnul ecuatiei


function semn_ecuatie(index_ecuatie)
global semn_functie
semn = input("Semnul ecuatiei este [<,>,<=,>=]:", "string")
if(semn == ">")
semn_functie(index_ecuatie) = 1
else
if (semn == "<")
semn_functie(index_ecuatie) = 2
else
if (semn == ">=")
semn_functie(index_ecuatie) = 1
else
if (semn == "<=")
semn_functie(index_ecuatie) = 2
end
end
end
end
endfunction

//functie pentru trasare puncte comune


function trasare_puncte_comune(val_a, val_b, val_c, semn_f)
for step = -1000:1000
step_delta = step/100;
y1 = (-val_a(2)*step_delta-val_c(2))/val_b(2)
y2 = (-val_a(1)*step_delta-val_c(1))/val_b(1)
if(semn_f(1) == 1 && semn_f(2) == 2 )
if ((y1-y2) > 0)
xfpoly([step_delta,step_delta],[y1,y2])
end
else
if(semn_f(1) == 2 && semn_f(2) == 1 )
if ((y1-y2) < 0)
xfpoly([step_delta,step_delta],[y1,y2])
end
else
8
if(semn_f(1) == 1 && semn_f(2) == 1 )
if ((y1-y2) > 0)
xfpoly([step_delta,step_delta],[y1,20]);
else
xfpoly([step_delta,step_delta],[y2,20]);
end
else
if(semn_f(1) == 2 && semn_f(2) == 2 )
if ((y1-y2) < 0)
xfpoly([step_delta,step_delta],[y1,-15]);
else
xfpoly([step_delta,step_delta],[y2,-15]);
end
end
end
end
end
end
endfunction

//functie trasare puncte comune pentru sistem de ecuatii cu o ecuatii de


gradul 2
function puncte_com(val_a, val_b, val_c, index_ecuatie_1,
index_ecuatie_2)//2,1
d_ = val_b(index_ecuatie_2)^2-
4*val_a(index_ecuatie_2)*val_c(index_ecuatie_2);
s = sqrt(d_)*1000;
x1 = (-val_b(index_ecuatie_2) + sqrt(d_))/2;
x2 = (-val_b(index_ecuatie_2) - sqrt(d_))/2;
y1 = (-val_a(index_ecuatie_1)*x1 -
val_c(index_ecuatie_1))/val_b(index_ecuatie_1);
y2 = (-val_a(index_ecuatie_1)*x2 -
val_c(index_ecuatie_1))/val_b(index_ecuatie_1);
for step = 1:s
step_delta = step/1000;
if(x1>x2)
d = step_delta + x2;
h = y2 - step_delta;
xfpoly([d,d],[h,-10]);
else
d = step_delta + x1;
h = y2 - step_delta;
xfpoly([d,d],[h,-10]);
end
9
end

endfunction

function puncte_trei_ec(val_a, val_b, val_c, semn_f)


for step = -1000:1000
step_delta = step/100;
for z=1:nr_ecuatii
y(z) = (-val_a(z)*step_delta-val_c(z))/val_b(z)
end
for k=1:nr_ecuatii-1
if(semn_f(k) == 1 && semn_f(k+1) == 1 )
if (y(k)-y(k+2)<=0 && y(k+2)+y(k+1)>=0 && y(k)-
y(k+1)>=0)
xfpoly([step_delta,step_delta],[y(k),y(k+2)])
else
if (y(k)-y(k+2)<=0 && y(k+2)>y(k+1) && y(k)-y(k+1)<=0)
xfpoly([step_delta,step_delta],[y(k+1),y(k+2)])
end
end

end
end
end
endfunction

//incepere program
informatii_autor()
nr_ecuatii = input("Numarul de ecuatii din sistem:")

for i = 1:nr_ecuatii
mprintf("Introdu parametrii ecuatiei %i: \n", i)
a(i) = input("Parametrul 1: ")
b(i) = input("Parametrul 2: ")
c(i) = input("Parametrul 3: ")
semn_ecuatie(i)
verificare_grad_ec(i)
end

clf()
creare_grafic()

//trasare linii pe grafic


x = -10:0.1:10
10
color_line = ["r" "b" "g" "c" "m" "y" "k"]
for i = 1:nr_ecuatii
if (grad_ecuatii(i) == 2) then
h(i,1)=a(i)
h(i,2)=b(i)
h(i,3)=c(i)
d=b(i)^2-4*a(i)*c(i)
h(i,4)=(-b(i)+sqrt(d))/(2*a(i))
h(i,5)=(-b(i)-sqrt(d))/(2*a(i))
m=[h(i,4) h(i,4)]
n=[10 -10]
plot (m,n)
m=[h(1,5) h(1,5)]
n=[10 -10]
plot (m,n)
else
if (grad_ecuatii(i) == 1) then
y = (-a(i)*x-c(i))/b(i)
end
plot(x, y, color_line(i))
end
end

if (nr_ecuatii==3)
puncte_trei_ec(a, b, c, semn_functie)
else
if(OK == 1)
puncte_com(a,b,c,2,1)
else
if (OK == 0)
trasare_puncte_comune(a, b, c, semn_functie)
end
end
end

11
8.Concluzii

În concluzie, putem spune că programul creat în Scilab pentru un sistem de


inegalități de tip restricții, afișează graficul hașurând domeniul de soluții
admisibile arătînd dacă este un domeniu închis sau un domeniu deschis. Programul
mai poate fi optimizat și modificat pentru o afișare mai exactă, și pentru
prelucrarea unui set mai mare de restricții deoarece programul creat funcționază
doar pâna la un set de maxim 3 restricții de tip inegalități.
Acest program mai poate fi continuat prin identificarea punctelor de maxim
și de minim, precum și a altor cerințe dorite.

12
9.Bibliografie

 Help - Scilab G.
 G. Mahalu – Operarea în Scilab, Editura Matrix Rom, București, 2018

13

S-ar putea să vă placă și