In[]:=
numnodes=100;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]=1;family[1]={1};Monitor[For[nodei=1,nodei<=numnodes,nodei++,famgraph=VertexAdd[famgraph,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*)benefits[fnode]+=RandomReal[{0,nodebenefit}](*countsnodeswithinafamily,incrementingasanodeisadded*);famgraph=VertexAdd[famgraph,nodej,VertexLabelsTable[ii,{i,nodej}]];i=0;While[i<Length[family[fnode]],i++;famedge[family[fnode][[i]],nodej]=RandomReal[{0,nodecost}];famedge[nodej,family[fnode][[i]]]=famedge[family[fnode][[i]],nodej];(*fam[[family[fnode][[i]],nodej]]=1/famedge[family[fnode][[i]],nodej];fam[[nodej,family[fnode][[i]]]]=1/famedge[nodej,family[fnode][[i]]];*);famgraph=EdgeAdd[famgraph,family[fnode][[i]]nodej];(*WeightedAdjacencyGraph[fam(*,VertexLabels"Name"*)]*)Pause[1];costs[fnode]+=famedge[family[fnode][[i]],nodej]];(*countsweightededgeswithinafamily,incrementingwhenfirstconnectingtoanodewithinafamily*);If[costs[fnode]<=benefits[fnode],family[fnode]=Append[family[fnode],nodej];,(*else*)(*Print[fnode," ",nodei," ",nodej];*)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(*fam=Table[If[famedge[i,j]>0.01,1/famedge[i,j],Infinity],{i,1,numnodes},{j,1,numnodes}];famgraph=WeightedAdjacencyGraph[fam,VertexLabels"Name"]*)