Parallel PSO Using MapReduce(基于MapReduce计算框架的粒子群算法)

这一篇文章承接上一篇我用c++多线程实现的PSO算法。
基于c++多线程的并行粒子群优化算法
粒子群是什么这里就不在讨论了。主要聊聊MR程序。
思路也借鉴上面的多线程实现。
map程序:
1.读取粒子信息并创建粒子;
2.更新粒子速度和位置;
3.将粒子传递给Reduce程序;
Reduce程序:
1.接受粒子,评价粒子状态信息;
2.根据评价函数更新全局最优解;
3.结果输出;
每个job相当于多线程中的一次循环。写这次程序之前,小编还借鉴了一篇发表在IEEE上的国外大牛的文章(就连博客的题目都是借鉴人家的)。
里面除了提到了MR程序设计和应用神经网络之外,还提供了一种思想:每个粒子不是独立存在的,除了全局最优解的交互之外,还有与自身相关粒子的的交互,读者有机会可以实现一下,下次再遇到PSO并行设计我也会试试实现那个思路。
除了map和Reduce之外,其他的一些辅助类几乎和上一篇文章一样,这里不再赘述(刚刚写完上一篇,不想再写一遍了,偷个懒大家别介意啊)
写MR程序,首先我们就要考虑map和reduce的输入输出。
Mapper:输入key偏移量->LongWritable,每行数据value->Text
输出key粒子个体最优值->DoubeWritable,value->实现了Writable接口的粒子类
Reducer:输入对应mapper的输出,输出key->粒子信息Text,value为空就可以。

MyMapper类:

public class MyMapper extends Mapper<LongWritable, Text, DoubleWritable,Particle> {
   
    private Better better=new Better(Resource.isMax());
    private int dim=Resource.getDim();
    private Ifunction fun=new MyFunction();
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, DoubleWritable,Particle>.Context context)
            throws IOException, InterruptedException {
        String[] msgs=value.toString().split("%%");
    
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值