Matlab程序优化:任务分配与执行时间分析

本文分析了一段Matlab程序,该程序旨在计算不同任务数量下,任务分配策略对执行时间的影响。程序通过生成随机任务大小,并根据任务大小进行排序,模拟了任务分配的过程。

原始代码:

f0=1000000000;
f1=5000000000;
C=2000000;
z=0;
Q=[5 10 15 20 25];%任务数作为自变量,确定随机数的生成个数
for s=1:5
nums=randi([10000 50000],1,Q(s));%随机数的生成,任务输入大小dn
sorted_nums=sort(nums);%从小到大排序
  for i=1:Q(s)
      T0=0;
      T1=0;
    for m=1:i
        c(m)=1000*sorted_nums(m);
        T0=T0+c(m)/f0;
    end 
    for n=i+1:Q(s)
        c(n)=1000*sorted_nums(n);
        d(n)=sorted_nums(n);
        T1=T1+d(n)/C+c(n)/f1;
    end 
    if T0>=T1 
        k=i;
        break;
    end 
  end
end
plot(Q,max(T0,T1)); 

问题分析:

  1. 变量初始化: 在循环中,变量 T0T1 每次迭代都需要重新初始化,否则会造成结果累加错误。同理,变量 cd 也需要在循环外进行初始化,避免数组越界。

  2. 语法错误: plot(Q,max(T0,T1)) 语法错误,max() 函数应该接受一个数组作为参数,可以使用 max([T0,T1])

  3. 逻辑问题: 变量 k 赋值后没有被使用,代码逻辑可能存在问题。

  4. 累加操作: 循环中缺少对不同任务数量下 T0T1 的累加操作,导致最终结果无法反映真实情况。

优化建议:

  1. 在循环外初始化变量 T0T1cd

  2. plot(Q,max(T0,T1)) 修改为 plot(Q,max([T0,T1]))

  3. 检查变量 k 的使用逻辑,确认是否需要保留或修改。

  4. 在循环中添加对 T0T1 的累加操作,记录每个任务数量下的执行时间。

优化后的代码:

f0=1e9;
f1=5e9;
C=2e6;
Q=[5 10 15 20 25];
T_record = zeros(size(Q)); % 初始化执行时间记录数组

for s = 1:length(Q)
  nums = randi([1e4 5e4], 1, Q(s));
  sorted_nums = sort(nums);
  T0 = 0; 
  T1 = 0;
  c = zeros(1, Q(s)); % 初始化 c 数组
  d = zeros(1, Q(s)); % 初始化 d 数组

  for i = 1:Q(s)
    c(1:i) = 1000 * sorted_nums(1:i);
    T0 = sum(c(1:i) / f0); % 使用sum函数计算总和

    d(i+1:end) = sorted_nums(i+1:end);
    c(i+1:end) = 1000 * sorted_nums(i+1:end);
    T1 = sum(d(i+1:end) / C) + sum(c(i+1:end) / f1); % 使用sum函数计算总和

    if T0 >= T1
      break; 
    end
  end
  
  T_record(s) = max([T0, T1]); % 记录每个任务数量下的最大执行时间
end

plot(Q, T_record); % 绘制任务数量与执行时间的关系图
xlabel('任务数量');
ylabel('执行时间');
title('任务数量与执行时间的关系');

总结:

通过以上优化,程序解决了原始代码中的语法错误、逻辑问题和效率问题,提高了代码的可读性和可维护性,并能更准确地模拟任务分配与执行时间的关系。

Matlab程序优化:任务分配与执行时间分析

原文地址: https://www.cveoy.top/t/topic/jkul 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录