private Field randomGrid() {

        // Length of the grid
        int length = Integer.parseInt(Config.getProperty("Grid.Length"));

        // Width of the grid
        int width = Integer.parseInt(Config.getProperty("Grid.Width"));

        // New grid
        Field s = new Field(length, width);

        // List of subject
        List<Subject> l = new ArrayList<Subject>();

        String str;

        // Generates a number of subject in function of the ratio
        for (Type t : Type.values()) {

            str = t.toString();

            // Ratio of the actual subject
            int ratio = Integer.parseInt(Config.getProperty("Ratio"
                    + str.substring(str.lastIndexOf("."))));

            // New subject add to the list
            for (int i = 0; i < length * width * ratio / 100.; i++) {

                try {

                    l.add((Subject) Class.forName(t.toString()).newInstance());
                } catch (InstantiationException | IllegalAccessException
                        | ClassNotFoundException e) {

                    e.printStackTrace();
                }
            }
        }

        int size = l.size();

        // Fills the list with empty spaces
        for (int i = 0; i < length * width - size; i++) {

            l.add(null);
        }

        // Shuffles the list
        Collections.shuffle(l);

        // Fills the grid
        for (int i = 0; i < width; i++) {

            for (int j = 0; j < length; j++) {

                s.place(l.get(j * width + i), j, i);
            }
        }

        return s;
    }