Exemple #1
0
void DebugAnalysisTest(S_BOARD *pos, S_SEARCHINFO *info) {

	FILE *file;
    file = fopen("lct2.epd","r");
    char lineIn [1024];

	info->depth = MAXDEPTH;
	info->timeset = TRUE;
	int time = 1140000;


    if(file == NULL) {
        printf("File Not Found\n");
        return;
    }  else {
        while(fgets (lineIn , 1024 , file) != NULL) {
			info->starttime = GetTimeMs();
			info->stoptime = info->starttime + time;
			ClearHashTable(pos->HashTable);
            ParseFen(lineIn, pos);
            printf("\n%s\n",lineIn);
			printf("time:%d start:%d stop:%d depth:%d timeset:%d\n",
				time,info->starttime,info->stoptime,info->depth,info->timeset);
			SearchPosition(pos, info);
            memset(&lineIn[0], 0, sizeof(lineIn));
        }
    }
}
Exemple #2
0
void ComplexMesh::FreeMemory()
{
    _Vertices.FreeMemory();
    _Triangles.FreeMemory();
    _HalfEdges.FreeMemory();

    for(UINT i = 0; i < _FullEdges.Length(); i++)
    {
        delete _FullEdges[i];
    }
    _FullEdges.FreeMemory();
    ClearHashTable();
}
Exemple #3
0
int setoption(char *input, ENGINE_STATE *stat)
{
  int val = 0;
  if (sscanf(input, "setoption name Hash value %i", &val)) {
    DeleteTable(&hash_table);
    DeletePawnTable(&pawn_table);
    if (AllocPawnTable(&pawn_table, 0.2*val) == 0) return 0;
    if (AllocTable(&hash_table, 0.8*val) == 0) return 0;
    ClearHashTable(&hash_table);
    ClearPawnTable(&pawn_table);
  } else if (sscanf(input, "setoption name Contempt value %i", &val)) {
    stat->control->contempt = val;
    printf("contempt: %i\n", stat->control->contempt);
  }
  return 1;
}
Exemple #4
0
// Only clear those configs which are not dead
// seems I implemented, but did not used it
// find out if it really works ???
void ResetHashTable()
{
//#ifdef USE_OWN_CACHE
    ClearHashTable();
//#else
 /*   int i;
	for (i=0;i<HASHTABLESIZE;i++)
		if (hashTable[i])
			if (hashTable[i]->status!=STATUS_DEAD)
			{
    			delete hashTable[i];
	    		hashTable[i] = NULL;
				usedconfiglength--;
			}
    solution_count = 0;
	solution_length = 0;
#endif*/
  
}
Exemple #5
0
void InitHashTable(S_HASHTABLE *table, const int MB) {

    int HashSize = 0x100000 * MB;
    table->numEntries = HashSize / sizeof(S_HASHENTRY);
    table->numEntries -= 2;

    if(table->pTable!=NULL) {
        free(table->pTable);
    }

    table->pTable = (S_HASHENTRY *) malloc(table->numEntries * sizeof(S_HASHENTRY));
    if(table->pTable == NULL) {
        printf("Hash Allocation Failed, trying %dMB...\n",MB/2);
        InitHashTable(table,MB/2);
    } else {
        ClearHashTable(table);
        printf("HashTable init complete with %d entries\n",table->numEntries);
    }

}
Exemple #6
0
int main(int argc, char *argv[])
{
  BOARD main_board;
  InitBoard(&main_board);
  ReadFEN(STARTPOS, &main_board);
  
  CONTROL engine_control;
  engine_control.stop = 1;
  
  ENGINE_STATE engine = {&main_board, &engine_control};
  
  if (AllocTable(&hash_table, 0.8*TABLESIZE) == 0) {
    printf("Not enough memory\n");
    return 1;
  }
  ClearHashTable(&hash_table);
  
  if (AllocPawnTable(&pawn_table, 0.2*TABLESIZE) == 0) {
    printf("Not enough memory\n");
    return 1;
  }
  ClearPawnTable(&pawn_table);
  
  setvbuf(stdin, 0, _IONBF, 0);
  setvbuf(stdout, 0, _IONBF, 0);
  fflush(NULL);
  char input[BUFFER];

  while (fgets(input, BUFFER, stdin)) {
    if (!Command(input, &engine)) {
      break;
    }  
    memset(input, 0, BUFFER);
  }
  
  DeleteTable(&hash_table);
  DeletePawnTable(&pawn_table);
  return 0;
}
Exemple #7
0
void Init()
{
	ClearHashTable();
}
Exemple #8
0
// 主搜索函数
int SearchMain ( void ) {
	// 特殊情况
	MoveSortStruct mvsort;
	int nMoveNum = mvsort.InitMove ();
	if ( nMoveNum == 0 ) { // 无着法
		printf ( "bestmove a0a1 resign\n" );
		fflush ( stdout );
		return 0;
	}
	else if ( nMoveNum == 1 ) { // 唯一着法
		printf ( "bestmove %s\n", MoveIntToStr(mvsort.move[0]).c_str() );
		fflush ( stdout );
		return mvsort.move[0];
	}
	if ( pos.IsDraw() ) { // 和局
		printf ( "bestmove a0a1 draw\n" );
		fflush ( stdout );
		// 注意不要return
	}

	// 初始化
	ClearHistoryTable ();
	ClearHashTable ();
	ClearHashTableQC ();
	InitBeginTime ( SEARCH_TOTAL_TIME );

	// 迭代加深搜索
	printf("depth   time    nNode  rBeta");
	for ( int i = 0; i < 3; i ++ ) {
		printf("   bvl[%d]  bmv[%d]", i, i);
	}
	printf("\n");
	fflush ( stdout );
	int lastbvl[nBest], lastbmv[nBest];
	ClearBmvBvl ( lastbmv, lastbvl );
	for ( int depth = 1; /*depth <= ?*/; depth ++ ) {
		InitBeginTime ( THIS_SEARCH_TIME );
		InitSearchStruct ();
		SearchAlphaBeta ( depth, - MATE_VALUE, MATE_VALUE );

		if ( TimeOut() ) {
			CopyBmvBvl ( Search.bmv, Search.bvl, lastbmv, lastbvl );
			break;
		}
		else {
			CopyBmvBvl ( lastbmv, lastbvl, Search.bmv, Search.bvl );
		}

		printf( "%5d  %.2fs  %7d    %2.0f%%", depth, TimeCost(SEARCH_TOTAL_TIME), Search.nNode, 100.0*Search.nBeta/Search.nNode);
		for ( int i = 0; i < 3; i ++ ) {
			printf("   %6d    %s", Search.bvl[i], MoveIntToStr(Search.bmv[i]).c_str());
		}
		printf("\n");
		fflush ( stdout );

		if ( Search.bvl[0] <= - BAN_VALUE || Search.bvl[0] >= BAN_VALUE) {
			break;
		}
		if ( Search.bvl[1] <= - BAN_VALUE || Search.bmv[1] == 0 ) {
			break;
		}
	}
	printf ( "totaltime: %.2fs\n", TimeCost(SEARCH_TOTAL_TIME) );
	fflush ( stdout );

	// 输出最优着法
	if ( Search.bmv[0] == 0 || Search.bvl[0] <= - BAN_VALUE ) {
		printf ( "bestmove a0a1 resign\n" ); // 认输
		fflush ( stdout );
		return 0;
	}
	else {
		printf ( "bestmove %s\n", MoveIntToStr(Search.bmv[0]).c_str() );
		fflush ( stdout );
		return Search.bmv[0];
	}
}
/* virtual */
OpSyncDataHashedCollection::~OpSyncDataHashedCollection()
{
	ClearHashTable();
}
void OpSyncDataHashedCollection::SetOOM()
{
	OP_NEW_DBG("OpSyncDataHashedCollection::SetOOM()", "sync");
	ClearHashTable();
	m_oom = true;
}
Exemple #11
0
int ucinewgame(char *input, ENGINE_STATE *stat)
{
  ClearHashTable(&hash_table);
  ClearPawnTable(&pawn_table);
  return 1;
}
Exemple #12
0
void ComplexMesh::Load(const BaseMesh &Mesh)
{
    FreeMemory();
    
    _Vertices.Allocate(Mesh.VertexCount());
    _Triangles.Allocate(Mesh.FaceCount());
    _HalfEdges.Allocate(Mesh.FaceCount() * 3);
    _FullEdges.FreeMemory();

    for(UINT i = 0; i < _Vertices.Length(); i++)
    {
        _Vertices[i].Pos() = Mesh.Vertices()[i].Pos;
        _Vertices[i].TexCoords() = Mesh.Vertices()[i].TexCoord;
        _Vertices[i].Boundary() = false;
        _Vertices[i]._Index = i;
    }

    InitHashTable(_Vertices.Length());

    for(UINT TriangleIndex = 0; TriangleIndex < _Triangles.Length(); TriangleIndex++)
    {
        Triangle &CurTriangle = _Triangles[TriangleIndex];
        UINT LocalIndices[3];
        LocalIndices[0] = Mesh.Indices()[TriangleIndex * 3 + 0];
        LocalIndices[1] = Mesh.Indices()[TriangleIndex * 3 + 1];
        LocalIndices[2] = Mesh.Indices()[TriangleIndex * 3 + 2];
        CurTriangle._Index = TriangleIndex;
        for(UINT LocalEdgeIndex = 0; LocalEdgeIndex < 3; LocalEdgeIndex++)
        {
            Vertex *SearchV[2];

            CurTriangle._HalfEdges[LocalEdgeIndex] = &_HalfEdges[TriangleIndex * 3 + LocalEdgeIndex];
            CurTriangle._Vertices[LocalEdgeIndex] = &_Vertices[LocalIndices[LocalEdgeIndex]];
            _HalfEdges[TriangleIndex * 3 + LocalEdgeIndex]._NextEdge = &_HalfEdges[TriangleIndex * 3 + (LocalEdgeIndex + 1) % 3];

            SearchV[0] = &_Vertices[LocalIndices[(LocalEdgeIndex + 1) % 3]];
            SearchV[1] = &_Vertices[LocalIndices[(LocalEdgeIndex + 2) % 3]];
            if(SearchV[0]->Index() > SearchV[1]->Index())
            {
                Utility::Swap(SearchV[0], SearchV[1]);
            }
            FullEdge &Target = FindFullEdge(SearchV);
            if(Target != FullEdge::NotFound)
            {
                PersistentAssert(Target.GetTriangle(1) == Triangle::Boundary, "Duplicate edge; 2-manifold criterion violated.");
                //PersistentAssert(Target.GetTriangle(1) == Triangle::Boundary,
                //                 String("Duplicate edge; 2-manifold criterion violated: ") + String(SearchV[0]->Index()) + String(", ") + String(SearchV[1]->Index()));

                _HalfEdges[TriangleIndex * 3 + LocalEdgeIndex]._AcrossEdge = &Target;
                Target._Triangles[1] = &CurTriangle;
            }
            else
            {
                FullEdge *NewEdge = new FullEdge;
                Assert(NewEdge != NULL, "Out of memory");
                NewEdge->_Index = _FullEdges.Length();
                NewEdge->_Triangles[0] = &CurTriangle;
                NewEdge->_Triangles[1] = &Triangle::Boundary;
                NewEdge->_Vertices[0] = SearchV[0];
                NewEdge->_Vertices[1] = SearchV[1];
                _HalfEdges[TriangleIndex * 3 + LocalEdgeIndex]._AcrossEdge = NewEdge;

                _FullEdges.PushEnd(NewEdge);
                HashEdge(*NewEdge);
            }
        }
    }

    for(UINT TriangleIndex = 0; TriangleIndex < _Triangles.Length(); TriangleIndex++)
    {
        Triangle &CurTriangle = _Triangles[TriangleIndex];
        for(UINT AdjacentTriangleIndex = 0; AdjacentTriangleIndex < 3; AdjacentTriangleIndex++)
        {
            Triangle &AdjTriangle = CurTriangle.GetNeighboringTriangle(AdjacentTriangleIndex);
        }
    }

    ClearHashTable();
    
    for(UINT i = 0; i < _FullEdges.Length(); i++)
    {
        if(_FullEdges[i]->Boundary())
        {
            _FullEdges[i]->GetVertex(0).Boundary() = true;
            _FullEdges[i]->GetVertex(1).Boundary() = true;
            _FullEdges[i]->OrientMatchingBoundary();
        }
    }

    PrepareTopology();

    /*if(!Oriented())
    {
        Orient();
    }
    PersistentAssert(Oriented(), "Mesh not oriented");*/

}
Exemple #13
0
void ComplexMesh::InitHashTable(UINT Size)
{
    ClearHashTable();
    _HashTable.Allocate(Size);
}