In[]:=
PairwiseTESection[n_,t_,f_:(RandomSample[#1]&)]:=Catenate[Map[{DirectedEdge[{#[[1]],t},{#,t}],DirectedEdge[{#,t},{#[[1]],t+1}],DirectedEdge[{#[[2]],t},{#,t}],DirectedEdge[{#,t},{#[[2]],t+1}]}&,Partition[f[Range[n],t],2]]]
In[]:=
PairwiseTEGraph[len_,time_,f_:(RandomSample[#1]&)]:=Graph[Catenate[PairwiseTESection[2*len,#,f]&/@Range[time]],GraphLayout->"LayeredDigraphEmbedding",VertexStyle->{{x_Integer,y_Integer}->Red,{x_List,y_Integer}->Yellow}]
In[]:=
IntegerEnergyExchangeRandom[pair_]:=With[{tot=Total[pair]},{#,tot-#}&@RandomInteger[{0,tot}]]
In[]:=
FractionalEnergyExchange[pair_,α_]:=With[{tot=Total[pair]},{αtot,(1-α)tot}]
In[]:=
IntegerEnergyExchangeAll[list_]:=Catenate[Map[IntegerEnergyExchange,Partition[RandomSample[list],2]]]
In[]:=
IntegerEnergyExchangeAllNN[list_]:=RotateRight[Catenate[Map[IntegerEnergyExchange,Partition[list,2]]]]
In[]:=
FractionalEnergyExchangeAll[list_]:=Catenate[Map[FractionalEnergyExchange[#,.1]&,Partition[RandomSample[list],2]]]
In[]:=
FractionalEnergyExchangeAllNN[list_]:=RotateRight[Catenate[Map[FractionalEnergyExchange[#,.1]&,Partition[list,2]]]]
In[]:=
FractionalEnergyExchangeAll[list_,a_]:=Catenate[Map[FractionalEnergyExchange[#,a]&,Partition[RandomSample[list],2]]]
In[]:=
FractionalEnergyExchangeAllNN[list_,a_]:=RotateRight[Catenate[Map[FractionalEnergyExchange[#,a]&,Partition[list,2]]]]
In[]:=
ArrayPlot[MapIndexed[RotateLeft,NestList[#,RandomInteger[20,100],100]]]&/@{FractionalEnergyExchangeAll,FractionalEnergyExchangeAllNN}
Out[]=
,
In[]:=
AbsoluteTiming[Histogram[Catenate[NestList[#,RandomInteger[50,500],500]],Automatic,{"Log","Count"},PlotRange->All]]&/@{FractionalEnergyExchangeAll,FractionalEnergyExchangeAllNN}
Out[]=
1.13411,
,1.0548,
In[]:=
Histogram[Catenate[NestList[FractionalEnergyExchangeAll[#,.4]&,RandomInteger[50,500],500]],Automatic,{"Log","Count"},PlotRange->All]
Out[]=
In[]:=
Histogram[Catenate[NestList[FractionalEnergyExchangeAll[#,.5]&,RandomInteger[50,500],500]],Automatic,{"Log","Count"},PlotRange->All]
Out[]=
In[]:=
Histogram[Catenate[NestList[FractionalEnergyExchangeAll[#,.05]&,RandomInteger[50,500],500]],Automatic,{"Log","Count"},PlotRange->All]
Out[]=