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*)]