2012-02-08 5 views
0

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()); 
     } 
    } 

내가 여기 뭔가 잘못하고, 또는 내가이 양을 처리하기 위해 다른 것을 사용한다 건가요 데이터? 감사.

답변

0

기본적으로 JVM은 64MB 힙 공간으로 시작하므로 아래 매개 변수를 전달하여이 양을 늘릴 수 있습니다.

java -Xmx1024m YOUR_CLASS 

이것은 1024MB 힙 공간을 메모리에 제공하므로 필요에 따라 메모리 양을 변경할 수 있습니다.

NetBeans를 사용하는 경우 Netbeans은 자동으로 힙 공간을 확장하지 않으므로 다음 단계에 따라이를 수행 할 수 있습니다. 당신은 당신의 프로젝트를 실행할 수

이제 확인을>

클릭 한 다음 VM 옵션에 -Xmx256m 3 - 추가 사용자 정의 -

1 마우스 오른쪽 단추로 구성을 설정하는 프로젝트

2 이동 클릭 사용자 정의 힙 공간.

+0

저는이 프로젝트에 netbeans를 사용하고 있습니다. 저의 이해에 따라 자동으로 힙 공간을 시스템 RAM의 비율로 확장합니다. 시스템 램의 2GB 정도가되어야합니다. 내 강사가 그럴 것입니다. 코드에서 이것을 처리해야합니다. 어떻게 감사 할 지에 대한 제안. – dragoncmd

+0

답변을 다시 확인할 수 있습니다. NetBeans 지침을 추가했습니다. – emin

+0

예, 처음 게시 한 후 이후로 혼란스러워했습니다. 내 코드에서 뭔가 잘못 될 것이라고 생각하고 있습니다. 제 친구 중 누구도 비슷한 문제가 없습니다. 나는 가서 논리를 다시 점검 할 것이다. – dragoncmd