Автор работы: Пользователь скрыл имя, 02 Апреля 2014 в 21:38, курсовая работа
Электронды есептеуіш машинаның шығуымен байланысты жаңа ғылыми-техникалық революция ғылымның жаңа даму бағытын орнатты. Осындай бағыттардың бірі – операцияны зерттеу ғылымы.
Операция дегеніміз – белгілі мақсатқа жеткізетін және нақты ниетпен біріктірілген шаралар жиынтығы. Операциялар: басқарылатын және басқарылмайтын болады.
Операцияны зерттеу дегеніміз – автоматтандырылған басқару жүйесіндегі басқару есептерін шешуге қолданатын ғылыми тәсіл. Операцияны зерттеу методологиясы негізгі мына топтарға бөлінеді:
- анықтамалар, кезеңдер, принциптер, есептер;
- операцияны зерттеудің математикалық әдістері. Оған сызықтық бағдарламалау, транспорттық, дискреттік бағдарламалау, бейсызықтық бағдарламалау, динамикалық бағдарламалау, ойындар теориясы кіреді;
- АБЖ жобалау кезіндегі операцияларды зерттеудің әдістерін қолдану. Онда АБЖ-ң алгоритмін қамтамасыз ету, информациямен АБЖ-ны қамтамасыз ету, техникалық қамтамасыз ету керек.
Кіріспе..............................................................................................................................4
1 Қарапайым актілерді белгілеп көрсету.....................................................................5
2 Жалпы математикалық модельді құру, мақсатты функцияны таңдау және негіздеу............................................................................................................................5
3 Алгоритмнің маңызды ойын баяндау.......................................................................5
3.1 Солтүстік-батыс және минималдау әдісі...................................................6
3.2 Потенциалдау әдісі......................................................................................6
4 Оңтайландыру есебінің айқын математикалық өрнегінің өңделіп, жетілдіруі, оның сандық түрдегі шешімі...................................................................................................7
5 Программа листингісі...............................................................................................12
Программаны баяндау бөлімі.......................................................................................22
Қорытынды....................................................................................................................23
Қолданылған әдебиеттер..............................................................................................24
Қосымшалар...................................................................................................................25
Z_b[j]:=1;
betta[j]:=c[i,j]-alfa[i];
inc(k);
d:=1=2;
end;
for i:=1 to Nb do
if Z_b[i]=1 then
for j:=1 to Na do
if (p[j,i]>-1) and (Z_a[j]=0) then begin
Z_a[j]:=1;
alfa[j]:=c[j,i]-betta[i];
inc(k);
d:=1=2;
end;
Until (k=Na+Nb) or d;
if d then begin
i:=1;
While Z_a[i]=1 do inc(i);
j:=1;
While Z_b[j]=0 do inc(j);
p[i,j]:=0;
Print((j+1)*(n1+1)+n2-8,i*3+4,
end;
a_b:=d;
End;
Procedure W_p; {Вывод плана распределения}
var i,j,h,l,k:byte;
c_max:longint;
Begin
k:=0;
for i:=1 to Na do begin
h:=i*3+4;
for j:=1 to Nb do begin
l:=j*(n1+1)+n2-5;
GotoXY(l,h);
Write(' ':n1);
if p[i,j]>0 then begin
inc(k);
Print(l-trunc(ln(p[i,j])/ln(
end
else if p[i,j]=0 then begin
Print(l+n1-2,h,1,p[i,j],14);
inc(k);
end;
end;
end;
While a_b do inc(k);
if k>Na+Nb-1 then PrintS(40,1,'k > n+m-1',12);
End;
Function kkk(var ki,kj:byte):integer; {Расчет коэф. k}
var i,j:byte;
k,k_min:integer;
b:boolean;
Begin
b:=1=1;
for i:=1 to Na do
for j:=1 to Nb do
if p[i,j]=-1 then begin
k:=c[i,j]-alfa[i]-betta[j];
if b then begin
b:=1=2;
ki:=i; kj:=j; k_min:=k;
end else
if k<k_min then begin
k_min:=k;
ki:=i; kj:=j;
end;
TextColor(6);
GotoXY(j*(n1+1)+n2-5,i*3+4);
Write('(',k,')');
end;
if k_min<0 then PrintS(kj*(n1+1)+n2,ki*3+4,'X'
kkk:=k_min;
End;
Procedure div_mod(c:byte; var a,b:byte); {Перевод}
Begin
b:=c mod Nb; a:=c div Nb +1; {в двумерный}
if b=0 then begin
b:=Nb; dec(a);
end;
End;
Procedure Rek(Xi,Yi:byte; var z:boolean; var c:byte);
var i,j:byte;
Begin {Рекурсивная процедура.}
z:=1=2;
{Определяет контур
Case c of
1: for i:=1 to Na do
if i<>Xi then
if p[i,Yi]>-1 then begin
if u[(i-1)*Nb+Yi]=0 then begin
u[(Xi-1)*Nb+Yi]:=(i-1)*Nb+Yi;
c:=2;
Rek(i,Yi,z,c);
if z then exit;
end;
end
else if (i=ki) and (Yi=kj) then begin
u[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj;
z:=not z;
exit;
end;
2: for i:=1 to Nb do
if i<>Yi then
if p[Xi,i]>-1 then begin
if u[(Xi-1)*Nb+i]=0 then begin
u[(Xi-1)*Nb+Yi]:=(Xi-1)*Nb+i;
c:=1;
Rek(Xi,i,z,c);
if z then exit;
end;
end
else if (Xi=ki) and (i=kj) then begin
u[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj;
z:=not z;
exit;
end;
end;
u[(Xi-1)*Nb+Yi]:=0;
c:=c mod 2 +1;
End;
Procedure kontur; {Определяет контур перемещения}
var i,j,k,mi,mj,l:byte;
z:boolean;
p_m:longint;
Begin
for i:=1 to N*N do u[i]:=0;
l:=1;
Rek(ki,kj,z,l);
i:=ki; j:=kj;
k:=u[(i-1)*Nb+j];
div_mod(k,i,j);
mi:=i; mj:=j; l:=1;
Repeat
inc(l);
k:=u[(i-1)*Nb+j];
div_mod(k,i,j);
if l mod 2=1 then
if p[i,j]<p[mi,mj] then begin
mi:=i; mj:=j;
end;
Until (i=ki) and (j=kj);
i:=ki; j:=kj; l:=0;
p_m:=p[mi,mj];
Repeat
if l mod 2=0 then begin
inc(p[i,j],p_m);
PrintS((n1+1)*j+n2-1,i*3+3,'(+
end else begin
dec(p[i,j],p_m);
PrintS((n1+1)*j+n2-1,i*3+3,'(-
end;
if l=0 then inc(p[i,j]);
k:=u[(i-1)*Nb+j];
div_mod(k,i,j);
inc(l);
Until (i=ki) and (j=kj);
p[mi,mj]:=-1;
End;
Procedure Pauza;
var d:char;
Begin
TextColor(6);
GotoXY(40,1);
Write('press any key');
d:=ReadKey;
GotoXY(40,1);
ClrEOL;
End;
BEGIN
Nul(alfa); Nul(betta);
Nt:=1;
ClrScr;
TextColor(10);
Repeat
Write('Vvedite kolichestvo postavshikov (2<=Na<=',N-1,') ');
ReadLn(Na);
Write('Vvedite kolichestvo potrebitelei (2<=Nb<=',N-1,') ');
ReadLn(Nb);
Until (Na>1) and (Na<=N-1) and (Nb>1) and (Nb<=N-1);
Tabl;
(******************* ввод начальных данных ******************)
PrintS(1,1,'Vvedite kolichestvo produkcii:',3);
W_W(A,Na,'A');
W_W(B,Nb,'B');
TextColor(3);
GotoXY(1,1); ClrEOL;
Write('Vvedite stoimost perevozki');
for i:=1 to Na do
for j:=1 to Nb do begin
TextColor(3);
GotoXY(29,1); ClrEOL;
Write('A',i,' - B',j,' ');
Rid(c[i,j],5);
Print((n1+1)*j+n2-4,i*3+3,1,c[
end;
(*****************************
GotoXY(1,1);
ClrEOL;
TextColor(14);
Write('Tablica N1');
for i:=1 to Na do Sa:=Sa+A[i];
for i:=1 to Nb do Sb:=Sb+B[i];
if Sa<>Sb then begin
{если задача является
PrintS(20,1,'Открытая задача (Нажмите любую клавишу)',7);
d:=ReadKey;
if Sa>Sb then begin
inc(Nb);
B[Nb]:=Sa-Sb;
for i:=1 to Na do c[i,Nb]:=0;
end else begin
inc(Na);
A[Na]:=Sb-Sa;
for i:=1 to Nb do c[Na,i]:=0;
end;
Tabl;
for i:=1 to Na do
for j:=1 to Nb do Print((n1+1)*j+n2-4,i*3+3,1,c[
for i:=1 to Na do
Print(n2-trunc(ln(A[i])/ln(10)
for i:=1 to Nb do
Print(n2+i*(n1+1)-trunc(ln(B[
PrintS(20,1,'Otkritaya zadacha',7);
end
else PrintS(20,1,'Zakritaya zadacha',7);
(************** cоставление опорного плана ****************)
for i:=1 to Nb do B_d[i]:=B[i];
for i:=1 to Na do begin
for j:=1 to Nb do x[j]:=j;
for j:=1 to Nb-1 do begin
x_min:=c[i,x[j]];
r_min:=j;
for r:= j+1 to Nb do
if (x_min>c[i,x[r]]) or
((x_min=c[i,x[r]]) and (B[x[r]]>b[x[r_min]])) then
begin
x_min :=c[i,x[r]];
r_min:=r;
end;
x_p:=x[r_min];
x[r_min]:=x[j];
x[j]:=x_p;
end;
Sp:=0;
for j:=1 to Nb do begin
p[i,x[j]]:=B_d[x[j]];
if p[i,x[j]]>A[i]-Sp then p[i,x[j]]:=A[i]-Sp;
inc(Sp,p[i,x[j]]);
dec(B_d[x[j]],p[i,x[j]]);
end;
end;
(*****************************
for i:=1 to Na do
for j:=1 to Nb do if p[i,j]=0 then p[i,j]:=-1;
W_p;
f:=FF; f0:=F;
While a_b do;
for i:=1 to Na do Print(l+1,i*3+3,3,alfa[i],14);
for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,6,betta[
Pauza;
(******* постепенное приближение плана к оптимальному ******)
While kkk(ki,kj)<0 do begin
kontur;
pauza;
for i:=1 to Na do
for j:=1 to Nb do PrintS((n1+1)*j+n2-1,i*3+3,' ',14);
inc(Nt);
GotoXY(1,1);
Write('Tablica N',Nt);
W_p;
f0:=f; f:=FF;
if a_b then Goto l1;
for i:=1 to Na do Print(l+1,i*3+3,3,alfa[i],14);
for i:=1 to Nb do Print(i*(n1+1)+n2-4,h,6,betta[
Pauza;
end;
(*****************************
PrintS(40,1,'Reshenie ortimalno',12);
PrintS(60,1,'(any key)',6);
for i:=1 to Na do
for j:=1 to Nb do if p[i,j]=-1 then begin
h:=i*3+4;
l:=j*(n1+1)+n2-5;
GotoXY(l,h);
Write(' ':n1);
end;
GotoXY(40,1);
l1: d:=ReadKey;
END.
Программа жұмысы 1-4 – суреттерде көрсетілген.
Program
Procedure Nul массивті нөлдейді
Procedure Prints s-жолын шығарады
Procedure Print a-числосын шығарады
Procedure Rid x-процедурасын шығарады
Procedure goriz Процедуралар goriz,wertic және Tab1 таблицасын шығарады
Procedure W_W таблицаны шығарады (өнімнің саны)
Function FF:longint; план бағасын шығару
Function a_b:Boolean потенциялдарды санау (alfa және betta )
Procedure W_p пландарды бөліп шығару
Function kkk:integer бос клеткілерге
Procedure div_mod бір өлшемді массивтен көп өлшемді массивке аудару
Procedure Rek рекурсивті процедура контурдың орналасқанын анықтайды
Procedure kontur контурдың орналасқанын анықтайды
Транспорт есебін шығару, көптеген қаржы мөлшерін үнемдеуге мүмкіншілік береді, ал есепті ЭЕМ көмегімен шығарған уақытты үнемдейді. Қазіргі кезде транспорт есебі өндірістің ең маңызды есептерінің бірі болып табылады.