Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Как решать транспортную задачу.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
83.7 Кб
Скачать

Как решать транспортную задачу(ТЗ)

Суть ТЗ: есть несколько складов и несколько заказчиков. Есть некоторый абстрактный продукт (задаваемый количеством единиц этого продукта) который содержится на складах и который надо доставить, в требуемом количестве, заказчикам. Задана так же стоимость провоза одной единицы продукта со склада к заказчику. Причем стоимость провоза может различаться в зависимости от того, с какого склада и к какому заказчику везут товар. Нужно найти оптимальную стратегию перевозок, при которой выполняются все три условия:

  1. полностью удовлетворяется потребность заказчиков в продукте

  2. партия продукта полностью вывозится со всех складов (т.е. после перевозок – все склады пусты)

  3. стоимость перевозок наименьшая.

Задача задается либо взвешенным орграфом, либо таблицей перевозок.

Пример

Таблица перевозок:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

3

2

120

1

6

5

2

3

100

6

3

7

4

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

Например: провоз 10 единиц продукта со второго слада ко второму заказчику будет стоить 10*6=60 у.е.

На таблице, факт того что мы везем 10 единиц продукта со второго слада ко второму заказчику записывается так:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

3

2

120

1

6

10

5

2

3

100

6

3

7

4

Для 110 единиц – стоимость провоза 110*6=660 у.е.

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

3

2

120

1

6

110

5

2

3

100

6

3

7

4

Для 110 единиц – стоимость провоза 110*6=660 у.е.

Обратите внимание, что сумма всех желтых ячеек = сумме всех зеленых (в таком случае задача называется сбалансированной транспортной задачей). Если равенство не выполняется, то очевидно, что одно из первых двух условий не будет выполнено – либо останется излишек на складе, либо не будут полностью удовлетворены заказчики.

Увозя N единиц товара к заказчику, мы должны (мысленно, или явно указывая это в табл.) отнять число N от числа товара на соответствующем складе и от числа требуемого количества товара у соответствующего заказчика.

Т.е. например заказчик требует 50 единиц товара, склад содержит 60 единиц товара, посылаем этому заказчику с этого склада 30 единиц, после этого мы должны учитывать, что теперь заказчику нужно привезти откуда то еще 20 единиц, а на соответствующем складе осталось 30 единиц.

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

(1*)Нельзя вывозить товара со склада больше, чем там есть на самом деле.

(2*)Нельзя привозить заказчику товара больше, чем ему надо.

Т.е. нельзя делать так:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

3

2

120

1

20

6

110

5

2

3

100

6

3

7

4

Потому что 20+110 = 130. 130 < 120 (больше, чем есть на складе)

Нельзя делать так:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

60

3

2

120

1

6

5

50

2

3

100

6

3

7

100

4

Потому что 60+50+100=210 > 40 (больше чем надо заказчику)

Однако вполне допустимы такие перевозки:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

10

2

5

3

2

120

1

6

50

5

2

3

100

6

10

3

60

7

4

Есть несколько методов построения стратегий перевозок

Метод северо-западного угла

1)Берем самую верхнюю левую пустую ячейку.

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

2

5

3

2

120

1

6

5

2

3

100

6

3

7

4

2)Фигачим туда максимально возможное число так, что бы не нарушить (1*) и (2*).

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

5

3

2

120

1

6

5

2

3

100

6

3

7

4

Повторяем точно так же для всех остальных незаполненных верхних левых ячеек:

Фигачим 40 потому что на складе осталось именно 40 (60-20=40), а заказчику все равно надо больше.

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

3

2

120

1

6

5

2

3

100

6

3

7

4

Фигачим ноль, потому что на складе больше нифига нет (60-20-40=0)

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

2

120

1

6

5

2

3

100

6

3

7

4

Фигачим ноль, потому что на складе по прежнему нифига нет

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

6

5

2

3

100

6

3

7

4

Фигачим 0 потому что первый заказчик уже получил все что хотел (20=20)

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

5

2

3

100

6

3

7

4

Фигачим 70 т.к. заказчику нужно для полного счастья еще 70 единиц (70+40=110), и на складе эти 70 единиц как раз есть (120-0=120<70)

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

2

3

100

6

3

7

4

Фигичим 40 т.к. заказчику нужно для полного счастья 40 единиц (0+40=40), и на складе эти 40 единиц как раз есть (120-0-70=50<40)

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

3

100

6

3

7

4

Фигачим 10 т.к. это все что осталось на втором складе, а заказчику все равно надо больше.

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

3

7

4

Фигачим 0 потому что первый заказчик уже получил все что хотел

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

0

3

7

4

Фигачим 0 потому что второй заказчик уже получил все что хотел

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

0

3

0

7

4

Фигачим 0 потому что третий заказчик уже получил все что хотел

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

0

3

0

7

0

4

Фигачим 100 потому что заказчику надо 100, и на складе как раз есть 100 единиц

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

0

3

0

7

0

4

100

В итоге получаем таблицу:

Номер склада

Количество товара на складе

Потребность потребителя 1

Потребность потребителя 2

Потребность потребителя 3

Потребность потребителя 4

20

110

40

110

1

60

1

20

2

40

5

0

3

0

2

120

1

0

6

70

5

40

2

10

3

100

6

0

3

0

7

0

4

100

При решении можно не писать все эти промежуточные таблицы, а написать сразу эту итоговую.

Расшифровка таблицы:

1-ый заказчик получает все 20 единиц с первого склада

2-ой заказчик получает 40 единиц с 1-го склада, 70 со второго.

3-ий заказчик получает 40 единиц со 2-го склада

4-ый заказчик получает 10 единиц со второго склада и 100 с третьего склада

С 1-го склада перевезли 20 единиц первому заказчику, 40 – второму заказчику

Со 2-го склада перевезли 70 ед. 2-му заказчику, 40 ед. 3-ему заказчику, 10 ед. 4-ому заказчику

С 3-го склада перевезли 100 ед. 4-ому заказчику

Общая стоимость всех перевозок:

(1*20+2*40+5*0+3*0)+(1*0+6*70+5*40+2*10)+(6*0+3*0+7*0+4*100) = 20+80+420+200+20+400=1140