整体逻辑结构

  • 整个算法代码共两个部分,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方法代码逻辑

  1. 首先开始计时(全部时间)
  2. 定义Redis和Redis pipeline
  3. 启动sparkcontext
  4. 读取输入数据
  5. 计算BIC评分
  6. 计算cardinality并广播
  7. 构建初始种群矩阵并去环 initPopulationAllWithRemoveCycle
  8. 将种群矩阵转换成BN结构集合 virtualBNArrayConstructor
  9. 对BN结构集合进行评分 scoreOuter
  10. 计算当前种群中分数最高的BN结构
  11. 输出初始BN结构构造信息
  12. 开始迭代:
    1. 锦标赛选择
    2. 均匀交叉
    3. 单点突变
    4. 评分
    5. 计算当前种群中分数最高的BN结构
    6. 把当前种群中分数最低的BN结构用最高的BN结构替换
    7. 判断BN结构的评分是否已经连续30次毫无变化
    8. 打印这一代的信息,若未满足终止条件则开启下一轮迭代
  13. 输出评分最高的BN结构作为结果,输出实验信息,关闭功能函数