Оптимизация затрат на ремонт

Автор: Пользователь скрыл имя, 27 Февраля 2012 в 16:38, курсовая работа

Краткое описание

В современном мире невозможно представить не одно предприятие не стремящееся повысить свою прибыль и сократить растраты, возникающие в процессе производства. В данной работе рассматривается минимизация затрат на ремонтно-восстановительные работы оборудования. Достаточно большие потери на производстве возникают из-за простоя вышедшего из строя оборудования, и, зачастую, их можно сильно сократить, определив последовательность и виды выполнения ремонтных работ. Проведение восстановительных работ зависит от многих факторов, например, от стоимости и доступности ресурсов.

Оглавление

Реферат 3
Введение 4
1. Постановка задачи 5
2. Теоретические основы сетевого планирования 6
3. Описание метода решения 12
4. Оптимизация сетевого графика 16
Заключение 19
Список использованной литературы 20
Приложение 1 21

Файлы: 1 файл

курсовая ТИ.doc

— 576.00 Кб (Скачать)
lign:justify">           begin

           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)-1,2));

      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)-1,2));

                        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]:=inttostr(strtoint(stringgrid2.Cells[1,j])+work[strtoint(copy(st,3*i-2,2)),strtoint(copy(st,3*i+1,2))]);

    end;

 

crit:=0;

for i:=1 to road do

    if strtoint(stringgrid2.Cells[1,i])>crit then

                                        begin

                                        crit:=strtoint(stringgrid2.Cells[1,i]);

                                        st_crit:=stringgrid2.Cells[0,i];

                                        end;

for j:=1 to road do

    stringgrid2.Cells[2,j]:=inttostr(crit-strtoint(stringgrid2.Cells[1,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]:=inttostr(j);

    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,3*t-2,2)),strtoint(copy(st,3*t+1,2))];

        if tp>strtoint(stringgrid3.Cells[1,tmp]) then

                       stringgrid3.Cells[1,tmp]:=inttostr(tp);

        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)-temp+1);

        tn:=0;

        for t:=1 to round((length(st)+1)/3-1) do

          begin

          tn:=tn+work[strtoint(copy(st,3*t-2,2)),strtoint(copy(st,3*t+1,2))];

          if tn>strtoint(stringgrid3.Cells[2,tmp]) then

                          stringgrid3.Cells[2,tmp]:=inttostr(tn);

          end;

        end;

    stringgrid3.Cells[2,tmp]:=inttostr(crit-strtoint(stringgrid3.Cells[2,tmp]));

    end;

//=================резерв времени события i==============

for j:=1 to n do

  stringgrid3.Cells[3,j]:=inttostr(strtoint(stringgrid3.Cells[2,j])-strtoint(stringgrid3.Cells[1,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.colcount+1;

stringgrid6.cells[stringgrid6.colcount-1,0]:=inttostr(stringgrid6.colcount-1);

stringgrid6.cells[stringgrid6.colcount-1,1]:='0';

stringgrid6.cells[stringgrid6.colcount-1,2]:='0';

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+','+st2;

stringgrid5.Cells[0,p]:=st1+','+st2;

stringgrid4.cells[1,p]:=stringgrid1.cells[2,p];

 

w1:=1;

w2:=1;

while strtoint(stringgrid3.Cells[0,w1])<>strtoint(st1) do inc(w1);

while strtoint(stringgrid3.Cells[0,w2])<>strtoint(st2) do inc(w2);

stringgrid4.Cells[2,p]:=stringgrid3.Cells[1,w1];

stringgrid4.Cells[3,p]:=inttostr(strtoint(stringgrid3.Cells[1,w1])+strtoint(stringgrid4.Cells[1,p]));

stringgrid4.Cells[4,p]:=inttostr(strtoint(stringgrid3.Cells[2,w2])-strtoint(stringgrid4.Cells[1,p]));

stringgrid4.Cells[5,p]:=stringgrid3.Cells[2,w2];

stringgrid4.Cells[6,p]:=inttostr(strtoint(stringgrid4.Cells[5,p])-strtoint(stringgrid4.Cells[2,p])-strtoint(stringgrid4.Cells[1,p]));

//вычисление частного резерва 1

stringgrid4.Cells[7,p]:=inttostr(strtoint(stringgrid3.Cells[2,w2])-strtoint(stringgrid3.Cells[2,w1])-strtoint(stringgrid4.Cells[1,p]));

//вычисление частного резерва 2

stringgrid4.Cells[8,p]:=inttostr(strtoint(stringgrid3.Cells[1,w2])-strtoint(stringgrid3.Cells[1,w1])-strtoint(stringgrid4.Cells[1,p]));

//вычисление SP

stringgrid6.Cells[stringgrid6.colcount-1,1]:=inttostr(strtoint(stringgrid6.cells[stringgrid6.colCount-1,1])+strtoint(stringgrid4.Cells[6,p]));

 

//вычисление коэффициента напряженности

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*j-2,2)),strtoint(copy(st,3*j+1,2))];

    temp:=pos(st2,st);

    if (t>=strtoint(stringgrid5.Cells[1,p]))and(st<>st_crit)and(temp<>0) then

        begin

        stringgrid5.Cells[2,p]:=st;

        stringgrid5.Cells[1,p]:=inttostr(t);

        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]:=stringgrid5.Cells[4,p]+st1;

      for i:=1 to stringgrid1.rowcount do

        if stringgrid1.cells[0,i]=st1 then

          stringgrid5.Cells[3,p]:=inttostr(strtoint(stringgrid5.Cells[3,p])+strtoint(stringgrid1.cells[2,i]));

      end;

    end;

stringgrid4.Cells[9,p]:=floattostr((strtoint(stringgrid5.Cells[1,p])-strtoint(stringgrid5.Cells[3,p]))/(crit-strtoint(stringgrid5.Cells[3,p])));

tmpf:=(round(strtofloat(stringgrid4.Cells[9,p])*1000))/1000;

stringgrid4.Cells[9,p]:=floattostr(tmpf);

end;

for i:=1 to arc do

  begin

  //вычисление людских ресурсов

  stringgrid4.Cells[10,i]:=inttostr(round(strtoint(stringgrid4.Cells[1,i])*2*strtofloat(stringgrid4.Cells[9,i])));

  stringgrid6.Cells[stringgrid6.colcount-1,2]:=inttostr(strtoint(stringgrid6.cells[stringgrid6.colCount-1,2])+strtoint(stringgrid4.Cells[10,i]));

  end;

end;

 

procedure TForm1.recom;

var i,j,index,numb,num_1,temp,p1,p2: byte;

    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(stringgrid4.cells[1,temp]);

                   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.Caption+stringgrid4.cells[0,temp]+' ';

                stringgrid1.Cells[2,temp]:=inttostr(strtoint(stringgrid1.cells[2,temp])+1);

                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.Caption+stringgrid4.cells[0,temp]+' ';

                stringgrid1.Cells[2,temp]:=inttostr(strtoint(stringgrid1.cells[2,temp])-1);

                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.cells[9,i]);

      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[stringgrid6.ColCount-2,1])<strtoint(stringgrid6.cells[stringgrid6.ColCount-1,1]) then

      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(stringgrid4.cells[1,i])*2;

Label8.Caption:='Максимальное количество людских ресурсов '+inttostr(W_max);

 

end;

 

end.

 

 

 

 

 

 

 

 

 

 

 

Контрольный пример

 

Исходный сетевой график

 

 

 

 

 

 

 

 

Информация о работе Оптимизация затрат на ремонт