// policy 3 - passo come parametro un grafo
public static int[] pol3(int[] spins,Graph g, int i){ // inizializzo una variabile sommavicini globale e una locale int sommaviciniGlob = 0; int sommaviciniLoc = 0; // leggo i NUMVICINI vicini del nodo sorteggiato consultando neighbors[][] for(int w=0; w<g.nodeneighbors[i].length; w++){ sommaviciniLoc = 0; // variabile a cui associare il valore del vicino w dello spin i int j=g.nodeneighbors[i][w]; // sommo a sommavicini la somma dei vicini di j for(int w2=0; w2<g.nodeneighbors[j].length; w2++){ int j2= g.nodeneighbors[j][w2]; if(j2 != i) sommaviciniLoc += spins[j2]; } // in base al risultato parziale aggiorno il valore di neighbors[i][j] if(sommaviciniLoc>0) spins[j]=1; else if(sommaviciniLoc<0) spins[j]=-1; else { if ((Math.random())>0.5) spins[i]=-1; else spins[i]=+1; } //sommo infine a sommavicini il valore aggiornato di j sommaviciniGlob += spins[j] + sommaviciniLoc; } // se sommaviciniGlob è maggiore di 0, allora la maggior parte dei vicini di i è // positiva, quindi forzo spins[i] a diventare "+1" if(sommaviciniGlob>0) spins[i]=1; // ...se è minore di 0 lo forzo a "-1" else if(sommaviciniGlob<0) spins[i]=-1; // ...e se è uguale a 0 faccio scegliere a caso tra i due valori else { if ((Math.random())>0.5) spins[i]=-1; else spins[i]=+1; } return spins; }