整体逻辑结构
- 整个算法代码共两个部分,Object singleGA和Class singleGA
- Object singleGA中定义了一些参数和run方法
- Class singleGA首先实现了序列化(还不知道用来干嘛),然后定义了一堆参数、设置输入输出路径的方法、run方法和一堆方法如下
- countSameTimes:用来计算是否连续30次迭代BN结构评分没有提高
- endOfTheExp:输出实验结果和关闭函数
- initPopulationAllWithRemoveCycle:初始化种群并去环+限制父节点数量
- tournamentSelection:锦标赛选择
- tournamentSelectionAndUniformCrossover
- singlePointMutation:单点突变
- getEdgeDirectType
- setEdgeDirectType
- singlePointMutationOuter
- uniformCrossover
- uniformCrossoverOuter
- scoreOuter:对种群集合中的每个BN结构进行评分
- getEliteIndividual:得到当前种群中分数最高的个体
- replaceLowestWithElite
run方法代码逻辑
- 首先开始计时(全部时间)
- 定义Redis和Redis pipeline
- 启动sparkcontext
- 读取输入数据
- 计算BIC评分
- 计算cardinality并广播
- 构建初始种群矩阵并去环 initPopulationAllWithRemoveCycle
- 将种群矩阵转换成BN结构集合 virtualBNArrayConstructor
- 对BN结构集合进行评分 scoreOuter
- 计算当前种群中分数最高的BN结构
- 输出初始BN结构构造信息
- 开始迭代:
- 锦标赛选择
- 均匀交叉
- 单点突变
- 评分
- 计算当前种群中分数最高的BN结构
- 把当前种群中分数最低的BN结构用最高的BN结构替换
- 判断BN结构的评分是否已经连续30次毫无变化
- 打印这一代的信息,若未满足终止条件则开启下一轮迭代
- 输出评分最高的BN结构作为结果,输出实验信息,关闭功能函数
�
�
