Определить оптимальный план перевозок груза от двух складов к четырем потребителям с минимальными затратами, учитывая ограничения по грузоподъемности маршрутов.
Склады/Потребители | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Склад 1 | 10 | 22 | 15 | 25 |
Склад 2 | 25 | 22 | 25 | 28 |
\( x_{ij} \) — количество груза, перевозимого от \( i \)-го склада к \( j \)-му потребителю.
$$ \text{Minimize } Z = \sum_{i=1}^{2} \sum_{j=1}^{4} c_{ij} x_{ij} $$
Где:
Грузоподъемность транспортного средства — это максимальное количество груза, которое можно перевезти за один рейс.
Для получения максимально точных данных о стоимости перевозки необходимо:
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