LAB #3. Решение транспортной задачи
Транспортная задача с ограничениями по грузоподъемности — это задача оптимизации, в которой требуется найти такой план перевозок, при котором:
  • Все грузы доставляются потребителям
  • Минимизируются общие затраты на перевозку
  • Соблюдаются ограничения по грузоподъемности транспортных средств
Аналитическая постановка транспортной задачи

Аналитическая постановка транспортной задачи

Цель задачи

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

Дано

  • Два склада с запасами: 150 и 200 единиц.
  • Четыре потребителя с потребностями: 100, 80, 90, 80 единиц.
  • Матрица стоимостей перевозок (в условных единицах):
Склады/Потребители 1 2 3 4
Склад 1 10 22 15 25
Склад 2 25 22 25 28

Ограничения по грузоподъемности маршрутов

  • Первые два маршрута: до 50 единиц.
  • Следующие два маршрута: до 65 единиц.
  • Последние два маршрута: до 70 единиц.

Переменные

\( x_{ij} \) — количество груза, перевозимого от \( i \)-го склада к \( j \)-му потребителю.

Целевая функция

$$ \text{Minimize } Z = \sum_{i=1}^{2} \sum_{j=1}^{4} c_{ij} x_{ij} $$

Ограничения

  1. Баланс запасов: $$ \sum_{j=1}^{4} x_{ij} = a_i, \quad i = 1, 2 $$
  2. Баланс потребностей: $$ \sum_{i=1}^{2} x_{ij} = b_j, \quad j = 1, 2, 3, 4 $$
  3. Ограничения по грузоподъемности: $$ x_{ij} \leq d_{ij}, \quad \text{где } d_{ij} \text{ — грузоподъемность маршрута} $$
  4. Неотрицательность переменных: $$ x_{ij} \geq 0, \quad \forall i, j $$
  5. Целочисленность переменных: $$ x_{ij} \in \mathbb{Z}, \quad \forall i, j $$

Где:

  • \( x_{ij} \) — количество груза, перевозимого от \( i \)-го склада к \( j \)-му потребителю
  • \( a_i \) — запас на \( i \)-м складе
  • \( b_j \) — потребность \( j \)-го потребителя
  • \( d_{ij} \) — максимальная грузоподъемность маршрута
Расчет ограничений по грузоподъемности

Подходы к расчету ограничений по грузоподъемности маршрутов

1. Технические ограничения транспорта

Определение:

Грузоподъемность транспортного средства — это максимальное количество груза, которое можно перевезти за один рейс.

Пример расчета:
Исходные данные:
• Грузоподъемность автомобиля: 5 тонн
• Маршрут: склад 2 → пункт 2
Результат:
• Ограничение по грузоподъемности: d22 = 5 тонн

2. Условия маршрута

Факторы влияния:
  • Длина маршрута
  • Состояние дорожного покрытия
  • Погодные условия
  • Наличие ограничений по весу
Пример расчета:
Исходные данные:
• Длина маршрута: 100 км
• Состояние дороги: плохое
Результат:
• Корректировка грузоподъемности: d22 = 65 единиц
• Причина: ограничения по весу из-за состояния дороги

3. Экономические факторы

Основные аспекты:
  • Стоимость перевозки единицы груза
  • Оптимизация затрат
  • Минимизация расходов
Пример расчета:
Исходные данные:
• Стоимость перевозки: 100 рублей/тонна
Результат:
• Установленное ограничение: d22 = 65 единиц
• Цель: расходы на один маршут ограничены прибылью, 6500 руб
Определение стоимости перевозки

Определение стоимости перевозки (матрицы C)

Официальные источники данных

Доступные ресурсы:
  • ГИС ЖКХ - актуальные данные о тарифах на грузоперевозки по регионам
  • Росстат - статистика по транспортным услугам и их стоимости
  • Федеральные и региональные транспортные порталы - информация о стоимости перевозок по конкретным маршрутам

Профессиональные ресурсы

Специализированные платформы:
  • ATI.SU, Грузовичкоф и другие порталы грузоперевозчиков
  • Базы данных транспортных компаний
  • Профессиональные форумы логистов

Методы расчета стоимости

Прямой расчет основан на:
  • Расстоянии между пунктами
  • Типе транспорта
  • Характеристиках груза
  • Дорожных условиях
  • Времени года
Статистический анализ включает:
  • Сбор данных по аналогичным маршрутам
  • Анализ сезонных колебаний
  • Учет региональных особенностей

Практические рекомендации

Сбор данных:
Основные направления:
  • Анализ конкурентов
  • Расчет себестоимости:
    • Топливо
    • Амортизация транспорта
    • Заработная плата водителей
    • Накладные расходы
  • Учет дополнительных факторов:
    • Пропускная способность дорог
    • Платные участки
    • Погрузочно-разгрузочные работы
    • Страхование груза

Пример формирования матрицы C

Этапы работы:
  1. Сбор базовых данных:
    • Расстояние между пунктами
    • Тип груза
    • Требуемый тип транспорта
  2. Расчет базового тарифа:
    • Стоимость топлива на 1 км
    • Износ транспортного средства
    • Оплата труда водителя
  3. Корректировка тарифа:
    • Сезонность
    • Срочность доставки
    • Особые условия перевозки
  4. Формирование итоговой матрицы:
    • Учет всех факторов и ограничений
    • Регулярное обновление данных
    • Корректировка в соответствии с рыночными условиями
Важные рекомендации:
  • Использовать комбинацию различных источников данных
  • Проводить регулярный мониторинг рынка
  • Учитывать сезонность и региональные особенности
  • Отслеживать изменения в транспортной инфраструктуре
Финальные выводы:

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

  • Комплексный подход к сбору информации
  • Регулярная актуализация данных
  • Учет всех влияющих факторов
  • Профессиональный анализ полученной информации
Решение транспортной задачи в MATLAB

Решение транспортной задачи в MATLAB

Исходный код MATLAB

clear; clc; clf;

% Исходные данные
c = [10 25 15 25;
 22 22 25 28]; % матрица стоимостей 2x4

% Целевая функция
f = c(:);

% Целочисленные переменные
intcon = 1:8;

% Ограничения неравенства
A = [];
b = [];

% Ограничения равенства
Aeq = [1 0 1 0 1 0 1 0; % баланс склада 1
 0 1 0 1 0 1 0 1; % баланс склада 2
 1 1 0 0 0 0 0 0; % баланс пункта 1
 0 0 1 1 0 0 0 0; % баланс пункта 2
 0 0 0 0 1 1 0 0; % баланс пункта 3
 0 0 0 0 0 0 1 1]; % баланс пункта 4

beq = [150; 200; 100; 80; 90; 80];

% Границы
lb = zeros(8,1);
ub = inf(8,1);

% Специальные ограничения
ub(1:2) = 50; % первые два маршрута
ub(5:6) = 50; % следующие два маршрута
ub(3:4) = 70; % следующие два маршрута
ub(7:8) = 70; % последние два маршрута

% Настройка решателя
options = optimoptions('intlinprog',...
 'Display', 'off');

% Решение задачи
x = intlinprog(f, intcon, A, b, Aeq, beq, lb, ub, [], options);

% Форматирование результатов
x_matrix = reshape(x, 2, 4);

% Вывод результатов
disp('Оптимальный план перевозок:');
disp(x_matrix);

% Расчет стоимости
total_cost = sum(sum(x_matrix .* c));
fprintf('Минимальная стоимость: %.2f\n', total_cost);

% Проверка баланса
supply = sum(x_matrix, 2)';
demand = sum(x_matrix, 1);

disp('Проверка баланса:');
disp(['Запасы: ', num2str(supply)]);
disp(['Потребности: ', num2str(demand)]);

% Проверка целочисленности
if all(abs(x - round(x)) < 1e-6)
 disp('Все переменные целочисленные - OK');
else
 warning('Обнаружены дробные значения в решении!');
end
 
Задание
  • балл: 0
    описание:
    • Выбрать два "склада", и район доставки с 4 "адресами" существующими в любом городе/области России. Выбрать два типа "транспорта" в соответствии с задачами перевозок.
    • на основе данных из открытых источников - сформировать матрицу стоимости перевозок.
    • на основе данных из открытых источников или собственного исследования сформировать ограничения по грузоподъемности маршрутов
  • балл: 0
    intlinprog
    описание:
    • реализация решения с использованием intlinprog, с собственными ограничениями на основе выбранных данных
вывод результата расчета с пояснения, обязательно для допуска к защите!
для визуализации можно использовать функцию transport_plot
в коде после получения решения:
transport_plot(x_matrix, c, supply, demand, размер шрифта на графике);
вывод результата расчета с пояснения, обязательно для допуска к защите!

Made on
Tilda