هل يمكنك اعادة كتابة كود ماتلاب التالي مع اظافة تعليق على كلسطريوضح وظيفته بالتفصيل    % main.m
% إنشاء السكان الابتدائية وتحسينها باستخدام خوارزمية الجينات

%% إعداد المسارات
cwd = pwd;
customer_path = fullfile(cwd, 'solomon25_csv', 'customers');
dataInfo_path = fullfile(cwd, 'solomon25_csv', 'data_info');
distanceMatrix_path = fullfile(cwd, 'solomon25_csv', 'distance_matrix');
initial_path = fullfile(cwd, 'initial');

%% جمع أسماء الملفات لكل مجموعة
% تهيئة القوائم الفارغة
dataset_list = {};
dataInfo_files_list = {};
customers_files_list = {};
distanceMatrix_files_list = {};
initialPop_files_list = {};
initialDistance_files_list = {};
initialResults_files_list = {};

% توليد أسماء الملفات لمجموعة c1 (c101 إلى c109)
for i = 101:109
    dataset_list{end+1} = sprintf('c%d', i);
    dataInfo_files_list{end+1} = sprintf('c%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('c%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('c%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('c%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('c%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('c%dinitialResults.csv', i);
end

% توليد أسماء الملفات لمجموعة r1 (r101 إلى r112)
for i = 101:112
    dataset_list{end+1} = sprintf('r%d', i);
    dataInfo_files_list{end+1} = sprintf('r%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('r%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('r%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('r%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('r%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('r%dinitialResults.csv', i);
end

% توليد أسماء الملفات لمجموعة rc1 (rc101 إلى rc108)
for i = 101:108
    dataset_list{end+1} = sprintf('rc%d', i);
    dataInfo_files_list{end+1} = sprintf('rc%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('rc%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('rc%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('rc%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('rc%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('rc%dinitialResults.csv', i);
end

% توليد أسماء الملفات لمجموعة c2 (c201 إلى c208)
for i = 201:208
    dataset_list{end+1} = sprintf('c%d', i);
    dataInfo_files_list{end+1} = sprintf('c%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('c%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('c%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('c%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('c%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('c%dinitialResults.csv', i);
end

% توليد أسماء الملفات لمجموعة r2 (r201 إلى r211)
for i = 201:211
    dataset_list{end+1} = sprintf('r%d', i);
    dataInfo_files_list{end+1} = sprintf('r%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('r%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('r%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('r%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('r%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('r%dinitialResults.csv', i);
end

% توليد أسماء الملفات لمجموعة rc2 (rc201 إلى rc208)
for i = 201:208
    dataset_list{end+1} = sprintf('rc%d', i);
    dataInfo_files_list{end+1} = sprintf('rc%ddataInfo.csv', i);
    customers_files_list{end+1} = sprintf('rc%dcustomers.csv', i);
    distanceMatrix_files_list{end+1} = sprintf('rc%ddistanceMatrix.csv', i);
    initialPop_files_list{end+1} = sprintf('rc%dinitialPop.mat', i);
    initialDistance_files_list{end+1} = sprintf('rc%dinitialDistance.mat', i);
    initialResults_files_list{end+1} = sprintf('rc%dinitialResults.csv', i);
end

%% المتغيرات التجريبية
num_experiments = 30;
num_cores = feature('numCores'); % عدد الأنوية المتاحة

% المتغيرات العالمية
N = 300; % حجم السكان
greedy_percent = 0.10; % نسبة التوليد الغريدي
random_percent = 0.90; % نسبة التوليد العشوائي
alpha = 100;
beta = 0.001;

%% معالجة كل مجموعة بيانات
for i = 1:length(dataset_list)
    dataSet = dataset_list{i};
    
    % قراءة ملفات البيانات
    customer_file = fullfile(customer_path, customers_files_list{i});
    dataInfo_file = fullfile(dataInfo_path, dataInfo_files_list{i});
    distanceMatrix_file = fullfile(distanceMatrix_path, distanceMatrix_files_list{i});
    
    % قراءة البيانات من ملفات CSV
    df_customers = readtable(customer_file);
    df_distance_matrix = readtable(distanceMatrix_file);
    df_dataInfo = readtable(dataInfo_file);
    
    num_customers = height(df_customers);
    num_customers_depot = num_customers + 1;
    
    % حساب عدد الكروموسومات العشوائية والغريدية
    number_random_chromosomes = floor(N * random_percent) - 1;
    number_greedy_chromosomes = N - number_random_chromosomes - 1;
    number_nearest_nn_chromosomes = 1;
    
    % تحويل البيانات إلى مصفوفات
    arr_distance_matrix = table2array(df_distance_matrix);
    dataset_radius = (max(arr_distance_matrix, [], 'all') - min(arr_distance_matrix, [], 'all')) / 2;
    
    arr_customers = zeros(num_customers, 6);
    arr_customers(:,1) = (1:num_customers)';
    arr_customers(:,2) = df_customers.demand;
    arr_customers(:,3) = df_customers.serviceTime;
    arr_customers(:,4) = df_customers.readyTime;
    arr_customers(:,5) = df_customers.dueTime;
    arr_customers(:,6) = df_customers.completeTime;
    
    % تفاصيل أسطول المركبات
    total_time = df_dataInfo.fleet_max_working_time(1);
    total_capacity = df_dataInfo.fleet_capacity(1);
    
    all_customers_list = 1:num_customers;
    
    %% لكل تجربة
    for experiment = 1:num_experiments
        % تحديد مسارات الملفات للنتائج
        initial_pop_output_file = fullfile(initial_path, dataSet, sprintf('experiment%d', experiment), initialPop_files_list{i});
        initial_pop_distance_output_file = fullfile(initial_path, dataSet, sprintf('experiment%d', experiment), initialDistance_files_list{i});
        initial_result_output_file = fullfile(initial_path, dataSet, sprintf('experiment%d', experiment), initialResults_files_list{i});
        
        % توليد نصف قطر عشوائي
        radius = dataset_radius * (0.5 + 0.5 * rand); % توليد نسبة بين 0.5 و1
        
        % توليد السكان الابتدائية
        [pop_chromosome_routeList_array, pop_chromosome_distanceList_array, pop_num_routes, pop_total_distance] = initial_population(N, num_cores, number_random_chromosomes, number_greedy_chromosomes, number_nearest_nn_chromosomes, num_customers, arr_customers, arr_distance_matrix, total_capacity, total_time, all_customers_list, radius);
        
        % تحسين السكان عبر مرحلة 2
        [pop_chromosome_routeList_array, pop_chromosome_distanceList_array, arr_pop_results] = initial_routing_phase2(num_cores, N, alpha, beta, pop_chromosome_routeList_array, pop_chromosome_distanceList_array, arr_distance_matrix, arr_customers, total_time, total_capacity);
        
        % حفظ النتائج
        save(initial_pop_output_file, 'pop_chromosome_routeList_array');
        save(initial_pop_distance_output_file, 'pop_chromosome_distanceList_array');
        
        % إنشاء مصفوفة النتائج
        df_initial_results = array2table(zeros(N, 3), 'VariableNames', {'num_vehicles', 'distance', 'fitness'});
        df_initial_results.num_vehicles = pop_num_routes';
        df_initial_results.distance = pop_total_distance';
        df_initial_results.fitness = (alpha * pop_num_routes') + (beta * pop_total_distance');
        
        % كتابة النتائج إلى ملف CSV
        writetable(df_initial_results, initial_result_output_file);
        
        fprintf('Experiment: %d\n', experiment);
    end
    
    fprintf('Dataset: %s\n', dataSet);
end