Java lang null pointer exception

Fermé
lazylady Messages postés 1 Date d'inscription mardi 20 mai 2014 Statut Membre Dernière intervention 20 mai 2014 - 20 mai 2014 à 03:49
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 20 mai 2014 à 07:54
Bonjour,

je suis entrain de travailler sur un programme sur java en utilisant la bibliothèque Cplex pour résoudre un problème de routage des véhicules.
En exécutant mon programme la console m'affiche :java.lang.nullpointer exception.
Voici le code que j'ai conçu , je suis débutante en informatique et je ne sais pas si ma syntaxe est correcte.l'erreur pointe exactement sur la ligne soulignée.

//la matrice distance;

int i,j,k;

double[][][] preval = new double[14][14][7];
double[][][] solution_f = new double[14][14][7];
double[] liste_points_visites = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} ;

double[][] distance ={{500,2.3,6.3,4.6,6.2,4.9,4.2,4.4,5.7,3,4,8.8,3.7,4.5,4.4},
{10.6,500,3.8,4.8,4.2,5.4,4.2,5,4.5,6.2,4.2,4.6,3.5,4.7},
{5.8,4,500,1.7,0.8,1.5,0.4,1.1,3.8,1.6,6.8,1,2.3,1.3},
{4.7,3.8,2,500,1.9,3.1,1.9,2.7,1.7,1.6,2.2,2.4,0.3,2.4},
{6.2,1,0.4,3.3,500,2.3,1.2,1.8,4.6,2.5,4.2,2.1,2.2,1.2},
{4.9,1.3,1.4,0.9,2.8,500,1.1,0.8,4.8,1.3,4.1,0.6,3.3,0.4},
{3.7,0.4,3,3.3,1.2,1.1,500,0.7,3.7,1.1,3,0.5,2.2,0.8},
{3.7,0.4,3,3.3,2.4,0.4,0.7,500,4.4,1.2,3.7,0.4,2.9,1.5},
{3.5,3,5,1.4,2.3,3.4,2.2,3,500,2.6,1.5,2.7,1.6,4.8},
{3.6,0.5,2.8,2,2.2,1.5,1.1,1.2,3.8,500,3.2,0.8,1.9,1.2},
{3.7,0.4,3.3,4.3,3.3,4.4,3.2,4,1.6,4.6,500,3.7,2.6,3.5},
{3,0.4,3.2,3.3,2.5,0.7,0.5,0.4,4,0.8,3.4,500,2.5,0.6},
{3,3,3.3,0.4,2.5,4.8,2.4,4.4,1.4,2.4,2.4,3.7,500,2.6},
{3,0.5,2,3.3,1.9,1.2,0.4,0.8,4.1,1.2,3.5,0.6,2.6,500}};





double[] cadence = {7,1,2,1,3,1,1,2,3,1,1,2,2,1};

double[] demande = {0,90,110,100,57,60,90,40,60,70,50,70,60,70};


double ca=600;
double vitesse=1.33;
double temps_tr=15;
int p=0;
int m=0;

//les variables de decisions

IloNumVar[][][] x = new IloNumVar[14][14][7];
IloNumVar[][] y =new IloNumVar[14][7];
IloNumVar[][][][] z = new IloNumVar[14][14][7][1000];


for(i=0; i<=13;i++)
{

y[i] = cplex.numVarArray(7, 0, 1, IloNumVarType.Int); //chaque i contient 7 valeurs ;


}

for(i=0; i<=13;i++)
{
for(j=0; j<=13;j++)
{

x[i][j] = cplex.numVarArray(7, 0, 1, IloNumVarType.Int);//chaque couple (i , j) contient 7 termes

}

}






for(i=0; i<=13;i++)// construction de la fonction objective;
{
for(j=0; j<=13;j++)
{
for(k=0; k<=6;k++)
{
expr.addTerm(distance[i][j],x[i][j][k]);
}

}
}


// minimiser la fonction objective;
IloObjective obj = cplex.minimize(expr);

cplex.add(obj);
// un camion va vers un seul client;

for(i=0; i<=13;i++)
{
for(k=0; k<=6;k++)
{



cplex.addEq(cplex.sum( x[i][0][k],
x[i][1][k],
x[i][2][k],
x[i][3][k],
x[i][4][k],
x[i][5][k],
x[i][6][k],
cplex.sum(
x[i][7][k],
x[i][8][k],
x[i][9][k],
x[i][10][k],
x[i][11][k],
x[i][12][k],
x[i][13][k])),

y[i][k]);
}


}

// un camion vient d'un seul client;
for(j=0; j<=13;j++)
{
for(k=0; k<=6;k++)
{



cplex.addEq(cplex.sum( x[0][j][k],
x[1][j][k],
x[2][j][k],
x[3][j][k],
x[4][j][k],
x[5][j][k],
x[6][j][k],
cplex.sum(
x[7][j][k],
x[8][j][k],
x[9][j][k],
x[10][j][k],
x[11][j][k],
x[12][j][k],
x[13][j][k])),

y[j][k]);
}


}

// un client est visité autant de fois que sa cadence;

for(i=0; i<=13;i++)
{

cplex.addEq(cplex.sum( y[i][0],
y[i][1],
y[i][2],
y[i][3],
y[i][4],
y[i][5],
y[i][6]),


cadence[i]);
}

// les demandes ramassées par un camion doivent etre inférieures à sa capacité;

for(k=0; k<=6;k++)
{

cplex.addLe(cplex.sum(
cplex.prod(demande[0],y[0][k]),
cplex.prod(demande[1],y[1][k]),
cplex.prod(demande[2],y[2][k]),
cplex.prod(demande[3],y[3][k]),
cplex.prod(demande[4],y[4][k]),
cplex.prod(demande[5],y[5][k]),
cplex.prod(demande[6],y[6][k]),
cplex.sum(

cplex.prod(demande[7],y[7][k]),
cplex.prod(demande[8],y[8][k]),
cplex.prod(demande[9],y[9][k]),
cplex.prod(demande[10],y[10][k]),
cplex.prod(demande[11],y[11][k]),
cplex.prod(demande[12],y[12][k]),
cplex.prod(demande[13],y[13][k])




)),ca);
}


if ( cplex.solve() )


//remplissage de la matrice des valeurs provisoires preval


for(i=0; i<=13;i++)
{
for(j=0; j<=13;j++)
{
double[] tmp = cplex.getValues(x[i][j]);

for(k=0; k<=6;k++)
{
preval[i][j][k]=tmp[k];
}

}
}



//verification des subtours ;

int cmp=0;
int indice_point_visite=0;
boolean construire_chemin=true;
double []valeur_somme=new double[7];
int nbr=0;
int [][] nombre=new int [7][1000];
boolean subtour_found=true;


while (subtour_found)
{
for(k=0; k<=6;k++)
{

while(construire_chemin)
{
j=0;

while(preval[cmp][j][k]==0 )
{

j++;


}

if(j!=0)
{
cmp=j;
liste_points_visites[indice_point_visite]=j;
indice_point_visite++;
}
else
{
construire_chemin=false;
}
}

IloLinearNumExpr out_depot = cplex.linearNumExpr();


for(i=0; i<=13;i++)
{
for ( j =0;j<=13;j++)
{
if(
i!= liste_points_visites[0] &&
i!= liste_points_visites[1] &&
i!= liste_points_visites[2] &&
i!= liste_points_visites[3] &&
i!= liste_points_visites[4] &&
i!= liste_points_visites[5] &&
i!= liste_points_visites[6] &&
i!= liste_points_visites[7] &&
i!= liste_points_visites[8] &&
i!= liste_points_visites[9] &&
i!= liste_points_visites[10] &&
i!= liste_points_visites[11] &&
i!= liste_points_visites[12] &&
i!= liste_points_visites[13] &&
j!= liste_points_visites[0] &&
j!= liste_points_visites[1] &&
j!= liste_points_visites[2] &&
j!= liste_points_visites[3] &&
j!= liste_points_visites[4] &&
j!= liste_points_visites[5] &&
j!= liste_points_visites[6] &&
j!= liste_points_visites[7] &&
j!= liste_points_visites[8] &&
j!= liste_points_visites[9] &&
j!= liste_points_visites[10] &&
j!= liste_points_visites[11] &&
j!= liste_points_visites[12] &&
j!= liste_points_visites[13] )

{

out_depot.addTerm(1,x[i][j][k]);

}


}
}

valeur_somme[k]=cplex.getValue(out_depot);
}

if ( ( valeur_somme[0])!=0 ||
(valeur_somme[1])!=0 ||
(valeur_somme[2])!=0 ||
(valeur_somme[3])!=0 ||
(valeur_somme[4])!=0 ||
(valeur_somme[5])!=0 ||
(valeur_somme[6])!=0 )

{


for(k=0; k<=6;k++)
{
while(construire_chemin)
{
j=0;

while(preval[cmp][j][k]==0 )
{

j++;


}

if(j!=0)
{
cmp=j;
liste_points_visites[indice_point_visite]=j;
indice_point_visite++;
}
else
{
construire_chemin=false;
}
}

IloLinearNumExpr somme_hors_depot = cplex.linearNumExpr();





for ( i =0;i<=13;i++)
{
for ( j =0;j<=13;j++)
{
if( preval[i][j][k]==1 &&
i!= liste_points_visites[0] &&
i!= liste_points_visites[1] &&
i!= liste_points_visites[2] &&
i!= liste_points_visites[3] &&
i!= liste_points_visites[4] &&
i!= liste_points_visites[5] &&
i!= liste_points_visites[6] &&
i!= liste_points_visites[7] &&
i!= liste_points_visites[8] &&
i!= liste_points_visites[9] &&
i!= liste_points_visites[10] &&
i!= liste_points_visites[11] &&
i!= liste_points_visites[12] &&
i!= liste_points_visites[13] &&
j!= liste_points_visites[0] &&
j!= liste_points_visites[1] &&
j!= liste_points_visites[2] &&
j!= liste_points_visites[3] &&
j!= liste_points_visites[4] &&
j!= liste_points_visites[5] &&
j!= liste_points_visites[6] &&
j!= liste_points_visites[7] &&
j!= liste_points_visites[8] &&
j!= liste_points_visites[9] &&
j!= liste_points_visites[10] &&
j!= liste_points_visites[11] &&
j!= liste_points_visites[12] &&
j!= liste_points_visites[13] )

{


preval[i][j][k] =cplex.getValue( z[i][j][k][p]);
somme_hors_depot.addTerm(1,x[i][j][k]);

nbr++;

}


}

}

nbr=nombre[k][p];
cplex.addLe (somme_hors_depot, nbr-1);

}

{






//solve the problem
cplex.solve();
p++;




}




//ajout des contraintes cumulées//

IloLinearNumExpr somme_hors_depot = cplex.linearNumExpr();


for(m=0;m<=p;m++)

{

for(k=0;k<=6;k++)
{
for( i=0;i<=13;i++)
{
for ( j=0;j<=13;j++)
{

if( cplex.getValue(z[i][j][k][m])==1)

{

somme_hors_depot.addTerm(x[i][j][k] ,1);

}
}
}
cplex.addLe(somme_hors_depot,nombre[k][m]);
}
}
}


else

{

subtour_found=false;

}

}



//affichage des resultats , prendre les resultats dans une matrice

cplex.output().println("etat :"+ cplex.getStatus()+" la fonction objective ;) :"+cplex.getObjValue());
{

for(i=0; i<=13;i++)
{
for(j=0; j<=13;j++)
{

double[] xval = cplex.getValues(x[i][j]);

for(k=0; k<=6;k++)
{

solution_f[i][j][k]=xval[k];

}

}
}


for(k=0; k<=6;k++)
{
for(i=0; i<=13;i++)
{
for(j=0; j<=13;j++)
{
cplex.output().println("x["+i+"]["+j+"]["+k+"]= "+solution_f[i][j][k]);
}
}

}

}







A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 mai 2014 à 07:54
Bonjour,

preval[i][j][k] =cplex.getValue( z[i][j][k][p])

Le NuillPointerException peut venir de plusieurs endroits ici, il faut faire des tests pour identifier le problème :

if (preval==null)
    throw new NullPointerException("preval is null");
if (preval[i]==null)
    throw new NullPointerException("preval["+i+"] is null");
if (preval[i][j]==null)
    throw new NullPointerException("preval["+i+"]["+j+"] is null");
if (cplex==null)
    throw new NullPointerException("cplex is null");
if (z==null)
    throw new NullPointerException("z is null");
if (z[i]==null)
    throw new NullPointerException("z["+i+"] is null");
if (z[i][j]==null)
    throw new NullPointerException("z["+i+"]["+j+"] is null");
if (z[i][j][k]==null)
    throw new NullPointerException("z["+i+"]["+j+"]["+k+"] is null");
0