In[]:=
numnodes=30;nodecost=0.25;nodebenefit=1;fnode=1;(*fam=Table[Infinity,{i,1,numnodes},{j,1,numnodes}];*)famgraph=Graph[{1},{},VertexLabels{11}];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,VertexSizeTable[i->nodeb[i],{i,1,nodei}],VertexLabelsTable[ii,{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,VertexSizeTable[i->nodeb[i],{i,1,nodej}],VertexLabelsTable[ii,{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]]]]=InfinityPrint[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]