💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
摘要
分布式系统,如网格计算和云计算向全球用户提供 Web 服务。服务提供者最关心的问题之一是如何处理总拥有成本(TCO)。TCO 的大部分与由于资源管理不当导致的能耗有关。任务调度模块作为一个关键组件,对用户响应时间和底层资源利用率都有巨大影响。这种异构分布式系统通过不同速度和架构的不同处理器互连。此外,用户应用通常以有向无环图(DAG)的形式呈现,必须在这种类型的并行处理系统上执行。由于在这种复杂系统中的任务调度属于 NP 难题,现有的启发式方法已不再有效。因此,趋势是应用混合元启发式方法。在本文中,我们扩展了一种基于遗传的元启发式算法,用于最小化用户应用的总执行时间(makespan)的任务调度算法。在这方面,我们利用其他启发式方法,比如异构最早完成时间(HEFT)方法,通过应用一种新的打乱操作符生成智能初始种群,以探索搜索空间中的可行和有前途的个体。我们也正确地进行其他遗传操作符,以生成最终接近最优解的解决方案。为了得出具体结果,我们进行了几个场景的实验。我们提出的算法在平均 makespan 方面优于其他现有方法,如 HEFT 版本和 QGARAR。
关键词:任务调度,云计算,有向无环图(DAG)
编辑
编辑
文献中已经有许多工作致力于提出分布式系统中任务调度问题的清晰解决方案。一种基于 PSO 的任务调度算法已被提出,用于有效处理科学程序在用户定义的截止期限内对云资源的利用 [7]。这个适应函数是基于执行时间和成本定义在适应函数中的减少 [7]。虽然这种提出的算法很有前景,但它专门设计用于只具有计算密集型的科学问题。另一个基于蚁群优化(ACO)的任务调度算法被用于最小化在云环境中提交的任务的 makespan [8]。这种提出的算法在云计算中运行高效,因为它根据请求的任务启动适当的虚拟机。然而,该算法仅限于独立任务。一种经济实惠的低成本任务调度算法基于两种策略运行;第一种策略基于帕累托支配为任务分配最佳虚拟机。第二种策略通过将下一个阶段中不重要的任务映射来减少总成本[9]。文章中调度算法的主要焦点是经济观点,这可能会牺牲用户响应时间。基于模糊 TOPSIS 的多标准任务调度方法已在第 30 届 IEEE 加拿大电气和计算机工程会议(CCECE)中展示[12]。在这项工作中,作者应用模糊 TOPSIS 方法基于用户和提供者的偏好来排名备选方案。其最初设计用于具有时间限制和独立的实时应用程序。另一个基于启发式的细菌觅食算法已被提出,用于在云计算环境中独立任务调度[14]。尽管效率高,但不适用于具有依赖任务的程序。一种带旋转角度细化的量子遗传算法已被提出在文献中用于对云数据中心等分布式系统的依赖任务进行调度[15]。该提出的算法基本上是一种很好的量子计算方法。它还依赖于随机生成的种群进行初始阶段,以使更多的迭代轮次达到满意的标准。文献综述揭示了混合元启发式方法是有利的,可以从其他方法中获益以达到良好的优化结果,并利用搜索空间中的探索和开发。
一、研究背景与意义
异构分布式系统(如云计算、边缘计算)通过整合不同架构的计算资源(CPU、GPU、FPGA等),为科学计算、人工智能等领域提供强大的并行处理能力。然而,其资源异构性、任务依赖性(如DAG模型)及动态环境(网络波动、资源故障)导致任务调度成为NP难问题。传统启发式算法(如HEFT)在复杂场景下易陷入局部最优,无法有效平衡负载与能耗。因此,研究基于遗传算法的混合元启发式调度算法,对提升系统性能、降低总拥有成本(TCO)具有重要理论与应用价值。
二、算法核心设计
- 无序编码机制
- 编码方式:染色体采用二维结构,一维表示任务序列(如
[T1→T3→T2]),另一维表示处理器分配(如[P2→P1→P4])。基因值代表任务分配的计算资源,位置不固定执行顺序,而是结合DAG依赖关系动态确定。 - 优势:突破传统有序编码的顺序限制,允许任务并行执行,扩展搜索空间,提升全局最优解搜索效率。
- 混合初始化策略
- 初始种群生成:结合HEFT算法生成智能初始解,利用HEFT的异构资源感知能力,快速定位高潜力个体,减少随机初始化的盲目性。
- 洗牌算子:在迭代过程中随机重组任务优先级,避免算法过早收敛至局部最优。
- 动态遗传算子设计
- 无序交叉:以DAG子图块为单位交换基因段,保留任务依赖关系的同时引入多样性。
- 通信感知变异:优先将高通信代价的相邻任务分配至同一处理器簇,减少跨节点数据传输,降低能耗。
- 自适应变异率:根据种群多样性动态调整变异概率,维持探索与开发的平衡。
- 多目标适应度函数
- 核心指标:
- Makespan(最大完成时间):所有任务完成时间的最小化。
- 负载均衡度:处理器利用率标准差,避免资源过载或闲置。
- 能耗成本:任务执行与数据传输的能源消耗总和。
- 权重分配:根据场景需求动态调整指标权重(如实时性场景优先Makespan,成本敏感场景侧重能耗)。
三、算法优化策略
- 负载感知选择
- 在适应度计算中引入处理器利用率权重,迫使算法均衡负载。例如,适应度函数可设计为:
编辑
其中, 为负载均衡权重系数, 为处理器负载方差。 |
2. 实时性约束处理
- 对截止时间紧迫的任务施加惩罚函数,动态调整调度优先级。例如,若任务Ti的截止时间为Di,当前完成时间为Ci,则惩罚项可定义为:
编辑
其中, 为惩罚系数,确保算法优先满足实时性需求。 |
3. 精英保留与非支配排序
- 结合NSGA-Ⅱ的多目标优化框架,保留帕累托前沿解,平衡收敛性与多样性,避免单一目标优化导致的性能损失。
四、实验与性能分析
- 实验设置
- 测试用例:合成DAG(随机生成任务图)与真实工作流(如Montage天文数据处理)。
- 对比算法:传统遗传算法(GA)、HEFT、粒子群优化(PSO)。
- 性能指标:Makespan、能耗、负载均衡度、收敛速度。
- 结果分析
- 收敛效率:无序遗传算法通过智能初始种群减少约30%的收敛代数,相比传统GA更快逼近最优解。
- 能耗优化:通信感知变异策略使跨节点数据传输减少21%,能耗下降显著。
- 鲁棒性:在处理器动态加入/退出场景下,Makespan波动小于10%,表现优于对比算法。
- 多目标权衡:在Montage工作流测试中,算法在Makespan(降低15%)与负载均衡度(提升12%)间实现有效平衡。
五、未来研究方向
- 深度强化学习融合:利用DQN优化遗传算子的超参数(如交叉率、变异率),提升自适应能力。
- 边缘计算场景适配:针对5G边缘节点的低延迟需求,设计轻量级变异策略,减少计算开销。
- 量子计算加速:探索量子比特编码与量子门操作对种群演化的加速潜力,应对超大规模任务调度挑战。
六、结论
基于无序遗传的异构分布式系统任务调度算法,通过动态种群管理、通信感知优化及多目标权衡,显著提升了资源利用率与实时性。实验表明,其在Makespan与能耗上优于传统方法,为复杂场景下的任务调度提供了高效解决方案。未来可进一步结合新型计算范式,以应对更复杂的动态环境需求。
📚2 运行结果
编辑
编辑
部分代码:
%%
global nVM nTask DAG extP0 extP1 extP2 c
nVM=3; % Number of Hetergenous Virtual Machines
c=ones(nVM)-eye(nVM); % communication time between servers
nTask=11; % Number of Tasks
DAG=[0 12 14 0 0 0 0 0 0 0 0 % Directed Acyclic Graph
0 0 0 8 15 11 0 0 0 0 0
0 0 0 0 0 0 13 0 0 0 0
0 0 0 0 0 0 0 11 0 0 0
0 0 0 0 0 0 0 8 0 0 0
0 0 0 0 0 0 0 0 7 12 0
0 0 0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 0 0 0 7
0 0 0 0 0 0 0 0 0 0 10
0 0 0 0 0 0 0 0 0 0 0];
extP0=[7 10 5 6 10 11 12 10 8 15 8]; %Execution Time on Processor1
extP1=[9 9 7 8 8 13 15 13 9 11 9];
extP2=[8 14 6 7 6 15 18 7 10 13 10];
Wbar=[8 11 6 7 8 13 15 10 9 13 9]; % Average Computation Cost
npop=20; % population size
maxIter= 100; % maximum number of generation
%% The first generation:
population=INITp(npop);
%% Genetic optimization:
for iter=1:maxIter
for i=1:npop
cost(i)=MAPPER(population{i});
fitness(i)=1/cost(i);
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为