Frankly this is part of my uni assignment, BUT I have already done quite a bit... so please feel comfortable and keep reading since I am not asking for a cheat sheet or so :) The project is now deployed on my website
Okay, I might have found the reason just minutes ago: array_push() fails after pushing many items in an array. Ridiculously small array capacity???
İlk derinliği 3 ayarlandığında 77 satırlar dizi BLOW UP olmaz, çünkü çalışır; ama 4 bir başlangıç derinliği PHP dizinin kapasitesinin ötesinde daha fazla satır üretecektir (garip, daha önce bu konuda hiç düşünmemiştim).
Array_push () bölümü dışında değerlendirildikten sonra, bu Ağaç bina işlevi, çalışacak 10 + saniye Yani düzeltme birçok öğeleri tutabilir PHP başka bir koleksiyon türü bulmak olacaktır sanırım ... 6 ilk bir derinlik için maliyet .. .
Bir test bu sadece daha fazla yürütme PHP komut dosyası öldüren bir "görünmez" İzin Bellek boyutu bitkin hataya neden olur ötesinde benim şimdiki özyinelemeli ağaç bina fonksiyonu altında, bir dizi depolama izin satır büyük sayı ... kabaca 950 olduğunu gösterir . Ben sadece daha dizisi depolama nesneleri getirerek bu sorunu çözebilirsiniz.
Şimdi soru değişmiştir ve odak yok artık çünkü Yani, aşağıda sözlerini görmezden Lütfen.
The monkey level and rookie level are finished with no bugs(at least I hope so). I encountered a weird problem when implementing the minimax search algorithm in the Veteran level, particularly when trying to build a tree up to N-th depth.
my buildTree function will only work when initial depth is set no greater than 3. It generates 16 tree nodes when initial depth is set to 2, and 77 when set to 3. I reckon the logic works, as you can check that using Fire Bug Console.
Bu fonksiyonun amacı, n adımlar için ai / oyuncu hamle taklit etmektir. Her hareket gameboard üzerinde hücrelerin durumunu değiştirir. Yukarıda belirtilen web sitesine gidin ve bunun için ne olduğunu anlamak yani bir çaylak oyunu.
Say, this function is used for AI. AI takes a move A, then player shall take his/her move B according to AI's move, then so forth... After making a move, certain cells on board need to be flipped. The score function is to evaluate a score based on current gameboard status. When the function finishes, I can get a full list where each row actually represent a node in a Tree, like this :
AI | |-----------| PLAYER PLAYER | | |--------|-----------| |-------|---------| AI AI AI AI AI AI ......................
Aşağıda adamcağız fonksiyon, ona bakarak saat geçirdim ama nedenini bulamıyorum:
function buildTree($gamecells, $depth, $side, $parent)
{
//make copies of the arguments passed.
$currentCells = $gamecells;
$currentDepth = $depth;
$currentSide = $side;
$currentParent = $parent;
$nextMoves = $this->checkForValidMoves($currentCells, $currentSide);
if(count($nextMoves) != 0 ) //can still move on.
{
foreach($nextMoves as $nextMove)
{
$flippedCells = $this->flipCells($currentCells, $nextMove, $side);
$result = $this->getScore($flippedCells, $this->Session->read('aiside'));
$score = $result['score'] - $result['libertyPenalty'];
$parentsTrace = $currentParent.'_'.$nextMove;
if($currentDepth > 1) //currentDepth == 1 means this is a leaf node.
$this->buildTree($this->getGamecellMap($flippedCells), $currentDepth-1,
$this->swapSides($currentSide), $parentsTrace);
array_push($this->movesTree, array
('depth'=>$currentDepth,
'parentTrace'=>$parentsTrace,
'move'=>$nextMove,
'score'=>$score));
}
}
if($currentDepth == 1) //we have traversed all leaf nodes, time to quit.
return;
}
Because I am using PHP + AJAX, my normal way of debugging in PHP (echo some stuff in function) will not work. Plus I am still confusing about what this means when it does work when initial depth is no greater than 3... Can anyone help me out? Any suggestion is much appreciated and thanks a lot in advance!