public static double[][] generateRandomSymetricProbabilistMatrix(int n, int max_par_ligne) {
        double[][] matrix = new double[n][n];
        // la valeur maximum que peut prendre la somme des colonnes pour chaque ligne
        int[] max_ligne = new int[n];
        List<Integer> lignesNonVide = new ArrayList<>();
        for (int i = 0; i < max_ligne.length; i++) {
            max_ligne[i] = max_par_ligne;
            lignesNonVide.add(i);
        }

        while (!lignesNonVide.isEmpty()) {

            int min = 0;
            Integer i = lignesNonVide.get(rand.nextInt(lignesNonVide.size()));
            Integer j = lignesNonVide.get(rand.nextInt(lignesNonVide.size()));
            min = Math.min(max_ligne[i], max_ligne[j]);
            int increment = rand.nextInt(min + 1);
//            System.out.println("increment : " + increment);
            max_ligne[i] -= increment;
            if (i != j) {
                max_ligne[j] -= increment;
            }

            if (max_ligne[i] == 0) {
                lignesNonVide.remove(i);
            }
            if (max_ligne[j] == 0) {
                lignesNonVide.remove(j);
            }
            matrix[i][j] += increment;
            if (i != j) {
                matrix[j][i] += increment;
            }
//            System.out.println("");
//            Myst.afficherTableau(max_ligne);
//            System.out.println("\n" + lignesNonVide + "\n");
//            Myst.afficherMatrice(matrix);
//            System.out.println("----------------------");
        }

        // verification , à commenter si ça fonctionne
//        for (int i = 0; i < n; i++) {
//            double somme = 0;
//            for (int j = 0; j < n; j++) {
//                somme += matrix[i][j];
//
//            }
//            if (somme != max_par_ligne) {
//                System.err.println("la somme de la ligne n'est pas egale à max_par_ligne : " + somme + " != " + max_par_ligne);
////                    System.exit(-9);
//            }
//        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] /= (double) max_par_ligne;
            }
        }

        return matrix;
    }