You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
// Simple peer-to-peer file distribution protocol based on BitTorrent
|
|
// gxn/dxp Jan 2006
|
|
|
|
ctmc
|
|
|
|
#const N#
|
|
#const K#
|
|
// N=#N# clients, K=#K# blocks to be downloaded
|
|
// Actually there are N+1=#N+1# clients, one of which has all blocks initially
|
|
|
|
// Rate of block download for a single source
|
|
const double mu=2;
|
|
|
|
// Rate of download of block i:
|
|
// A client can download from the single client which starts with all blocks
|
|
// or from anyone that has subsequently downloaded it.
|
|
// Total number of concurrent downloads for each block is 4.
|
|
#for j=1:K#
|
|
formula rate#j#=mu*(1+min(3,#+ i=1:N#b#i##j##end#));
|
|
#end#
|
|
|
|
// client 1
|
|
module client1
|
|
|
|
// bij - has client i downloaded block j yet?
|
|
#for j=1:K#
|
|
b1#j# : [0..1];
|
|
#end#
|
|
|
|
// Downloading of each block (see rate computations above)
|
|
#for j=1:K#
|
|
[] b1#j#=0 -> rate#j# : (b1#j#'=1);
|
|
#end#
|
|
|
|
endmodule
|
|
|
|
// construct remaining clients through renaming
|
|
#for i=2:N#
|
|
module client#i#=client1[b11=b#i#1#for j=2:K#,b1#j#=b#i##j##end#,b#i#1=b11#for j=2:K#,b#i##j#=b1#j##end#] endmodule
|
|
#end#
|
|
|
|
// labels
|
|
#for i=1:N#
|
|
label "done#i#" = #+ j=1:K#b#i##j##end# = #K#; // client #i# has received all blocks
|
|
#end#
|
|
label "done" = #+ i=1:N#(#+ j=1:K#b#i##j##end#)#end# = #N*K#; // all clients have received all blocks
|
|
|
|
// reward: fraction of blocks received
|
|
rewards "frac_rec"
|
|
#for i=1:N#
|
|
true : ((#+ j=1:K#b#i##j##end#)/#K#)/#N#;
|
|
#end#
|
|
endrewards
|