Я пишу программу для решения головоломки с 8 плитами для класса AI. в теории это довольно просто, но число генерируемых состояний узлов довольно велико (около 180 000 или около того). Мы сравниваем различные эвристические функции в классе, поэтому мой код должен иметь возможность обрабатывать даже некоторые очень неэффективные функции. Я использую класс OutOfMemoryError: Java heap space при использовании класса PriorityQueue Java. Heres соответствующий код жгутов мой решатель функции: (ошибка на openList.add (темп); линия)OutOfMemoryError во время эвристического поиска
public void solve(char[] init,int searchOrder)
{
State initial = new State(init,searchOrder); //create initial state
openList = new PriorityQueue<State>(); //create open list
closedList = new LinkedList<State>(); // create closed list
generated = new HashSet(); //Keeps track of all nodes generated to cut down search time
openList.add(initial); //add initial state to the open list
State expanded,temp = null,solution = null; //State currently being expanded
int nodesStored = 0, nodesExpanded = 0;
boolean same; //used for checking for state redundancy
TreeGeneration:
while(openList.size() > 0)
{
expanded = openList.poll();
closedList.addLast(expanded);
for (int k = 0; k < 4; k++)
{
if (k == 0)
{
temp = expanded.moveLeft();
}
else if (k == 1)
{
temp = expanded.moveRight();
}
else if (k == 2)
{
temp = expanded.moveAbove();
}
else
{
temp = expanded.moveBelow();
}
if(temp.isSolution())
{
solution = temp;
nodesStored = openList.size() + closedList.size();
nodesExpanded = closedList.size();
break TreeGeneration;
}
if(!generated.contains(temp))
{
// System.out.println(temp.toString());
openList.add(temp); // error here
generated.add(temp);
}
// System.out.println(openList.toString());
}
}
Могу ли я сделать что-то здесь не так, или я должен использовать что-то еще, чтобы справиться с этим количество данные? Благодарю.
Я использую netbeans для этого проекта, который, по моему пониманию, автоматически масштабирует кучу пространства до процентного значения системного бара, который должен быть уже 2gb или около того на моем comp, мои инструкторы comp, я уверен, будут меньше, поэтому Мне действительно нужно обработать это в коде. Предложения относительно того, как будут оцениваться. – dragoncmd
Вы можете снова проверить ответ, я добавил инструкции NetBeans – emin
Да, возиться с теми, с тех пор как вы впервые отправили, я думаю, что я что-то не так в коде, ни один из моих одноклассников не имеет подобных проблем. Я собираюсь пройти и снова проверить свою логику. – dragoncmd