clear; clc; close all;
filename = 'D:\快递优化\LogisticsInstance.mat';
if ~exist(filename, 'file')instance = generate_instance();save(filename, '-struct', 'instance');
elseinstance = 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:4fprintf('正在运行 %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;
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));
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) > 1time_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_genfitness = zeros(config.pop_size