In[]:=
numnodes=4;numfamilies=2;nlevel=1;L[0]=1;L[1]=1.1;L[2]=1.2;L[3]=1.3;B[0]=2L[0];B[1]=2L[1];B[2]=2L[2];B[3]=2L[3];Adj=Table[adj[i,j],{i,1,numnodes},{j,1,numnodes}];varsnodes=Flatten[Adj];Adjfam=Table[famadj[i,j],{i,1,numfamilies},{j,1,numfamilies}];varsfam=Flatten[Adjfam];vars=Flatten[{varsnodes,varsfam}];args={Adj,Adjfam};MatrixBenefit[m_?MatrixQ]:=(Print[m[[1,1]]];Total[Flatten[m]]);MatrixCost[m_?MatrixQ]:=With[{threshold=0.1/Times@@Dimensions[m]},Count[Map[GreaterThan[threshold],m,{2}],True,{2}]];totaladj[{ms___?MatrixQ}]:=(Sum[L[k-1](MatrixCost/@{ms})[[k]]-B[k-1](MatrixBenefit/@{ms})[[k]],{k,nlevel+1}]);sol=NMinimize[totaladj[args],vars];
adj[1,1]
famadj[1,1]
adj[1,1]
famadj[1,1]
