In[]:=
numnodes=30;​​nodecost=0.25;​​nodebenefit=1;​​fnode=1;​​​​(*fam=Table[Infinity,{i,1,numnodes},{j,1,numnodes}];*)​​famgraph=Graph[{1},{},VertexLabels{11}];​​For[i=1,i<=numnodes/2(*atleastthatmanyfamilies*),i++,benefits[i]=0;costs[i]=0;family[i]={}];​​benefits[1]=0.5;​​nodeb[1]=0.5;​​family[1]={1};​​Monitor[For[nodei=1,nodei<=numnodes,nodei++,​​famgraph=VertexAdd[famgraph,nodei,VertexSizeTable[i->nodeb[i],{i,1,nodei}],VertexLabelsTable[ii,{i,nodei}]];​​For[nodej=nodei+1,nodej<=numnodes,nodej++,​​If[!MemberQ[family[fnode],nodej],(*countsweightededgeswithinafamily,incrementingwhenconnectingtoothernodesinafamily.Weightisproportionaltoprobabilityofcheating*)(*ifjisnotalreadypartofi'sfamily,testifit'sgotitsownfamily,elsemovetonextj*)​​nodeb[nodej]=RandomReal[{0,nodebenefit}](*countsnodeswithinafamily,incrementingasanodeisadded*);​​benefits[fnode]+=nodeb[nodej];​​famgraph=VertexAdd[famgraph,nodej,VertexSizeTable[i->nodeb[i],{i,1,nodej}],VertexLabelsTable[ii,{i,nodej}]];​​i=0;​​length=Length[family[fnode]];​​While[i<length,i++;​​edge=RandomReal[{0,nodecost}];​​Pause[0.1];​​famgraph=EdgeAdd[famgraph,family[fnode][[i]]nodej,EdgeStyle[Thickness[Exp[edge]]]];​​(*WeightedAdjacencyGraph[fam(*,VertexLabels"Name"*)]*)​​costs[fnode]+=edge​​];(*countsweightededgeswithinafamily,incrementingwhenfirstconnectingtoanodewithinafamily*);​​If[costs[fnode]<=benefits[fnode],​​family[fnode]=Append[family[fnode],nodej];​​,(*else*)​​(*Print[fnode," ",nodei," ",nodej];*)​​Pause[1];​​famgraph=VertexDelete[famgraph,nodej];​​(*i=0;​​While[i<Length[family[fnode]],i++;​​(*fam[[family[fnode][[i]],nodej]]=Infinity;​​fam[[nodej,family[fnode][[i]]]]=Infinity​​Print[fnode," ",family[fnode][[i]]," ",nodej];*);​​famedge[family[fnode][[i]],nodej]=0;​​famedge[nodej,family[fnode][[i]]]=0​​];*)​​nodei=nodej-1;​​nodej=nodei;​​fnode++​​]​​]​​]​​],famgraph​​];famgraph​​
Out[]=
In[]:=
Clear[nodeb]