AI 클래스 용 8 타일 슬라이딩 퍼즐을 해결하는 프로그램을 작성 중입니다. 이론적으로 이것은 매우 쉽지만 생성 된 노드 상태의 수는 꽤 큽니다 (약 18 만 개 정도). 우리는 클래스에서 다른 휴리스틱 함수를 비교하기 때문에 코드는 매우 비효율적 인 일부 함수를 처리 할 수 있어야합니다. 자바의 PriorityQueue 클래스를 사용할 때 "OutOfMemoryError : Java heap space"가 발생합니다. Heres는 내 솔버 기능을 withing에 관련 코드 (오류가 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를 사용하고 있습니다. 저의 이해에 따라 자동으로 힙 공간을 시스템 RAM의 비율로 확장합니다. 시스템 램의 2GB 정도가되어야합니다. 내 강사가 그럴 것입니다. 코드에서 이것을 처리해야합니다. 어떻게 감사 할 지에 대한 제안. – dragoncmd
답변을 다시 확인할 수 있습니다. NetBeans 지침을 추가했습니다. – emin
예, 처음 게시 한 후 이후로 혼란스러워했습니다. 내 코드에서 뭔가 잘못 될 것이라고 생각하고 있습니다. 제 친구 중 누구도 비슷한 문제가 없습니다. 나는 가서 논리를 다시 점검 할 것이다. – dragoncmd