hallo!
ich will einen kompletten suchbaum bis zu einer bestimmten tiefe aufbauen, den man auch "anfassen" kann. in jedem knoten soll die gesamte spielsituation stehen, also sozusagen das ganze "spielbrett" (arraylist)
jetzt hab ich nur ein problem! selbst bei 36 (6*6) feldern macht er nach suchtiefe >3 schluss und sagt "out of heapspace".
Doch wundert mich das, weil ich habe mal einen suchbaum mit suchtiefe 3 (was ja geht) vollständig aufschreiben lassen und abgespeichert. die datei ist nur 9,15 MB groß und gepackt sogar nur 155KB! ich habe 512MB ram und würd irgendwie gerne über suchtiefe 3 hinauskommen. wie kann ich das realisieren? hier mein source
ein einzelnder zug (knoten)
und hier meine "zentrale" ^^
einmal addpossiblemoves(zug) (erste suchtiefe) ausführen und dann nochmal addP_m_tiefe(zug, int tiefe) .
wie krieg ich es also hin, dass ich den baum weiter aufbauen kann??
mfg
don house
ich will einen kompletten suchbaum bis zu einer bestimmten tiefe aufbauen, den man auch "anfassen" kann. in jedem knoten soll die gesamte spielsituation stehen, also sozusagen das ganze "spielbrett" (arraylist)
jetzt hab ich nur ein problem! selbst bei 36 (6*6) feldern macht er nach suchtiefe >3 schluss und sagt "out of heapspace".
Doch wundert mich das, weil ich habe mal einen suchbaum mit suchtiefe 3 (was ja geht) vollständig aufschreiben lassen und abgespeichert. die datei ist nur 9,15 MB groß und gepackt sogar nur 155KB! ich habe 512MB ram und würd irgendwie gerne über suchtiefe 3 hinauskommen. wie kann ich das realisieren? hier mein source
ein einzelnder zug (knoten)
Code:
public class zug implements Serializable{
ArrayList <zug> Nachfolger;
ArrayList <Integer> situation;
int position;
int zugwert;
int color;
zug vater;
zug(int pos, int col)
{
color=col;
position=pos;
situation= new ArrayList<Integer>();
for(int i=0; i<36; i++){situation.add(0);}
situation.set(pos, col);
zugwert=-100;
Nachfolger = new ArrayList<zug>();
vater=null;
}
public void addZug(zug parent, zug children)
{
parent.Nachfolger.add(children);
children.vater=parent;
}
public void setZugwert(int w)
{
this.zugwert=w;
}
public zug getVater(zug z)
{
return vater;
}
public zug getKindX(int x)
{
return Nachfolger.get(x);
}
}
und hier meine "zentrale" ^^
Code:
public class zentrale {
int farbe;
zentrale()
{
}
public void addPossibleMoves(zug vater)
{
if(vater.color==1){farbe=2;} if(vater.color==2){farbe=1;}
for(int i=0; i<36; i++)
{
if(vater.situation.get(i)==0)
{
zug kind=new zug(i, farbe);
vater.addZug(vater, kind);
ArrayList<Integer> clone = (ArrayList<Integer>) vater.situation.clone();
kind.situation=clone;// situation vater= sit kind
kind.situation.set(i, farbe);
}
}
}
public void addP_m_tiefe(zug vater, int tiefe)
{
if(tiefe>0)
{
for(int i=0; i<=vater.Nachfolger.size()-1; i++)
{
zug n=vater.Nachfolger.get(i);
//System.out.println("Nachfolger erhalten: Zug "+n.position+" Tiefe "+tiefe+" i="+i);
addPossibleMoves(n);
//System.out.println("possible moves hinzugefügt! "+i);
addP_m_tiefe(n, tiefe-1);
System.out.println(" Rekursion durchgeführt");
}
}
}
}
einmal addpossiblemoves(zug) (erste suchtiefe) ausführen und dann nochmal addP_m_tiefe(zug, int tiefe) .
wie krieg ich es also hin, dass ich den baum weiter aufbauen kann??
mfg
don house