Автор: Пользователь скрыл имя, 27 Февраля 2012 в 16:38, курсовая работа
В современном мире невозможно представить не одно предприятие не стремящееся повысить свою прибыль и сократить растраты, возникающие в процессе производства. В данной работе рассматривается минимизация затрат на ремонтно-восстановительные работы оборудования. Достаточно большие потери на производстве возникают из-за простоя вышедшего из строя оборудования, и, зачастую, их можно сильно сократить, определив последовательность и виды выполнения ремонтных работ. Проведение восстановительных работ зависит от многих факторов, например, от стоимости и доступности ресурсов.
Реферат 3
Введение 4
1. Постановка задачи 5
2. Теоретические основы сетевого планирования 6
3. Описание метода решения 12
4. Оптимизация сетевого графика 16
Заключение 19
Список использованной литературы 20
Приложение 1 21
showmessage(' Ошибка в организации графа ');
exit;
end;
st:=st+','+sttmp;
t:=j;
end;
inc(road);
Stringgrid2.RowCount:=road+1;
Stringgrid2.Cells[0,road]:=st;
Delete(st,length(st)-2,3);
t:=strtoint(copy(st,length(st)
Delete(st,length(st)-2,3);
if t=1 then inc(mas[1]);
while t<>1 do
begin
j:=mas[t]+1;
while ((work[t,j]=-1)and(j<=n)) do inc(j);
if j>n then begin
mas[t]:=1;
t:=strtoint(copy(st,length(st)
Delete(st,length(st)-2,3);
if t=1 then inc(mas[1]);
end
else begin
mas[t]:=j;
t:=1;
st:='01';
end;
end;
end;
Except
Showmessage(' Ошибка в организации графа ');
end;
//==================критически
for j:=1 to road do
begin
st:=stringgrid2.Cells[0,j];
StringGrid2.Cells[1,j]:='0';
for i:=1 to round((length(st)+1)/3-1) do
stringgrid2.Cells[1,j]:=
end;
crit:=0;
for i:=1 to road do
if strtoint(stringgrid2.Cells[1,
for j:=1 to road do
stringgrid2.Cells[2,j]:=
label2.Caption:=inttostr(crit)
label3.Caption:=st_crit;
Label1.Visible:=True;
//===================ранний срок=================
stringgrid3.RowCount:=n+1;
stringgrid3.Cells[0,1]:='1';
stringgrid3.Cells[1,1]:='0';
tmp:=1;
for j:=2 to max do
begin
if ((peak[j].x=0) and (peak[j].y=0)) then continue;
inc(tmp);
stringgrid3.Cells[0,tmp]:=
stringgrid3.Cells[1,tmp]:='0';
for i:=1 to road do
begin
st:=stringgrid2.Cells[0,i];
if j<10 then temp:=pos('0'+inttostr(j),st)
else temp:=pos(inttostr(j),st);
if temp=0 then continue;
st:=copy(st,1,temp+1);
tp:=0;
for t:=1 to round((length(st)+1)/3-1) do
tp:=tp+work[strtoint(copy(st,
if tp>strtoint(stringgrid3.Cells[
stringgrid3.Cells[1,tmp]:=
end;
end;
//===============поздний срок==========================
tmp:=0;
for j:=1 to max do
begin
if (peak[j].x=0) and (peak[j].y=0) then continue;
inc(tmp);
stringgrid3.Cells[2,tmp]:='0';
for i:=1 to road do
begin
st:=stringgrid2.Cells[0,i];
if j<10 then temp:=pos('0'+inttostr(j),st)
else temp:=pos(inttostr(j),st);
if temp=0 then continue;
st:=copy(st,temp,length(st)-
tn:=0;
for t:=1 to round((length(st)+1)/3-1) do
begin
tn:=tn+work[strtoint(copy(st,
if tn>strtoint(stringgrid3.Cells[
stringgrid3.Cells[2,tmp]:=
end;
end;
stringgrid3.Cells[2,tmp]:=
end;
//=================резерв времени события i==============
for j:=1 to n do
stringgrid3.Cells[3,j]:=
WORKR;
end;
procedure TForm1.WORKR;
var sttemp,st1,st2: string;
i,j,t,w1,w2,temp,p:integer;
flag: boolean;
tmpf: real;
begin
stringgrid4.RowCount:=arc+1;
stringgrid5.RowCount:=arc+1;
stringgrid6.colCount:=
stringgrid6.cells[stringgrid6.
stringgrid6.cells[stringgrid6.
stringgrid6.cells[stringgrid6.
W_max:=0;
for p:=1 to arc do
begin
flag:=false;
sttemp:=StringGrid1.Cells[0,p]
st1:=copy(sttemp,1,2);
st2:=copy(sttemp,4,2);
stringgrid4.Cells[0,p]:=st1+',
stringgrid5.Cells[0,p]:=st1+',
stringgrid4.cells[1,p]:=
w1:=1;
w2:=1;
while strtoint(stringgrid3.Cells[0,
while strtoint(stringgrid3.Cells[0,
stringgrid4.Cells[2,p]:=
stringgrid4.Cells[3,p]:=
stringgrid4.Cells[4,p]:=
stringgrid4.Cells[5,p]:=
stringgrid4.Cells[6,p]:=
//вычисление частного резерва 1
stringgrid4.Cells[7,p]:=
//вычисление частного резерва 2
stringgrid4.Cells[8,p]:=
//вычисление SP
stringgrid6.Cells[stringgrid6.
//вычисление коэффициента напряженности
st:=stringgrid4.Cells[0,p];
temp:=pos(st,st_crit);
if temp=0 then stringgrid4.Cells[9,p]:='0'
else stringgrid4.Cells[9,p]:='1';
//вычисление t(Lmax)
if stringgrid4.Cells[9,p]='1' then continue;
stringgrid5.Cells[1,p]:='0';
for i:=1 to road do
begin
st:=Stringgrid2.Cells[0,i];
temp:=pos(st1,st);
if temp=0 then continue;
t:=0;
for j:=1 to round((length(st)+1)/3-1) do
t:=t+work[strtoint(copy(st,3*
temp:=pos(st2,st);
if (t>=strtoint(stringgrid5.
begin
stringgrid5.Cells[2,p]:=st;
stringgrid5.Cells[1,p]:=
end;
end;
//вычисление t(L'кр)
st:=stringgrid5.Cells[2,p];
stringgrid5.Cells[3,p]:='0';
for j:=1 to round((length(st_crit)+1)/3-1) do
begin
st1:=copy(st_crit,3*j-2,5);
if pos(st1,st)<>0 then
begin
stringgrid5.Cells[4,p]:=
for i:=1 to stringgrid1.rowcount do
if stringgrid1.cells[0,i]=st1 then
stringgrid5.Cells[3,p]:=
end;
end;
stringgrid4.Cells[9,p]:=
tmpf:=(round(strtofloat(
stringgrid4.Cells[9,p]:=
end;
for i:=1 to arc do
begin
//вычисление людских ресурсов
stringgrid4.Cells[10,i]:=
stringgrid6.Cells[stringgrid6.
end;
end;
procedure TForm1.recom;
var i,j,index,numb,num_1,temp,p1,
k_1,t_1: array [1..30] of byte;
max: integer;
begin
label5.Caption:='Для оптимизации графа можно увеличить продолжительность работ: ';
label6.Caption:='и уменьшить продолжительность работ критического пути: ';
num_1:=0;
for i:=1 to arc do
if k[i]=1 then begin
inc(num_1);
k_1[num_1]:=w[i];
temp:=w[i];
t_1[num_1]:=strtoint(
end;
p1:=num_1;
//отсортировать к_1 по убыванию t(i,j)
for i:=1 to (num_1-1) do
begin
max:=t_1[i]; index:=i; temp:=k_1[i];
for j:=i+1 to num_1 do
if t_1[j] > max then
begin
max:=t_1[j];
temp:=k_1[j];
index:=j;
end;
t_1[index]:=t_1[i];
k_1[index]:=k_1[i];
t_1[i]:=max;
k_1[i]:=temp;
end;
numb:=0;
min:=k[1];
for i:=1 to arc do
if k[i]=min then
begin
temp:=w[i];
label5.Caption:=label5.
stringgrid1.Cells[2,temp]:=
inc(numb);
end;
p2:=numb;
for i:=1 to arc do
if (p1>0)and(p2>0) then
begin
temp:=k_1[i];
label6.Caption:=label6.
stringgrid1.Cells[2,temp]:=
dec(p2);
dec(p1);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i,j,index,temp: byte;
m: array [1..30] of real;
begin
repeat
decision;
for i:=1 to arc do
begin
k[i]:=strtofloat(stringgrid4.
w[i]:=i;
end;
for i:=1 to (arc-1) do
begin
min:=k[i]; index:=i; temp:=w[i];
for j:=i+1 to arc do
if k[j] < min then
begin
min:=k[j];
temp:=w[j];
index:=j;
end;
k[index]:=k[i];
w[index]:=w[i];
k[i]:=min;
w[i]:=temp;
end;
if (stringgrid6.ColCount-1)>1 then
if strtoint(stringgrid6.cells[
if (k[1]>0.6)and(k[1]<1) then FLAG:=TRUE;
if FLAG=FALSE then recom;
until FLAG=TRUE;
Label4.Caption:='Дальнейшая оптимизация для данного графа невозможна';
Label5.Visible:=False;
Label6.Visible:=False;
FLAG:=FALSE;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
W_max:=0;
decision;
for i:=1 to arc do
W_max:=W_max+strtoint(
Label8.Caption:='Максимальное количество людских ресурсов '+inttostr(W_max);
end;
end.
Контрольный пример
Исходный сетевой график