Оптимизация транспортных издержек автопарка деревообрабатывающего завода

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    125,55 Кб
  • Опубликовано:
    2013-05-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Оптимизация транспортных издержек автопарка деревообрабатывающего завода

Содержание

Постановка задачи об оптимизации транспортных издержек автопарка деревообрабатывающего завода

Модель выбора оптимального состава транспортных единиц и минимизации транспортных издержек автопарка деревообрабатывающего завода

Метод решения: Метод ветвей и границ на основе двухэтапного симплекс метода

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

Листинг программы контрольного примера

Постановка задачи об оптимизации транспортных издержек автопарка деревообрабатывающего завода

Имеется деревообрабатывающий завод (далее ДЗ), который изготавливает из стволов деревьев строительный материал.

Продукция ДЗ поставляется в строительные организации ближайших регионов. Заготовки на ДЗ поставляются с нескольких сырьевых БАЗ.

Известны все расстояния между ДЗ и потребителями, а так же между ДЗ и сырьевыми базами.

Известны объемы поставок (эквивалентные 20 кубам) для каждого потребителя и соответственно объемы необходимого сырья из условия, что на каждые 20м3 готовой продукции расходуется 30м3 сырья.

Известно кол-во транспортных средств каждого типа в составе автопарк.

Известно количество расходуемого топлива на каждые 100 км при средней скорости перевозки 70 км/ч для каждого транспортного средства, тип топлива (А-80) и его стоимость.

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

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

В итоге будет получена численная величина, измеряемая в рублях, которая равна минимальному значению транспортных издержек (затрат на грузоперевозку)

Модель выбора оптимального состава транспортных единиц и минимизации транспортных издержек автопарка деревообрабатывающего завода

Пусть i - поставщиков сырья и j - потребителей продукции.

В составе завода имеются транспортные средства r типов ()

Для формальной записи задачи введем переменные булевого типа:

, если используется k-e транспортное средство типа r для доставки сырья от i-го

= поставщика;

, в противном случае

, если используется k-e транспортное средство типа r для доставки готовой продукции до j-го потребителя;

Yjrk =

, в противном случае

Также известны технические характеристики транспортных средств каждого типа:

количество транспортных средств данного типа: Kr;

грузоподъемность: Gr;

расход топлива на каждые 100 километров пути: Zr;

цена 1л. топлива: Lr.

Оптимизационная модель может быть записана в следующем виде:

В качестве критерия оптимизации возьмем следующую функцию:

, где

Первое слагаемое - суммарные транспортные затраты на завоз сырья от поставщиков, а второе - суммарные транспортные затраты на развоз продукции до потребителей.

Минимизацию транспортных издержек автопарка ДЗ будем рассчитывать при следующих ограничениях:

) на объем необходимого сырья

 Сырья

2) на объем вывозимой продукции

Продукции

3) на использование транспортных средств

 

4) на количество обслуживаемых потребителей


Метод решения: Метод ветвей и границ на основе двухэтапного симплекс метода

Так как некоторые переменные являются булевыми и принимают фиксированные значения: 0 и1, то это задача целочисленного линейного программирования (далее ЦЛП). Поэтому методом решения выбран метод ветвей и границ. Суть метода:

Метод ветвей и границ.

Решаем задачу как задачу линейного программирования (далее ЛП) симплекс-методом (см. далее) без учета ограничений на целочисленность переменных.

Если мы получим оптимальные целочисленные решения задачи ЛП - 0, то они являются также и оптимальными решениями задачи ЦЛП.

Если мы не получим целочисленных решений, то целевая функция f0 задачи ЛП - 0 становится верхней границей возможных оптимальных значений f задачи ЦЛП, потому что значение целевой функции f при введении в дальнейшем новых ограничений для получения оптимальных целочисленных решений уменьшается (увеличивается).

Затем производится ветвление по одному из нецелочисленных оптимальных решений задачи ЛП - 0, целью которого является разбиение множества допустимых решений на 2 подмножества путем построения дополнительных ограничений таким образом, чтобы исключить нецелочисленную точку x0* и сделать решение, по крайней мере одной из задач, целочисленным по одной выбранной координате xk.


Ограничения, введенные при ветвлении, добавляются к ограничениям задачи ЛП - 0. В каждой из вершин находим оптимальные решения полученных путем добавления новых ограничений задач ЛП - 1 и ЛП - 2. Если ни у одной из них мы не получили целочисленных оптимальных решений, то мы выбираем ту вершину, в которой получено наибольшее значение целевой функции и производим дальнейшее ветвление. Так продолжается до получения целочисленного оптимального решения одной из задач ЛП.

Отыскание оптимального решения с использованием симплекс-метода сводится к последовательному направленному перебору вершин многогранника, образованного ограничениями, при котором монотонно увеличивается (уменьшается) значение целевой функции.

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


Количество поставщиков сырья: I = 2

i

Наименование

Расстояние до поставщика, км

Объем сырья, м3

1

Старая Вичуга

70

100

2

Кинешма

110

350

j

Наименование

Расстояние до потребителя, км

Объем поставки, м3

1

Владимир

92

40

2

Москва

240

100

3

Ярославль

170

60

4

Кострома

210

80


Количество типов транспортных средств: R = 3

Транспортные средства для поставки готовой продукции

R

Количество, шт.

Грузоподъемность, м3

Расход топлива, л/100км

Цена 1л. топлива, руб.

1

2

20

20

13,5

2

6

40

22,5

13,5


Транспортные средства для поставки сырья

R

Количество, шт.

Грузоподъемность, м3

Расход топлива, л/100км

Цена 1л. топлива, руб.

3

14

4

28,3

13,5


Расчет:


Таким образом, автопарку ДЗ необходимо развести 280 м3 продукции и завести 420 м3 сырья.

Критерий:


Ограничения:

на объем необходимого сырья


на объем вывозимой продукции


на использование транспортных средств

На количество обслуживаемых потребителей


Обозначим переменные следующим образом:

Подставим константы:

В критерий:

В ограничения:


Результат расчета контрольного примера:

Листинг программы контрольного примера

Unit1;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids;

= 1E-6;= 40;= 1.7E+308;= 10000;= class(TForm): TLabel;: TEdit;: TStringGrid;: TLabel;: TEdit;: TStringGrid;: TLabel;: TStringGrid;: TButton;: TLabel;: TLabel;: TEdit;: TEdit;FormCreate(Sender: TObject);SG2KeyPress(Sender: TObject; var Key: Char);Button1Click(Sender: TObject);SG3KeyPress(Sender: TObject; var Key: Char);Edit1Change(Sender: TObject);Edit2Change(Sender: TObject);

{ Private declarations }

{ Public declarations };

= array[1..5,1..5] of Real;= array [0..MaxSizeArray,0..MaxSizeArray] of double;

: TForm1;,J:Integer;: array [1..3] of integer;, Vsir:integer;

C: TArr;

, n1, n2: word; // Число строк, номер строки (i), m1: word; // Число столбцов, номер столбца (j), a1, a2: TMatr;, x1, x2: TArr; // Коэффициенты целевой функции: array [1..MaxSizeArray] of double; // Коэффициенты базисных переменных: array [1..MaxSizeArray] of word; // Номера базисных переменных

Z: array [1..MaxSizeArray] of double; // Строка оценок

mi, mj: word; // Ключевые строка и столбец

min: double;: integer;: array [1..MaxSizeArray] of boolean;, MM, PP, LL, FF, TT: word;

{$R *.dfm}

TForm1.FormCreate(Sender: TObject);:integer;:=StrToInt(Edit1.Text);u:=1 to I do.Cells[0,u]:=IntToStr(u);.Cells[0,0]:='№';.Cells[1,0]:='Расстояние, км.';

SG1.Cells[2,0]:='Объем сырья, м3';

SG1.Cells[1,1]:='70';SG1.Cells[1,2]:='110';.Cells[2,1]:='100';SG1.Cells[2,2]:='350';

:=StrToInt(Edit2.Text);u:=1 to J do.Cells[0,u]:=IntToStr(u);.Cells[0,0]:='№';.Cells[1,0]:='Расстояние, км.';

SG2.Cells[2,0]:='Объем поставки, м3';

SG2.Cells[1,1]:='92';SG2.Cells[1,2]:='240';SG2.Cells[1,3]:='170';SG2.Cells[1,4]:='210';.Cells[2,1]:='40';SG2.Cells[2,2]:='100'; SG2.Cells[2,3]:='60';SG2.Cells[2,4]:='80';

u:=1 to 3 do.Cells[0,u]:=IntToStr(u);.Cells[0,0]:='№';.Cells[1,0]:='Количество';.Cells[2,0]:='Грузоподъемность, м3';.Cells[3,0]:='Расх. топл. на 100 км';

SG3.Cells[4,0]:='Цена 1л. топлива, руб.';

SG3.Cells[1,1]:='2';SG3.Cells[1,2]:='6';SG3.Cells[1,3]:='14';.Cells[2,1]:='20';SG3.Cells[2,2]:='40';SG3.Cells[2,3]:='30';.Cells[3,1]:='20';SG3.Cells[3,2]:='22.5';SG3.Cells[3,3]:='28.3';.Cells[4,1]:='13.5';SG3.Cells[4,2]:='13.5'; SG3.Cells[4,3]:='13.5';

:=0;u:=1 to j do:=Vprod + StrToInt(SG2.Cells[2,u]);.Text:=IntToStr(VProd);

:=Round(3/2*VProd);.Text:=IntToStr(Vsir);

u:=1 to 3 do[u]:=StrToInt(SG3.Cells[1,U]);

;

TForm1.SG2KeyPress(Sender: TObject; var Key: Char);: integer;:=0;u:=1 to j doSG2.Cells[2,u]='' then SG2.Cells[2,u]:='0';:=Vprod + StrToInt(SG2.Cells[2,u]);;.Text:=IntToStr(VProd);

:=Round(3/2*VProd);.Text:=IntToStr(Vsir);;

Simplex(var d: TMatr; var y: TArr); // Симплекс метод, j: word;: double;i:=1 to n dosign[i] then d[i,m+i]:=-1

else d[i,m+i]:=1; // Введем дополнительные переменные[i]:=m+i; // и занесем номер базисной переменной[i]:=0;;:=m+n; // Изменим размерность массива на кол-во доп. переменных

it:=0;

// ListScore;j:=1 to m do:=0;i:=1 to n do cba:=cba+CB[i]*d[i,j];

end;:=0; // Поиск ключевого столбца:=0;

for j:=1 to m domin>Z[j] then:=Z[j];:=j;

end;mj=0 then break; // Ключевой столбец не найден - Некуда идти:= MaxDouble; // Поиск ключевой строки:=0;

for i:=1 to n do(d[i,mj]<>0) and (min>abs(d[i,0]/d[i,mj])) and (nb[i]>m-n) then:=d[i,0]/d[i,mj];:=i;;;mi=0 then break; // Ключевая строка не найдена - Некуда идти:=d[mi,mj];

// JordanGauss(d);i:=1 to n doj:=0 to m DO(i<>mi) and (j<>mj) then[i,j]:=d[i,j]-d[i,mj]*d[mi,j]/d[mi,mj];j:=0 to m do d[mi,j]:=d[mi,j]/min;i:=1 to n do if i<>mi then d[i,mj]:=0;[mi]:=mj;(it);it>MaxIteration-1;

;

CheckForFrac(x: TArr): integer;: integer;:= 0;i := 1 to n1 doFrac(x[i,1]) <> 0 then result := i;;

Func(x: TArr): Real;: integer;:= 0;i := 1 to n1 do:= result + c[i,2]*x[i,1];;

correction(var x: TArr);: integer;i := n1-MM-NN+1to n1 dox[i,1] > 0 then x[i,1] := 1;;

MVG;: integer;: TMatr;:= n;:= n;:= m;:= a;(a, x);(x);CheckForFrac(x) <> 0 do:= b;:= CheckForFrac(x);(n2);:= n2;:= m1;:= a;[n, 0] := int(a[p, 0])+1;[n, p] := 1;[n] := true;(a2, x2);:= a;[n, 0] := int(a[p, 0]);[n, p] := 1;[n] := false;(a1, x1);(CheckForFrac(x1)=0) or (CheckForFrac(x1)=0)then(CheckForFrac(x1)=0) then x := x1x := x2;;(CheckForFrac(x1)>CheckForFrac(x2)) then:= a1;:= x1;:= a2;:= x2;;(x);;;TForm1.Button1Click(Sender: TObject);:integer;:Array [1..100] of integer;,min2:Real;:integer;,i2:integer;:Boolean;:Real;:Boolean;,KM2: integer;

:=0;u:=1 to I do:=summa+Round(StrToInt(SG1.Cells[2,u])/30-0.4);(summa>StrToInt(SG3.Cells[1,3]))(StrToInt(SG3.Cells[1,3])*30<VSir) then.MessageBox('Нехватка транспортных средств для сырья','Error');;;

min2:=0;u:=1 to I do[u,3]:=StrToInt(SG1.Cells[1,U])*28.3*13.5/100;:=1000000;

:=0;(k3,sizeOf(k3),0);nk<=R[3] then:=true;i2:=1 to I dok3[i2]*StrToInt(SG3.Cells[2,3])>StrToInt(SG1.Cells[2,i2])ok:=false;

ok then:=0;i2:=1 to I do:=summa+k3[i2]*StrToInt(SG3.Cells[2,3]);

if summa>=VSir then // ОГРАничение на объем сырья

begin:=0;i2:=1 to I do:=summa+k3[i2]*C[i2,3];min>summa then min:=summa;;;;:=1;(nk);(k3[1]);

k3[i1]=R[3]+1 do[i1]:=0;:=i1+1;(k3[i1]);:=nk-R[3];;NK=R[3]*I;min=1000000 then.MessageBox('Объем сырья у поставщиков меньше необходимого','Error');;;:=min;

// к потребителям

u:=1 to J do[u,1]:=StrToInt(SG2.Cells[1,U])*20*13.5/100;[u,2]:=StrToInt(SG2.Cells[1,U])*22.5*13.5/100; ;:=1000000;(k3,sizeOf(k3),0);nk<=(R[1]+R[2]) then

Begin

// ограничение на использование транспортных средств

Flag:=false;:=0;:=0;i2:=1 to j do:=KM1+K3[i2];i2:=j+1 to j*2 do:=KM2+K3[i2];(KM1=StrToInt(SG3.Cells[1,1]))(KM2=StrToInt(SG3.Cells[1,2]))Flag:=true;flag then

begin

// ОГРАничение на объем продукции:=true;

For i2:=1 to j dok3[i2]*StrToInt(SG3.Cells[2,1])+k3[i2+j]*StrToInt(SG3.Cells[2,2])

<>StrToInt(SG2.Cells[2,i2])ok:=false;;

ok then:=0;i2:=1 to J do:=summa+k3[i2]*C[i2,1]+k3[i2+j]*C[i2,2];min>summa then min:=summa;;; ;

:=1;(nk);(k3[1]);k3[i1]=R[1]+R[2]+1 do[i1]:=0;:=i1+1;(k3[i1]);:=nk-(R[1]+R[2]);;NK=(R[1]+R[2])*j*2;

min=1000000 then.MessageBox('Нехватка транспортных средств для развозки продукции','Error');;;:=min2+min;.MessageBox(PAnsiChar(FloatToStr(min2)),'Минимальные затраты, руб.');

TForm1.SG3KeyPress(Sender: TObject; var Key: Char);:integer;u:=1 to 3 do[u]:=StrToInt(SG3.Cells[1,U]);;

TForm1.Edit1Change(Sender: TObject);:integer;Edit1.Text='' then Edit1.Text:='0';

if StrToInt(Edit1.Text)=0 then sHOWmESSAGE('Количество поставщиков не может быть равным нолю')

else.RowCount:=StrToInt(Edit1.Text)+1;:=StrToInt(Edit1.Text);u:=1 to I do.Cells[0,u]:=IntToStr(u);;;

TForm1.Edit2Change(Sender: TObject);:integer;Edit2.Text='' then Edit2.Text:='0';

if StrToInt(Edit2.Text)=0 then sHOWmESSAGE('Количество потребителей не может быть равным нолю')

End; ;

.

Похожие работы на - Оптимизация транспортных издержек автопарка деревообрабатывающего завода

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!