基于人工免疫克隆选择算法的网络节点分组调度系统
项目简介
本项目实现了一个基于人工免疫克隆选择算法(AICSA)的网络节点分组调度与负载均衡系统。该系统利用生物免疫系统中的克隆选择、亲和度成熟和高频变异机制,解决大规模无线网络环境下的节点分组优化问题。
系统将网络中的节点调度问题转化为多目标优化问题,旨在同时满足负载均衡(各组负载差异最小化)和网络拓扑紧凑度(节点距离组中心最近)两个核心指标。通过MATLAB进行仿真,系统能够动态展示算法的收敛过程、网络拓扑变化以及各组的负载分布情况。
主要功能特性
- 网络环境建模
* 在二维平面区域内随机生成指定数量的网络节点。
* 为每个节点随机分配任务负载,模拟真实网络环境中的异构性。
* 支持自定义节点数量、区域大小、通信半径及负载范围。
- 免疫克隆选择算法实现
*
抗体编码:采用整数编码机制,抗体的每一位对应一个网络节点,其数值代表该节点所属的分组ID。
*
亲和度评价:构建了综合评价函数,融合了“负载均衡度”(组间负载标准差)和“空间距离代价”(节点到组中心的距离之和),以此作为抗体与抗原的亲和度指标。
*
克隆增殖:基于亲和度排序,对优秀个体进行动态比例克隆,亲和度越高的个体产生的克隆副本越多。
*
高频变异:对克隆产生的副本进行随机扰动(随机改变部分节点的归属组),以扩展搜索空间并避免局部最优。
*
克隆抑制与选择:将变异后的子代与父代混合,择优保留,维持种群规模并确保全局最优解不丢失。
- 智能调度策略生成
* 算法结束后,根据最优分组方案生成具体的调度表。
* 采用
组内优先策略:在确定分组后,各组内部根据节点负载大小降序排列,优先调度高负载节点。
- 动态可视化仿真
*
拓扑视图:实时绘制节点位置、分组归属(不同颜色)、组中心位置及连接关系,节点大小随负载量变化。
*
收敛曲线:动态更新亲和度进化曲线,监控算法收敛速度。
*
负载分析柱状图:实时显示各分组的总负载情况,直观反映负载均衡效果。
算法实现细节与逻辑分析
本项目核心逻辑完全在 main.m 中实现,具体流程分析如下:
1. 初始化阶段
程序首先通过
InitNetwork 函数构建网络环境,生成节点的坐标
(x, y) 和负载值。随后初始化抗体种群,每个抗体是一个长度为
NodeNum 的向量,向量中的每个元素随机取值为
1 到
GroupNum 之间,代表随机分组初始态。
2. 亲和度计算 (Evaluation)
核心评价机制由
EvaluateOne 函数实现。系统的优化目标为最大化亲和度,亲和度计算公式如下:
- 负载代价 (LoadCost):计算所有分组总负载的标准差。标准差越小,说明各组负载越均衡。
- 距离代价 (DistCost):计算每个组内节点到该组几何中心的欧几里得距离之和。由参数
Alpha 和节点数量进行加权归一化。 - 总亲和度 (Affinity):$Affinity = 1 / (beta times LoadCost + alpha times (DistCost / NodeNum) + epsilon)$。
3. 免疫操作循环
主循环模拟了免疫系统的进化过程:
- 克隆 (Cloning):对种群按亲和度降序排列,选取出前50%的优势个体。排名越靠前,克隆的副本数量越多(由
CloneRate 控制)。 - 变异 (Hypermutation):遍历所有克隆副本,以
MutProbBase 的概率触发变异。变异操作是随机选取若干个节点,将其重新分配到随机的其他组中。这模拟了抗体的高频变异以寻找更优的抗原结合位点。 - 选择 (Selection):将变异后的克隆子代与原始父代合并,重新计算亲和度并排序,仅保留前
PopSize 个最优个体进入下一代。
4. 结果输出与调度
迭代结束后,提取最优抗体。
GenerateSchedule 函数负责将最终的分组方案转化为可执行的调度表。它遍历每个组,获取组内所有成员,并按照
负载从大到小的顺序进行排序,生成包含
[节点ID, 组ID, 负载, 组内次序] 的表格数据。
使用方法
- 环境要求:
* MATLAB R2016a 或更高版本。
* 无需额外工具箱,使用基础图形库和计算函数。
- 运行步骤:
* 直接运行
main 函数。
* 程序将自动清除工作区,初始化参数,并弹出一个名为“基于人工免疫克隆选择算法的网络调度系统”的图形窗口。
* 仿真过程中,窗口会每隔5代刷新一次,展示当前的优化状态。
* 运行结束后,MATLAB 控制台将输出最终的统计指标(迭代次数、最优亲和度、负载均衡标准差等),并打印部分节点的调度次序表。
关键函数说明
- InitNetwork: 生成网络拓扑结构,包括节点坐标和随机负载。
- EvaluateAffinity / EvaluateOne: 计算种群或单体的亲和度,包含负载均衡和空间紧凑度两个维度的加权计算。如果产生空组(某个组没有节点),会给予额外的惩罚值以引导算法避免空组。
- GenerateSchedule: 负责后处理,将分组基因解码为具体的节点调度顺序列表。
- DrawStatus: 通用的绘图函数,负责将当前最优解的数据渲染到三个子图中(拓扑图、收敛图、负载柱状图)。
- GetGroupLoads: 辅助函数,用于快速提取当前分组方案中各组的累积负载值。