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

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

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

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

Оглавление

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

Файлы: 1 файл

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

— 576.00 Кб (Скачать)

Для реализации принципа непрерывности запроектированного технологического процесса были обеспечены нулевые резервы времени у всех бригад исполнителей.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

 

1.        Кудрявцев Е.М. Microsoft Project. Методы сетевого планирования и управления проектом. – М.: ДМК Пресс, 2005. – 240 с., ил.

2.        Блюмин С.Л., Шуйкова И.А., Сараев П.В., Черпаков И.В. Нечеткая логика: алгебраические основы и приложения: - Липецк: ЛЭГИ, 2002. - 113 с.

3.        Разумов И. М. Сетевые графики в планировании. М., 1981.

4.        Зуховицкий С. И., Радчик И. А., Математические методы сетевого планирования, М., 1965

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 1 

 

Текст программы

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, XPMan, StdCtrls, Grids, ComCtrls, Buttons, Mask;

 

type

  TForm1 = class(TForm)

    Image1: TImage;

    Button1: TButton;

    PageControl1: TPageControl;

    TabSheet1: TTabSheet;

    StringGrid1: TStringGrid;

    TabSheet2: TTabSheet;

    Label1: TLabel;

    StringGrid2: TStringGrid;

    TabSheet3: TTabSheet;

    StringGrid3: TStringGrid;

    TabSheet4: TTabSheet;

    StringGrid4: TStringGrid;

    Label2: TLabel;

    Label3: TLabel;

    StringGrid5: TStringGrid;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    StringGrid6: TStringGrid;

    Button3: TButton;

    Label8: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure draw;

    procedure remove(temp:integer);

    procedure Decision;

    procedure WorkR;

    procedure recom;

    procedure Button3Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

const

max=30;

 

var

  Form1: TForm1;

  x1,y1,x2,y2: integer;

  n,num,road,arc,index,crit:integer;

  st,st_crit:string;

  peak:array [1..max] of tpoint;

  work:array [1..max,1..max] of integer;

  flL,flR,FLAG:boolean;

  k: array [1..30] of real;

  w: array [1..30] of byte;

  min: real;

  W_max,W_m: integer;

implementation

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

var

i,j:integer;

begin

  stringgrid1.Cells[0,0]:='Дуга';

  stringgrid1.Cells[1,0]:='Наименование работы';

  stringgrid1.Cells[2,0]:='Вес дуги';

  stringgrid2.Cells[0,0]:='Путь';

  stringgrid2.Cells[1,0]:='Продолжит-ть';

  stringgrid2.Cells[2,0]:='Резерв t';

  stringgrid3.Cells[0,0]:='Событие';

  stringgrid3.Cells[1,0]:='tр(i)';

  stringgrid3.Cells[2,0]:='tп(i)';

  stringgrid3.Cells[3,0]:='Резерв t';

  stringgrid4.Cells[0,0]:='Дуга';

  stringgrid4.Cells[1,0]:='t(i,j)';

  stringgrid4.Cells[2,0]:='tрн(i,j)';

  stringgrid4.Cells[3,0]:='tро(i,j)';

  stringgrid4.Cells[4,0]:='tпн(i,j)';

  stringgrid4.Cells[5,0]:='tпо(i,j)';

  stringgrid4.Cells[6,0]:='Rп';

  stringgrid4.Cells[7,0]:='Rч_1';

  stringgrid4.Cells[8,0]:='Rч_2';

  stringgrid4.Cells[9,0]:='K';

  stringgrid4.Cells[10,0]:='Wл';

  stringgrid6.Cells[0,0]:='№ ит.';

  stringgrid6.Cells[0,1]:='SumRп';

  stringgrid6.Cells[0,2]:='Wлюд';

  stringgrid5.Visible:=False;

  FLAG:=false;

  Label1.Visible:=False;

  tabsheet1.Show;

 

  image1.Canvas.Pen.Width := 2;

  image1.Canvas.Brush.Color:=clAqua;

  flL:=false;

  flR:=false;

  for i:=1 to max do

    for j:=1 to max do

      work[i,j]:=-1;

  n:=1;

  num:=0;

  road:=0;

  arc:=0;

  peak[1].x:=30;

  peak[1].y:=120;

  image1.Canvas.Ellipse(peak[1].x-20,peak[1].y-20,peak[1].x+20,peak[1].y+20);

end;

 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

var i,j:integer;

begin

if button=mbLeft then

  begin

  flL:=false;

  index:=0;

  for i:=1 to max do

      begin

        if ((peak[i].x=0) and (peak[i].y=0)) then continue;

        if sqr(x-peak[i].x)+sqr(y-peak[i].y)<400 then index:=i;

      end;

  if ((index=0) and (n<max)) then

      begin

      i:=2;

      image1.Canvas.Ellipse(x-20,y-20,x+20,y+20);

      while ((peak[i].x<>0) and (peak[i].y<>0)) do inc(i);

      peak[i].x:=x; peak[i].y:=y;

      inc(n);

      image1.Canvas.TextOut(x-5,y-5,inttostr(i));

      end;

  if index<>0 then flL:=true;

  end;

if button=mbRight then

  for i:=2 to max do

      begin

      if ((peak[i].x=0) and (peak[i].y=0)) then continue;

      if sqr(x-peak[i].x)+sqr(y-peak[i].y)<400 then remove(i);

      end;

if button=mbMiddle then

  begin

  for i:=2 to max do

      begin

      if ((peak[i].x=0) and (peak[i].y=0)) then continue;

      if sqr(x-peak[i].x)+sqr(y-peak[i].y)<400 then

          begin

          for j:=1 to max do

              if work[i,j]<>-1 then flR:=true;

          if flR=false then num:=i;

          flR:=false;

          end;

      end;

  end;

end;

 

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

var

t,i:integer;

begin

  if ((ssLeft in Shift) and (flL=true)) then

      begin

      draw;

      image1.Canvas.Pen.Color:=clblack;

      image1.Canvas.MoveTo(peak[index].x,peak[index].y);

      image1.Canvas.LineTo(x,y);

      image1.Canvas.Pen.Color:=clblack;

      end;

end;

 

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

var t,i:integer;

begin

t:=0;

if flL=true then

  begin

  for i:=1 to max do

      begin

      if ((peak[i].x=0) and (peak[i].y=0)) then continue;

      if sqr(x-peak[i].x)+sqr(y-peak[i].y)<400 then t:=i;

      end;

  if ((t>1)and(work[t,index]=-1)and(work[index,t]=-1)and(t<>index)and(index<>num)) then

      begin

      work[index,t]:=0;

      inc(arc);

      if index<10 then st:='0'+inttostr(index)+','

                  else st:=inttostr(index)+',';

      if t<10 then st:=st+'0'+inttostr(t)

              else st:=st+inttostr(t);

      stringgrid1.RowCount:=arc+1;

      stringgrid1.Cells[0,arc]:=st;

      stringgrid1.Cells[1,arc]:='Работа '+inttostr(arc);

      stringgrid1.Cells[2,arc]:='0';

      end;

  flL:=false;

  end;

flR:=false;

ClipCursor(NIL);

draw;

end;

 

procedure TForm1.Draw;

var t:real;

    xt,yt,i,j:integer;

begin

PatBlt(image1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight, WHITENESS);

for i:=1 to max do

  for j:=1 to max do

      if work[i,j]=-1 then continue else

          begin

          image1.Canvas.MoveTo(peak[i].x,peak[i].y);

          image1.Canvas.LineTo(peak[j].x,peak[j].y);

          image1.Canvas.pen.Width:=2;

          if peak[j].x-peak[i].x=0 then inc(peak[j].x);

          t:=arctan((peak[j].y-peak[i].y)/(peak[j].x-peak[i].x));

          if peak[j].x-peak[i].x=1 then dec(peak[j].x);

          if peak[j].x-peak[i].x>0 then

              begin

              xt:=round(peak[j].x-25*cos(t));

              yt:=round(peak[j].y-25*sin(t));

              end

              else

              begin

              xt:=round(peak[j].x+25*cos(t));

              yt:=round(peak[j].y+25*sin(t));

              end;

          image1.Canvas.Ellipse(xt-3,yt-3,xt+3,yt+3);

          end;

for i:=1 to max do

    begin

    if ((peak[i].x=0) and (peak[i].y=0)) then continue;

    if i=num then image1.Canvas.Pen.Color:=clblue;

    image1.Canvas.Ellipse(peak[i].x-20,peak[i].y-20,peak[i].x+20,peak[i].y+20);

    image1.Canvas.TextOut(peak[i].x-5,peak[i].y-5,inttostr(i));

    image1.Canvas.Pen.Color:=clblack;

    end;

end;

 

procedure TForm1.Remove(temp:integer);

var

i,j,k:integer;

stroka:string[2];

begin

num:=0;

peak[temp].x:=0;

peak[temp].y:=0;

if arc<10 then stroka:='0'+inttostr(temp)

          else stroka:=inttostr(temp);

for i:=1 to arc do

    begin

    j:=pos(stroka,stringgrid1.Cells[0,i]);

    if j>0 then

        begin

        dec(arc);

        stringgrid1.Cells[0,i]:='';

        stringgrid1.Cells[1,i]:='';

        stringgrid1.Cells[2,i]:='';

        end;

    end;

for i:=1 to arc do

    if stringgrid1.Cells[0,i]='' then

        begin

        j:=i+1;

        while stringgrid1.Cells[0,j]='' do inc(j);

        stringgrid1.Cells[0,i]:=stringgrid1.Cells[0,j];

        stringgrid1.Cells[1,i]:=stringgrid1.Cells[1,j];

        stringgrid1.Cells[2,i]:=stringgrid1.Cells[2,j];

        stringgrid1.Cells[0,j]:='';

        stringgrid1.Cells[1,j]:='';

        stringgrid1.Cells[2,j]:='';

        end;

if arc<>0 then stringgrid1.RowCount:=arc+1;

for j:=1 to max do

    begin

    work[temp,j]:=-1;

    work[j,temp]:=-1;

    end;

dec(n);

draw;

end;

 

procedure TForm1.Decision;

var i,j,t,temp,tmp,tp,tn:integer;

    mas:array [1..max] of byte;

    sttmp:string[2];

begin

if num=0 then

    begin

    showmessage('   Задайте конечную вершину    ');

    exit;

    end;

 

Try

for i:= 1 to arc do

work[strtoint(copy(stringgrid1.Cells[0,i],1,2)),strtoint(copy(stringgrid1.Cells[0,i],4,2))]:=strtoint(stringgrid1.Cells[2,i]);

Except

    begin

    showmessage('   Ошибка в задании работ   ');

    exit;

    end;

end;

 

road:=0;

st:='01';

t:=1;

for i:=1 to max do mas[i]:=1;

for i:=2 to max do

    begin

    if ((peak[i].x=0)and(peak[i].y=0)) then continue;

    if work[1,i]<>-1 then temp:=i;

    end;

 

Try

    while mas[1]<=temp do

    begin

      while t<>num do

        begin

        j:=mas[t];

        while work[t,j]=-1 do inc(j);

        mas[t]:=j;

        if j<10 then sttmp:='0'+inttostr(j)

                else sttmp:=inttostr(j);

        if pos(sttmp,st)>0 then

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