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[]=