MATLAB程序实现了一个物流配送优化系统,主要功能是通过遗传算法结合四种不同的配送策略,优化快递订单的配送方案

发布于:2025-04-16 ⋅ 阅读:(26) ⋅ 点赞:(0)
%% 主函数部分
% function main()

clear; clc; close all;

% 生成或加载算例
filename = 'D:\快递优化\LogisticsInstance.mat';
if ~exist(filename, 'file')
    instance = generate_instance();
    save(filename, '-struct', 'instance');
else
    instance = load(filename);
end

% 遗传算法参数配置
ga_config = struct(...
    'pop_size', 10, ...    % 种群大小
    'max_gen', 100, ...     % 最大迭代次数
    'px', 0.9, ...         % 交叉概率
    'pm', 0.1 ...          % 变异概率
    );

% 运行四种策略
strategies = {
   'Strategy1', 'Strategy2', 'Strategy3', 'Strategy4'};
results = cell(4,1);

for s = 1:4
    fprintf('正在运行 %s...\n', strategies{
   s});
    results{
   s} = ga_optimizer(instance, ga_config, s);
end

% 结果可视化
visualize_results(results, strategies);


%% ========== 生成算例功能函数 ==========
function instance = generate_instance()
rng(2023); % 固定随机种子保证可重复性

% 基本参数设置
n_orders = 1000;          % 订单总数
address_repeat_rate = 0.02; % 地址重复率
vehicle_capacity = 800;   % 车辆载重限制
unit_cost = 0.3;          % 快递单位成本

% 生成订单地址(2%重复率)
unique_addrs = ceil(n_orders*(1-address_repeat_rate));
addresses = [1:unique_addrs, randi(unique_addrs, 1, n_orders-unique_addrs)];
addresses = addresses(randperm(n_orders));

% 生成订单重量(50%在[1,15],50%在[16,20])
weights = [randi([1 15], 1, floor(n_orders/2)), randi([16 20], 1, ceil(n_orders/2))];
weights = weights(randperm(n_orders));

% 生成配送时间矩阵
time_matrix = rand(n_orders) * 10; % 基础时间矩阵
time_matrix = triu(time_matrix) + triu(time_matrix)'; % 对称化
time_matrix(1:n_orders+1:end) = 0; % 对角线置零

% 处理地址重复的情况
[~, ~, addr_groups] = unique(addresses);
for k = 1:max(addr_groups)
    idx = find(addr_groups == k);
    if numel(idx) > 1
        time_matrix(idx, idx) = 0;
    end
end

% 时段相关参数
tariffs = [0.7, 0.8, 1.0, 0.5, 0.3]; % 五个时段的关税
route_costs = [1.0, 0.1, 0.3, 0.5, 0.7]; % 路线成本
unit_prices = 0.5 + 0.3*rand(1, n_orders); % 雇佣单价

% 打包实例数据
instance = struct(...
    'n_orders', n_orders, ...
    'addresses', addresses, ...
    'weights', weights, ...
    'time_matrix', time_matrix, ...
    'tariffs', tariffs, ...
    'route_costs', route_costs, ...
    'unit_prices', unit_prices, ...
    'vehicle_capacity', vehicle_capacity, ...
    'unit_cost', unit_cost ...
    );
end

%% ========== 具体算法功能函数 ==========
% 遗传算法优化器
function result = ga_optimizer(instance, config, strategy_id)
% 初始化种群
pop = randi([1 6], config.pop_size, instance.n_orders);

best_f1 = inf;
best_chrom = [];
history = zeros(config.max_gen, 2);

for gen = 1:config.max_gen
    % 评估适应度
    fitness = zeros(config.pop_size