在协作学习P2P网络中,各个节点的贡献值根据节点的具体情况而发生变化,因此所获得的资源服务质量也随之发生变化。基于贡献值的资源分配原则是“多劳多得”“多劳先得”。对于资源请求者而言,贡献值大,及时得到满足的概率就高,从而促使其做更多贡献;对于资源提供者而言,为了尽可能增大自己的贡献值,在做资源分配时,应把资源优先分配给贡献值大的节点,同时根据资源的受欢迎度排序,越受欢迎的资源排在最前面,节省检索时间,提高查询效率。基于贡献值的资源分配算法描述如下:
输入:学习资源请求信息;
输出:学习资源。
(1) 节点侦听资源请求信息。
(2) 当有资源请求时,查询请求节点的贡献值。
(3) 如果请求节点的贡献值过低,将拒绝下载服务,跳转到(1)步,否则转到(4)步。
(4) 如果只有一个主机请求学习资源,则转(5)步,否则转(6)步。
(5) 将所请求的资源提供给请求节点,然后跳转到(6)步。
(6) 贡献值大的节点优先获得该资源,贡献值小的节点后获得资源甚至无法获得该资源。
(7) 计算资源被下载的次数,即受欢迎度,然后根据资源的受欢迎度刷新资源的排序。
(8) 增加本节点的贡献值,跳转到(1)步。
基于贡献值的资源分配算法RAAC(Resources Allocate Algorithm base on Contribution)的伪代码如下:
(1) initializes(www.daowen.com)
(2) Listen Res Req(recource Name); //节点侦听资源请求信息
(3) C[i]=get Cont(nodeid); //当有资源请求时,查询请求节点i的贡献值
(4) if(is Toolow(Cont[i]<θ)) //判断请求节点的贡献值是否过低
then refuse Service(); //如果请求节点的贡献值过低,拒绝下载服务
(5) else if Res Req Node Id=1; //如果只有一个主机请求学习资源
then allocate Resource(file Name,nodeid); //分配最优资源
(6) else allocate Resource(file Name,Max(C[i]).nodeid); //贡献值大的节点优先获得该资源
(7) Count Resource[j]=Count Res(Resource[j]); //计算资源被下载的次数,即受欢迎度
(8) sortlist(list,Count Resource[j]);
refresh(){}; //根据资源的受欢迎度刷新资源的排序
(9) C[k]=Addcont(); //增加本节点的贡献值
(10)return; //返回,继续侦听资源请求节点
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。