tutorialWord格式.docx
- 文档编号:22932401
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:26
- 大小:28.51KB
tutorialWord格式.docx
《tutorialWord格式.docx》由会员分享,可在线阅读,更多相关《tutorialWord格式.docx(26页珍藏版)》请在冰豆网上搜索。
节点和协议的实例是通过克隆来创建的,只有一个原型是通过构造方法创建,其它的节点和协议都是从这个原型中克隆而来。
基于这个原因,协议类中clone方法的实现是很重要的。
初始化操作,设置每个协议的初始状态。
初始化阶段是由Control对象控制运行的,仅在实验开始时运行一次。
在配置文件中,初始化的组件可以由init前缀识别,在下面讨论的initializer对象也是controls,但为了标记其功能以区别于一般的Control对象,它被配置用来在初始阶段运行。
在初始化完成后,Cycle-based引擎在每一个周期中调用所有组件(protocols和controls)一次,直到完成了指定的周期数,或者某个组件决定终止仿真为止。
在PeerSim中每一个对象(controls和protocols)都被赋以一个Scheduler对象,它定义了什么时候本组件将会被执行。
在默认情况下,所有对象都会在每个周期中运行。
但我们也可以配置一个protocol或control只在某些特定的周期中运行,也可以在每一个周期中指定组件的执行顺序。
下图展示了对controls和protocols的调度,其中C代表Control而P代表一个协议。
图下方的数字代表PeerSim的周期,在最后一个周期后,可以运行一个control来获取最后的快照(snapshot)。
peersim-schedule
在一个Control收集数据时,数据将会被格式化并发送到标准输出或重定向到一个文件以进行后续的处理。
配置文件只是一个普通的ASCII文本,本质上就是java.util.Properties,以#开头的行代表注释。
用以下的方式在命令行的模式下运行,比如:
viewsourceprint?
1java-cppeersim.Simulatorconfig-edexample.txt
具体来说,可能是:
1java-cpD:
\library\peersim-1.0.5\jep-2.3.0.jar;
D:
\library\peersim-1.0.5\djep-1.0.0.jar;
\library\peersim-1.0.5\peersim-1.0.5.jar;
\library\peersim-1.0.5\peersim-doclet.jarpeersim.SimulatorD:
\library\peersim-1.0.5\example\config-edexample.txt
当然你的jar包和配置文件的位置可能有所不同,也可以将这个jar包直接加到classpath上,就不必使用-cp参数来显示指定classpath。
二.配置文件示例一
Gossip-basedAggregation协议,Aggregation是聚集的意思,这里是指对一个分布于网络中的数值集合运行一个特定的函数进行计算(如求平均数,最大值,最小值等等),每个节点周期性地选择一个邻居节点进行通讯(基于覆盖网),并且在每次通讯时,基于前一个取得的近似值,相互更新它们下次计算的近似值。
本例将创建一个由50000个节点组成的固定P2P随机拓扑,选定的协议是使用average函数的Aggregation协议,每个节点中用于求平均的值使用一个区间在(0,100)的线性分布来初始化,最后再定义一个Control监视平均值。
01#PEERSIMEXAMPLE1
02
03random.seed1234567890
04simulation.cycles30
05
06control.shfShuffle
07
08network.size50000
09
10protocol.lnkIdleProtocol
11
12protocol.avgexample.aggregation.AverageFunction
13protocol.avg.linkablelnk
14
15init.rndWireKOut
16init.rnd.protocollnk
17init.rnd.k20
18
19init.peakexample.aggregation.PeakDistributionInitializer
20init.peak.value10000
21init.peak.protocolavg
22
23init.linLinearDistribution
24init.lin.protocolavg
25init.lin.max100
26init.lin.min1
27
28#youcanchangethistoselectthepeakinitializerinstead
29include.initrndlin
30
31control.avgoexample.aggregation.AverageObserver
32control.avgo.protocolavg
上面的配置中,一部份是全局属性,另一部分对应单个组件的实例。
如simulation.cycles是全局属性,而protocol.lnk.xxx则定义了lnk协议的xxx参数。
第6行的control.shfShuffle,Shuffle类是用来重新洗牌,在每次重新洗牌后,在一个Cycle-based类型的仿真周期中,节点迭代的次序将会变成随机的,这个类只对Cycle-based类型的仿真起作用。
每个组件都有一个名字,比如lnk。
对于协议,这个名字将会被映射到一个在PeerSim引擎中称为protocolID的数值型索引,虽然这个索引不出现在配置文件中,但在仿真时需要使用它来访问协议,这在后面将进一步解释。
一个组件,即protocol或control由下面的语法来声明:
1[protocol|init|control].string_id[full_path_]classname
注意到类的全路径是可选的,事实上PeerSim可以在类路径中搜索类名,只有在多个类拥有相同的名称时必须使用全路径。
init前缀定义了一个Initializer对象,它实现了Control接口。
组件的参数(如果有的话)则以下面的语法定义:
1[protocol|init|control].string_id.parameter_name
第10行定义了第一个协议,键部份包含了它的类型,而值则是组件的类名,由于IdleProtocol类在peersim包中,所以不必使用全路径。
可以为每一个组件声明参数,如第13行;
而从第3行到第8行一些全局的仿真属性被引入,如仿真的总周期数和覆盖网的大小。
Shufflecontrol对每一个周期中节点的访问顺序进行重新洗牌。
从第10行到第13行,引入了两个协议:
IdleProtocol是存储邻居节点链路的一个静态容器,在进行静态拓扑建模的时候尤其有用,这个协议的唯一功能是作为其它协议的邻居信息的源,它没有实现CDProtocol接口但实现了Linkable接口,Linkable接口提供了到邻居节点的链路。
AverageFunction是聚集协议的求平均数版本。
它的参数(linkable)是很重要的,aggregation协议需要与邻居节点交流但是本身没有邻居节点列表。
在模块化的方式中,它能应用于任何覆盖网络;
定义覆盖网的协议栈应当在这里指定,参数linkable的值是实现了Linkable接口的协议的类名(在这里是IdleProtocol)。
从15行到26行用于初始化之前声明的所有组件。
前面声明了3个初始化组件,但只有其中的2个被使用了(见29行)。
第一个初始化器,peersim.init.WireKOut,进行的是对静态覆盖网的布线,特别的,节点以度数k随机地与其它节点相连接。
第2个和第3个初始化器是初始化aggregation协议的可选方案,在这里是指需要求平均的初值。
初始化器设置初始值遵循peak分布或线性分布。
Peak的意思是只有一个节点拥有与0不同的值。
而线性则代表节点被拥有一个线性增加的值。
两个初始化都需要一个指定了协议来进行初始化(协议参数)的协议名。
额外的参数是PeakDistributionInitializer的range(max,min参数)。
使用peak还是linear分布是由include.init属性来决定的(29行),它指定了选择哪个初始化器。
这个属性也定义了组件运行的顺序,注意到默认的顺序(即如果没有include属性),是根据字母排序的,对于protocol和control的include属性也是如此。
最后,31行和32行声明了最后一个组件:
aggregation.AverageObserver。
它使用的唯一参数是protocol,它引用了aggregation.AverageFunction协议类型,所以这个参数的值是avg。
在命令行下,注释掉第3行的seed,运行这个仿真,得到的结果将是:
01control.avgo:
01.0100.05000050.49999999999998816.799006633546811
02control.avgo:
11.297005940118802399.385197703954085000050.50000000000005249.4067328768654511
03control.avgo:
29.57357147142942884.388749024980485000050.50000000000008577.8938587789518211
04control.avgo:
323.86036158223164771.936272241069825000050.4999999999996724.13136670722840211
05control.avgo:
434.92091596714746568.928284821189585000050.499999999999947.70208290541427311
06control.avgo:
542.3722819840994659.945110048708235000050.499999999999872.43135621108877511
07control.avgo:
645.1962191215179454.8555161630707465000050.4999999999998440.774145170675487711
08control.avgo:
747.6871627452809253.114339347456465000050.499999999999490.2451536572906985711
09control.avgo:
848.9770627131815852.389162380212765000050.500000000000260.0774652338473126911
10control.avgo:
949.5967444019466851.469634726374515000050.499999999999370.02468934881701182311
11control.avgo:
1049.94649041721526651.133437503849345000050.500000000000480.00780702257792841421
12control.avgo:
1150.1814347239533350.8583372678695655000050.499999999999820.00249350125629689821
13control.avgo:
1250.3045497810149250.672034548272765000050.5000000000002067.90551008686205E-411
14control.avgo:
1350.398139483478350.600938986890355000050.499999999999672.518940347803474E-411
15control.avgo:
1450.44934731483212450.549629899517355000050.50000000000038.071623184942779E-511
16control.avgo:
1550.4736819550641550.526088173434595000050.499999999999992.566284350168338E-511
17control.avgo:
1650.4851047537443550.5188710217568945000050.500000000000128.191527862075119E-611
18control.avgo:
1750.4908242676411250.510006816411425000050.499999999999452.570199757692886E-611
19control.avgo:
1850.49481050576504550.505562213030885000050.50000000000038.197012224814065E-711
20control.avgo:
1950.49687636784203450.502964449510855000050.4999999999995242.640584231868471E-711
21control.avgo:
2050.49845790655890550.501820621462545000050.5000000000003348.565428611988968E-811
22control.avgo:
2150.4990554163528350.500964663746385000050.499999999999742.721171621666857E-811
23control.avgo:
2250.4994606147334750.5005536282529455000050.499999999999758.590349265230611E-911
24control.avgo:
2350.4997260227237650.5003155713704155000050.50000000000042.6248542064007986E-921
25control.avgo:
2450.499845060681650.500180533118785000050.500000000000058.845012874999227E-1011
26control.avgo:
2550.49989479387425550.5000969239652165000050.500000000000791.864501428663076E-1012
27control.avgo:
2650.499926798451250.5000561267856945000050.50000000000038.594896829690765E-1111
28control.avgo:
2750.4999661317055250.500031986087625000050.500000000000171.9554527178661528E-1111
29control.avgo:
2850.4999790306833350.5000191721642865000050.4999999999997663.274246411310768E-1111
30control.avgo:
2950.4999895865393550.50000994096455000050.500000000000450.011
Observer组件产生了很多数字,从第3列和第4列的数据(网络中的最大值和最小值),可以很容易地看到方差衰减得非常快,从第12个周期开始,几乎所有的节点都近似于真实的平均值50。
可以用不同的数字或改变初始的分布(例如,使用aggregation.PeakDistributionInitializer)。
同时,也可以替换覆盖网,比如你可以用Newscast来代替IdleProtocol。
三.配置文件二
第二个例子是前面例子的改进版本。
现在aggregation协议将运行于Newscast并添加了一些扩展。
例如,有一个Control对象用来改变网络的大小:
在第5个周期至第10个周期间,每次调用时删除500个节点。
01#PEERSIMEXAMPLE2
04
05simulation.cycles30
06
07control.shfShuffle
08
09network.size50000
10
11protocol.lnkexample.newscast.SimpleNewscast
12protocol.lnk.cache20
13
14protocol.avgexample.aggregation.AverageFunction
15protocol.avg.linkablelnk
16
17init.rndWireKOut
18init.rnd.protocollnk
19init.rnd.k20
20
21init.pkexample.aggregation.PeakDistributionInitializer
22init.pk.value10000
23init.pk.protocolavg
24
25init.ldLinearDistribution
26init.ld.protocol1
27init.ld.max100
28init.ld.min1
29
30#youcanchangethistoincludethelinearinitializerinstead
31include.initrndpk
32
33control.aoexample.aggregation.AverageObserver
34control.ao.protocolavg
35
36control.dnetDynamicNetwork
37control.dnet.add-500
38#control.dnet.minsize4000
39control.dnet.from5
40control.dnet.until10
在这里,全局参数与前面的例子相同,现在只讨论添加的扩展。
11行到12行选择了Newscast协议,它唯一的参数是缓存的大小。
Newscast是一个流行性的内容分布和拓扑管理协议,系统中的每个peer都有一个部份的节点信息(事实上是一个固定大小的的节点描述符(nodedescriptor)的集合),每个描述符是由peer地址和一个创建描述符的时间戳组成的元组。
每个节点通过选择一个随机的邻居并交换信息来更新自身的状态,在交换信息时,两个peer归并信息并且只留下最新的项。
在这种方式中,陈旧的信息(描述符)从系统中删除。
这个过程允许协议修复覆盖网拓扑,用最小的代价删除死链,这种特性在一个节点频繁加入退出的动态系统中是很有用的。
17到28行是初始化部分,与前面的例子相同,然而这里选择使用peak分布。
为了将其转换为线性分布,在31行改变includeinit的属性。
peak分布将用0初始化所有节点的值,除了取得value参数的那个节点除外。
在36到40行,DynamicNetwork是定义的最后一个组件,如前所述,一个Control对象可以用来修改仿真中的一些参数,这种改变可以在每个仿真周期中进行(默认的行为),或者使用一种更好的途径。
示例中选择的对象每次在control执行时删除500个节点。
参数add指定了要添加的节点的数量,它可以是负值。
而参数si
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tutorial
![提示](https://static.bdocx.com/images/bang_tan.gif)