一种基于图形处理单元的影响最大化并行加速方法

文档序号:6373455阅读:325来源:国知局
专利名称:一种基于图形处理单元的影响最大化并行加速方法
技术领域
本发明涉及海量数据挖掘领域中社会网络影响最大化问题的解决方法,尤其指针对大規模社会网络的海量用户挖掘,提出的一种基于图形处理单元GPU的并行加速方法。
背景技术
Web2. O技术的快速发展推动了社会媒体的蓬勃发展。各类社交网站不断涌现,例如国外的Facebook、Twitter以及国内的人人网、新浪微博等网站用户数量增长十分迅速,当前Facebook的活跃用户已经超过了 8. 5亿。社交网站不仅是人们沟通和交流的桥梁,同时还成了信息传播和扩散的重要媒介。研究表明,68%的顾客会在购买产品之前询问其家人、朋友的意见。病毒式营销(Viral Marketing)正是利用了用户之间口碑传播的原理,进 行品牌推广等网络传销方法。而且随着社会网络用户的持续快速增长,病毒式营销已经成为ー种十分高效的信息传播方式。影响最大化问题是社会网络分析中关于影响传播的经典问题。设想如下场景一家公司要进行新产品推广,其推广策略是选择K名顾客免费试用新产品,之后利用这K名顾客对产品的宣传推广和影响传播吸引更多的顾客购买新产品,从而达到利益最优的目的。影响最大化问题可以形式化描述为对于社会网络图G = (V,E,W),其中V = {v0,V1, , vn_J是节点集合,V中节点个数为η ;Ε是节点集合V中节点之间的有向边集合,即E czV xV,^中有向边的条数为m ;评是G中节点权重的集合,表征了各节点的影响カ(初始值设定为1,即仅能影响节点自身)。给定网络图G和初始活跃节点集合中的节点个数K,影响最大化问题是从节点集合V中选择最佳的K个节点作为初始活跃节点集合S,通过影响传递,使得影响扩散的最終范围最大。影响最大化问题的核心在于如何定位网络中最有影响カ的K名成员,即网络中的意见领袖,从而通过病毒式营销使得最終被影响的用户数目最大。影响最大化问题的研究不仅对市场营销有着十分重要的现实意义,同时还对舆情预警、疫情发现等方面有着十分重要的应用。自从Pedro Domingos和Matt Richardson于 2001 年 ACM SIGKDD 会议公布的文章 Mining the network value ofcustomers 中提出影响最大化问题后,该问题受到了越来越多研究者的关注。David Kempe等人在2003年ACMSIGKDD 会议公布的文章 Maximizing tte Spread of Influence through a SocialNetwork中证明了影响最大化问题隶属于NP-Hard问题,并且提出了ー种爬山贪心算法来获得近似最优解。虽然爬山贪心算法可以达到1-1 / e的最优逼近(e是自然対数底),但是由于David Kempe采用多次的蒙特卡洛模拟(例如20000次)来计算各个节点的影响值,因此需要消耗大量时间,而且无法扩展应用到大規模的网络中。很多研究人员都致力于设计新的方法来解决影响最大化的效率问题。爬山贪心算法中的核心问题在于需要多次蒙特卡洛模拟以计算所有节点的影响值。为了解决该问题,Jure Leskovec 等人在 ACM SIGKDD2007 中公布的文章 Cost-effective OutbreakDetection in Networks中根据影响扩散函数的半模特性设计了新的优化方法CELF,可以很大程度地降低蒙特卡洛模拟的计算量,从而減少了计算时间。之后,Wei Chen等人在ACMSIGKDD2009 中公布文章 Efficient Influence Maximization in Social Networks,文章中提出了目前最优的贪心算法MixGreedy。该算法的改进在于在每次蒙特卡洛模拟时为网络中所有节点计算影响值,因而进ー步降低了算法的复杂度。同时MixGreedy整合了 CELF算法,大大降低了算法执行时间。然而由于影响最大化计算复杂度很高,即使目前最优的MixGreedy算法在处理大规模社会网络时仍然十分耗时;例如从37154个社会网络节点中选择50个最有影响用户就需要2个小时以上。因此,如何从大規模社会网络海量用户中快速挖掘最有影响用户成为了亟待解决的问题。另一方面,图形处理单元(Graphics Processing Unit, GPU)的多核多线程高带宽的体系结构使得GPU具有超强的并行计算能力,被广泛应用于通用计算中。许多图论算法,例如宽度优先捜索、最小生成树等,都可以利用GPU的并行能力加速执行。如何充分利用GPU的并行计算能力,挖掘影响最大化问题的并发执行潜力,设计出基于GPU体系结构的影响最大化并行加速方法是解决大規模社会网络中影响最大化问题的可行方案。
综上所述,影响最大化问题的效率问题是社会网络分析中广泛关注的问题,目前的计算方法无法在合理的时间内准确定位出最有影响カ用户,并且具有很差的可扩展性,无法适用于大規模社会网络。因此,研究高效并且具有良好扩展性的影响最大化解决方法是本领域技术人员极为关注的技术问题。现有的影响最大化问题研究中没有公开文献涉及利用GPU的并行计算能力来减少运行时间的方法。

发明内容
本发明要解决的技术问题是针对社会网络中的影响最大化问题,提出ー种新型基于GPU的影响最大化并行方法,充分挖掘贪心算法中的可并行部分并利用GPU的并行计算能力,以达到加速算法执行、减少执行时间的目的。为了解决上述技术问题,本发明技术方案是在毎次蒙特卡洛模拟中,首先找到网络图中的强连通分量,由于同一个强连通分量中各个节点的影响值相同,故将同一强连通分量中的所有节点合并为ー个节点,其权重为该强连通分量中各节点权重之和;然后采用自底向上遍历的策略,并行计算各节点的影响值。利用GPU的并行计算能力,由各个GPU计算核心采用各自的线程对不同的节点并行计算影响值。通过最大程度地调度各节点在GPU的计算核心中并行计算,降低整体运行时间。具体的技术方案是第一歩初始化影响最大化节点集合S为空。第二步设定当前蒙特卡洛模拟次数Num = O。第三步米用Wei Chen 等人在ACM SIGKDD2009 公布的文章Efficient InfluenceMaximization in Social Networks中的蒙特卡洛模拟方法对图进行选边,得到图G'。弟四步寻■找图G'中的强连通分量。在有向图中,如果两个节点Ve和Vf间既存在一条从Ve到Vf的有向路径,同时又存在一条Ivf到Ve的有向路径,则称Ve和Vf强连通。如果有向图中每两个节点都强连通,则该图是ー个强连通图。采用Robert Tarian等于1972年 SIAM Journal on Computing 杂志公布的又-早 Depth-first search and linear graphalgorithm中提出的Tar jan算法,基于深度优先搜索寻■找图G'中所有的强连通分量SCCi,i取值从O到j-1,j为图G'中的强连通分量的个数。
第五歩根据图G'的各强连通分量SCCi,将图G'转变为有向无环图G%方法是5. I:初始化 i = O。5. 2 :将强连通分量SCCi用新节点vn+i代替,其中η是图G'中的节点个数。具体方法是5. 2. I :对于强连通分量SCCi,新增节点vn+i。节点vn+i的入边集合置为SCCi中所有节点入边集合的并集,出边集合为SCCi中所有节点出边集合的并集,权重为该强连通分量中各节点权重之和。5. 2. 2 :将强连通分量SCCi中所有节点的入边集合和出边集合置空,权重置零。方法是 5. 2. 2. I :初始化整数变量I为O。5. 2. 2. 2 :对于强连通分量SCCi中节点V1,将节点V1的入边集合和出边集合置为空集0,权重置为O。5. 2. 2. 3 :1 = 1+1。如果Kni,其中Iii是强连通分量SCCi的节点个数,则转5. 2. 2. 2。如果 I 彡 ni;转 5. 3。5. 3 i = i+lo如果i〈j,转5. 2。如果i彡j,则说明所有强连通分量均已被新节点代替,此时图G转变为了有向无环图G%执行第六歩。第六步从出度为O的节点开始,自底向上遍历有向无环图(T中所有节点,利用GPU计算所有节点的影响值。具体方法是6. I :变量的定义和初始化。方法是6. I. I :使用布尔数组Visited口记录各个节点是否已经被访问过,Visited[vp]等于true表示节点Vp已经被访问,Visited[vp]等于fajse表示节点Vp未被访问,其中O彡P彡η-I。将数组Visited[]全部初始化为false,表示所有节点均未被访问;6. I. 2 :使用整数数组Count []记录各个节点已经被访问的子节点个数,其中
O^ Count [vj く outdegree [vj , O ^ x ^ n_l, outdegree [vj 是节点 vx 的出度。将数组Count []全部初始化为O,表示均未被访问;6. I. 3 :使用整数数组Inf ロ记录各个节点的影响值,其中O彡Inf [vj彡η,
O彡X彡η-1。将数组Inf []全部初始化为O ;6. 1.4 :使用字符串数组Label 口记录各个节点的标签,标签Label [vj标记了节点Vx可能同其他节点发生重叠的位置,其中节点Va及节点Vb重叠于节点V。当且仅当从节点Va和Vb均存在至少一条路径可达节点V。, O彡a, b, c彡n-lo将数组Label []全部初始化为NULL。6. I. 5 :使用布尔变量Stop记录线程计算是否完成,Stop等于true表示该次模拟中所有节点影响值计算已经完成,Stop等于false表示未完成。Stop为全局变量,所有GPU线程均可以修改其内容。初始化Stop为false。6. 2 :如果停止标志Stop为false,说明此次模拟影响值计算仍未完成,贝U转6. 3使用GPU多线程并行计算;如果Stop为true,则说明此次模拟中所有节点的影响值均已计算完毕,转第七歩。6. 3 =GPU采用单指令流多数据流的执行方式,以多线程并行的方式计算节点的影响值;多线程并行的方式是指GPU为每个节点分配一个线程计算影响值,GPU 一次由y个线程并行计算I个节点的影响值,y为GPU中的流处理器数目(因GPU型号不同而流处理器个数不同),当GPU当前y个节点的影响值计算完成后,若还有节点影响值未计算,则GPU经过GPU线程调度以多线程并行的方式计算剩余节点的影响值,直至所有节点的影响值计算完毕,GPU采用单指令流多数据流的执行方式,同一个流处理器单元中的所有流处理器共用同一取指部件,指令按顺序发射,没有分支预测,即不同线程执行同一条指令,但处理不同数据,从而达到并行计算。GPU的一个线程计算节点Vp影响值的方法是6. 3. I :将停止标志Stop置为true。6. 3. 2 :如果Visited[vp]等于false,执行6. 3. 3 ;否则说明节点Vp已经被访问过,转 6. 2。6. 3. 3 :如果Count[vp]等于节点Vp的出度,则说明节点Vp的所有子节点均已被访问,执行6. 3. 4计算节点Vp的影响值;否则说明节点Vp的子节点中仍有未处理的节点,则将停止标志Stop置为false,转6. 2。
6. 3. 4 :计算节点Vp的所有子节点影响值的总和sum, sum = Σν^0Μ[νρ] inf[Vq],
其中out[vp]是节点Vp所有子节点的集合。6. 3. 5 :计算节点Vp的标签Label (Vp)。节点Vp的标签label (Vp)等于节点Vp的所
有子节点对vp贡献的并集,S卩LfAeZ(Vp) = Ut,卜μ| ConOd,其中Con (V,)是子节点'对
节点Vp的贡献。子节点VtJ对节点Vp的贡献是指如果子节点VtJ的入度大于1,则重叠可能发生于Vtl,此时Vtl对节点Vp的贡献为节点Vtl自身,即Con(Vq) = Vq ;如果子节点VtJ的入度小于等于I,重叠不可能发生于Vtl,此时Vtl的贡献为节点Vtl的标签,即Con(Vq) = Label (Vq)。6. 3. 6 :计算节点Vp所有子节点的集合out[vp]重叠的影响值Overlap (out [vp]),方法是6. 3. 6. I :初始化 Overlap (out [vp])为 O,初始化重叠范围集合 Range 为 out[vp]。6. 3. 6. 2 :对于任意节点va e Range,如果存在节点vb e Range且Vb尹va,并且从节点va存在路径可达节点vb,此时重叠发生在节点vb,故Overlap (out [vp])=Overlap (out [vp]+Inf [vb],同时将 vb 从 Range 中删除,即 Range = Range-Vfao6· 3· 6· 3 :使用字符串数组Extra口记录Range中的重叠项,将Extra口初始即Overlap (out [vp]) = Overlap (,out [vp]) + (Overlap (Filter) -Overlap (Extra))。6.3.7 计算节点 vp 的影响值 Inf[vp],Inf[vp] =sum+weight (vp)-over lap (out [ vp]),其中 weight(vp)是节点 vp 的权重。Totallnf[vp]=Totallnf [vp]+Inf [vp],其中TotalInf [vp]是R次蒙特卡洛模拟节点Vp的总影响值。R是总模拟次数,一般设定为20000。6. 3. 8 :如果节点Vp无父节点,则转6. 3. 9 ;否则,对于节点Vp的任意父节点vs,将其已访问子节点个数Count [VJ加I,即Count [VJ = Count[vs]+l,并将停止标志Stop置为 false。6. 3. 9 :将节点Vp标记为已经被访问,即Visited[vp] = true,转6. 2 ;第七步将蒙特卡洛模拟次数Num加I。判断Num是否小于R,如果Num〈R,转第三步,否则执行第八歩。第八步对集合V-S中所有节点,选择TotallnF[]最大的节点V加入到集合S中。
第九歩如果集合S的节点个数|S| < K,转第二步,否则说明已经选定K个最有影响的节点,结束。与现有技术相比,采用本发明能达到以下有益效果I.本发明第四步计算图中的强连通分量,由于强连通分量中所有节点的影响值完全相同,因此在第五步中将各强连通分量替换为单个节点,从而将图转化为有向无环图,可以显著減少影响值的计算量。2.本发明第六步采用了自底向上的遍历方法为各个节点计算影响值。由于父节点的影响值直接依赖于其所有子节点的影响值,因此通过方法可以仅用一次全图遍历即可得到所有节点的影响值,降低了杂度。3.本发明充分挖掘了原贪心算法的并行性和GPU的并行计算能力,尤其是为每ー个节点分配ー个GPU线程进行计算。利用GPU线程之间的并行执行,大幅度減少了程序的执行时间,因而可以对更大規模的社会网络进行处理,具有良好的可扩展性。


图I是最优的贪心算法MixGreedy流程图;图2是本发明总体流程图。
具体实施例方式图I是最优的贪心算法MixGreedy流程图。第一歩初始化节点集合S为空。第二步设定当前蒙特卡洛模拟次数Num = O。第三歩采用蒙特卡洛模拟方法对图进行选边,得到图G'。第四步为各个节点进行宽度优先捜索,计算各节点的影响值。第五步将蒙特卡洛模拟次数Num加I。判断Num是否小于R,如果Num < R,则转第三步,否则执行第六歩。第六步选择集合V-S中TotallnF[]影响值最大的节点V加入到集合S中。第七歩如果集合S的节点个数|S| < K,则转第二步,否则说明已经选定K个最有影响的节点,程序结束退出。图2是本发明总体流程图。第一歩初始化节点集合S为空。第二步设定当前蒙特卡洛模拟次数Num = O。第三歩采用蒙特卡洛模拟方法对图进行选边,得到图G'。第四歩寻找图G'中的强连通分量。第五歩根据各强连通分量将图G'转变为有向无环图(T。第六步从出度为O的节点开始,自底向上遍历有向无环图(T中所有节点,利用GPU不同线程并行计算所有节点的影响值第七步将蒙特卡洛模拟次数Num加I。判断Num是否小于R,如果Num < R,则转第三步,否则执行第八歩。第八步选择集合V-S中TotallnF[]影响值最大的节点V加入到集合S中。
第九歩如果集合S的节点个数Isl < K,则转第二步,否则说明已经选定K个最 有影响的节点,程序结束退出。
权利要求
1.一种基于图形处理单元的影响最大化并行加速方法,包括以下步骤 第一歩初始化影响最大化节点集合S为空; 第二步设定当前蒙特卡洛模拟次数Num=O ; 第三步采用蒙特卡洛模拟方法对图进行选边,得到图G'; 其特征在于还包括以下步骤 第四歩采用Tarian算法,基于深度优先搜索寻找图G'中所有的强连通分量SCCi, i取值从O到j-l,i为图G'中的强连通分量的个数; 第五歩根据图G'的各强连通分量SCCi,将图G'转变为有向无环图G%方法是·5.I :初始化i=0 ; ·5.2 :将强连通分量SCCi用新节点vn+i代替,其中η是图G'中的节点个数; ·5.3 :i=i+l,如果i〈j,转5. 2 ;如果i ( j,执行第六步; 第六步从出度为O的节点开始,自底向上遍历有向无环图G*中所有节点,利用GPU不同线程计算所有节点的影响值,线程号为P的线程负责计算节点Vp的影响值,其中O ^ P ^ n_l,具体方法是 ·6.I :定义和初始化变量,方法是 ·6. I. I :使用布尔数组Visited[]记录各个节点是否已经被访问过,Visited[vp]等于true表示节点Vp已经被访问,Visited[vp]等于false表示节点Vp未被访问,将数组Visited[]全部初始化为false,表示所有节点均未被访问; ·6. 1.2:使用整数数组&)11社[]记录各个节点已经被访问的子节点个数,其中O ^ Count [vj く outdegree[vj ,O ^ x ^ n_l, outdegree[vj 是节点 vx 的出度;将数组Count []全部初始化为O,表示均未被访问; ·6. I. 3:使用整数数组Inf 口记录各个节点的影响值,其中O彡,Inf[vJ ^n,O≤X≤n-1,将数组Inf []全部初始化为O ; ·6. 1.4 :使用字符串数组Label 口记录各个节点的标签,标签Label [vj标记了节点Vx可能同其他节点发生重叠的位置,其中节点Va及节点Vb重叠于节点V。当且仅当从节点Va和Vb均存在至少一条路径可达节点V。,O彡a, b, c彡η-I,将数组Label []全部初始化为NULL ; ·6. I. 5 :使用布尔变量Stop记录线程计算是否完成,Stop等于true表示该次模拟中所有节点影响值计算已经完成,Stop等于false表示未完成,Stop为全局变量,所有GPU线程均可以修改其内容,初始化Stop为false ; ·6. 2 :如果停止标志Stop为false,转6. 3 ;如果Stop为true,转第七步; ·6. 3 =GPU采用单指令流多数据流的执行方式,以多线程并行的方式计算节点的影响值;多线程并行的方式是指=GPU为每个节点分配一个线程计算影响值,GPU 一次由V个线程并行计算y个节点的影响值,y为GPU中的流处理器数目,当GPU当前y个节点的影响值计算完成后,若还有节点影响值未计算,则GPU经过GPU线程调度以多线程并行的方式计算剩余节点的影响值,直至所有节点的影响值计算完毕,GPU的一个线程计算节点Vp影响值的方法是 ·6. 3. I :将停止标志Stop置为true ; ·6. 3. 2 :如果Visited[vp]等于false,执行6. 3. 3 ;否则说明节点Vp已经被访问过,转·6. 2 ; ·6. 3. 3 :如果Count[vp]等于节点vp的出度,则说明节点Vp的所有子节点均己被访问,执行6. 3. 4计算节点Vp的影响值;否则说明节点Vp的子节点中仍有未处理的节点,则将停止标志Stop置为false,转6. 2 ; ·6. 3. 4 :计算节点Vp的所有子节点影响值的总和sum, sum = Evqeout[vp] ^nf[vq],其中out [vp]是节点vp所有子节点的集合; ·6. 3. 5 :计算节点Vp的标签Label (Vp),节点Vp的标签label (Vp)等于节点Vp的所有子节点对vp贡献的并集,叫MeZ(Vp) = Uvqeout[vp]Con(ろ),其中Con(V(i)是子节点 '对节点Vp的贡献,子节点Vtl对节点Vp的贡献是指如果子节点Vtl的入度大于1,则Vtl对节点Vp的贡献为节点VtJ自身,即Con(Vq) = Vq ;如果子节点Vq的入度小于等于I,Vtl的贡献为节点Vq的标签,即 Con(Vq) = Label(Vq);·6. 3.6 :计算节点Vp所有子节点的集合out [vp]重叠的影响值Overlap (out [vp]),方法是 ·6. 3. 6. I :初始化Overlap (out [vp])为O,初始化重叠范围集合Range为out[vp]; ·6. 3. 6. 2 :对于任意节点va e Range,如果存在节点vb e Range且Vb尹va,并且从节点Va存在路径可达节点vb,此时重叠发生在节点vb,故Overlap (out [vp])=Overlap (out [vp])+Inf [vb],同时将 vb 从 Range 中删除,即 Range = Ranqe-Vb ; ·6.3. 6. 3 :使用字符串数组Extraロ记录Range中的重叠项,将Extraロ初始化为空集0;使用字符串数组Filter []记录Range中除去重叠项剩余的单ー项,将Filter[]初始化为空集0;对于任意节点va e range,对于任意元素u e Label (Va),如果元素u已经属于Filter,则元素u为重叠项,将u加入Extra中并将其影响值Inf [u]加入到Overlap (out [vp]),即 Extra = Extra U u, Overlap (out [vp]) = Overlap (out [vp]) +Inf [u];如果 u 不属于Filter,则将 u 加入到 Filter 数组中,即 Filter = Filter U u ; ··6.3. 6. 4 :由于Extra口和Filter口数组中的元素仍然可能存在重复,故最终节点Vp所有子节点的重叠影响值Overlap(out[vp])需要加上两者重叠值之差,即Overlap (out [vp])=Overlap (out [vp]) + (Overlap (Filter)-Overlap (Extra));·6. 3. 7 :计算节点 vp 的影响值 Inf [vp], Inf [vp] =sum+weight (vp)-overlap (out [vp]),其中 weight(vp)是节点 vp 的权重;Totallnf[vp] =Totallnf [vp]+Inf [vp],其中 TotalInf [vp]是R次蒙特卡洛模拟节点vp的总影响值;R是总模拟次数,R为正整数; ·6.3. 8 :如果节点Vp无父节点,则转6. 3. 8 ;否则,对于节点Vp的任意父节点Vs,将其已访问子节点个数Count [vj加I,即Count [vs] =Count [vJ +1,并将停止标志Stop置为Ialse ; ·6. 3. 9 :将节点Vp标记为已经被访问,即Visited[vp] =true,转6. 2 ; 第七步将蒙特卡洛模拟次数Num加I,判断Num是否小于R,如果Num〈R,转第三步,否则执行第八步; 第八步对集合V— S中所有节点,选择Totallnf []最大的节点v加入到集合S中;第九步如果集合S的节点个数I S I〈K,转第二歩,否则说明已经选定K个最有影响的节点,结束。
2.如权利要求I所述的ー种基于图形处理单元的影响最大化并行加速方法,其特征在于所述第五步中将强连通分量SCCi用新节点vn+i代替的方法是 .5. 2. I :对于强连通分量SCCi,新增节点vn+i,节点vn+i的入边集合置为SCCi中所有节点入边集合的并集,出边集合为SCCi中所有节点出边集合的并集,权重为该强连通分量中各节点权重之和; .5. 2. 2 :将强连通分量SCCi中所有节点的入边集合和出边集合置空,权重置零,方法是 .5. 2. 2. I :初始化整数变量I为O ; .5. 2. 2. 2 :对于强连通分量SCCi中节点V1,将节点V1的入边集合和出边集合置为空集0,权重置为O ; . 5.2. 2. 3 1=1+1 ;如果Kni,其中Iii是强连通分量SCCi的节点个数,则转5. 2. 2. 2 ;如果I≥ni,結束。
3.如权利要求I所述的ー种基于图形处理单元的影响最大化并行加速方法,其特征在于所述总模拟次数R为20000。
全文摘要
本发明公开了一种基于图形处理单元的影响最大化并行加速方法,目的是提出一种新型基于GPU的影响最大化并行方法,利用GPU的并行计算能力加速算法执行、减少执行时间。其特征在于在每次蒙特卡洛模拟中,首先找到网络图中的强连通分量,将同一强连通分量中的所有节点合并为一个节点,其权重为该强连通分量中各节点权重之和;然后采用自底向上遍历的策略,并行计算各节点的影响值;利用GPU的并行计算能力,由各个GPU计算核心采用各自的线程对不同的节点并行计算影响值,得到K个最有影响的节点。本发明将图转化为有向无环图,可以显著减少影响值的计算量,同时通过最大程度地调度各节点在GPU的计算核心中并行计算,降低了整体运行时间。
文档编号G06F19/00GK102819664SQ20121024873
公开日2012年12月12日 申请日期2012年7月18日 优先权日2012年7月18日
发明者李姗姗, 廖湘科, 刘晓东, 吴庆波, 戴华东, 彭绍亮, 王蕾, 付松龄, 鲁晓佩, 郑思 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1