In[]:=
num0=2(*individualsinafamily*);num1=2(*familiesinavillage*);num2=2(*villagesinmuni*);num3=2(*munisinanation*);num4=3(*nationsinUN,notusedyet*);​​numsamples=100;​​statbatch=1;​​(*For[num0=2,num0<=20,num0++,*)​​numnodes=num0*num1*num2*num3(**num4*);​​individualsinfamilies=num0;​​familiesinvillages=num1;​​villagesinmunies=num2;​​muniesinnation=num3;​​individualsinvillages=individualsinfamilies*num1;​​individualsinmunies=individualsinvillages*num2;​​individualsinnations=individualsinmunies*num3;​​numfamilies=numnodes/num0;​​numvillages=numnodes/(individualsinvillages);​​nummunies=numnodes/(individualsinmunies);​​numnations=numnodes/(individualsinnations);​​munitonatnorm=nummunies(muniesinnation-1);​​viltomuninorm=numvillages(villagesinmunies-1);​​famtovilnorm=numfamilies(familiesinvillages-1);​​indtofamnorm=numnodes(individualsinfamilies-1);​​For[j=1,j<=numfamilies,j++,family[j]={}];​​For[k=1,k<=numvillages,k++,village[k]={}];​​For[l=1,l<=nummunies,l++,muni[l]={}];​​For[m=1,m<=numnations,m++,nat[m]={}];​​For[i=1,i<=numnodes,i++,​​j=Floor[(i-1)/num0]+1;​​family[j]=Append[family[j],i]];​​For[j=1,j<=numfamilies,j++,​​k=Floor[(j-1)/num1]+1;​​village[k]=Flatten[Append[village[k],j]]];​​For[k=1,k<=numvillages,k++,​​l=Floor[(k-1)/num2]+1;​​muni[l]=Flatten[Append[muni[l],k]]];​​For[m=1,m<=nummunies,m++,​​n=Floor[(m-1)/num3]+1;​​nat[n]=Flatten[Append[nat[n],m]]];​​famlist=Table[i,{i,numfamilies(*+1*)}];​​villist=Table[i,{i,numvillages(*+1*)}];​​munilist=Table[i,{i,nummunies(*+1*)}];​​natlist=Table[i,{i,numnations+1}];​​famf[ii_,input_]:=(​​For[Jj=1,Jj<=numfamilies,Jj++,temp=0;​​For[k=1,k<=num0,k++,​​temp+=input[ii,family[Jj][[k]]]​​];​​Famf[Jj]=temp^2;​​];​​(*Famf[numfamilies+1]=Cos[numfamilies+1]^2(input[ii,family[1][[1]]]^2+input[ii,family[numfamilies][[1]]]^2);*)​​Famf​​);​​vilf[input_]:=(​​For[Jj=1,Jj<=numvillages,Jj++,temp=0;​​For[k=1,k<=num1,k++,​​temp+=input[[village[Jj][[k]]]]​​];​​Vilf[Jj]=temp^2;​​];​​(*Vilf[numvillages+1]=Sin[numvillages+1]^2input[[numfamilies+1]]^2;*)​​Vilf​​);​​munif[input_]:=(​​For[Jj=1,Jj<=nummunies,Jj++,temp=0;​​For[k=1,k<=num2,k++,​​temp+=input[[muni[Jj][[k]]]]​​];​​Munif[Jj]=temp^2;​​];​​(*Munif[nummunies+1]=(1+Tanh[nummunies+1])input[[numvillages+1]]^2;*)​​Munif​​);​​For[ii=1,ii<=numsamples,ii++,​​For[jj=1,jj<=numnodes,jj++,​​inputarray[ii,jj]=(*jj/numnodes*)RandomReal[{-2,2}]​​];​​cdfam[ii]=Table[famf[ii,inputarray][i],{i,numfamilies(*+1*)}];​​cdvil[ii]=Table[vilf[cdfam[ii]][i],{i,numvillages(*+1*)}];​​cdmuni[ii]=Table[munif[cdvil[ii]][i],{i,nummunies(*+1*)}];​​];
In[]:=
trainingdatastandard={};​​For[ii=1,ii<=numsamples,ii++,trainfamsplit={};famnettest[ii]={};​​Inp[ii]=Table[inputarray[ii,jj],{jj,1,numnodes}];​​trainingdatastandard=Flatten[Append[trainingdatastandard,{Inp[ii]->cdmuni[ii]}]]​​];​​NNstandard=NetChain[{100,LogisticSigmoid,100,LogisticSigmoid,100,LogisticSigmoid,100,LogisticSigmoid,100,LogisticSigmoid,nummunies}];​​standardresult=NetTrain[NNstandard,trainingdatastandard(*,ValidationSet->None*)]​​​​​​