CParameterSearch::CParameterSearch(svm_problem* pProb, svm_parameter* pSvmParam, string strFilename)
{
	if(!pProb || !pSvmParam)
		return;
	
	m_pOA = NULL;
	m_pofs = NULL;
	m_strFilename = strFilename;
	
	ResetSerialization();
	
	m_pProblem = pProb;
	m_pSvmParam = pSvmParam;

	m_rangeParameters.fParam1Min = -15;
	//m_rangeParameters.fParam1Max = -1;
	m_rangeParameters.fParam1Max = 3;
	m_rangeParameters.fParam1Step = 4;
	m_rangeParameters.bParam1UseLog = true;
	m_rangeParameters.fParam1RefinementFactor = 2;
	m_rangeParameters.fParam2Min = -13;
	//m_rangeParameters.fParam2Max = -1;
	m_rangeParameters.fParam2Max = -5;
	m_rangeParameters.fParam2Step = 4;
	m_rangeParameters.bParam2UseLog = true;
	m_rangeParameters.fParam2RefinementFactor = 2;
	
	ParameterResult* pResult = new ParameterResult;

	const RangeParameters tempRP = m_rangeParameters;
	*m_pOA << tempRP;
	m_pofs->flush();
	
	SearchRange( pResult, m_rangeParameters);
	
	// semi-infinite, breakable loop
	while( pResult = GetNextResult())
	{			
		RangeParameters Params;
		GetRefinedParameters(pResult->nLevel, pResult->fParam1, pResult->fParam2, Params);
		if(!SearchRange( pResult, Params))
			break;
	}
}
int main() {
    std::vector<int> result;
    int a[] = {5, 7, 7, 8, 8, 10};
    result = SearchRange(a, 6, 7);
    assert(result[0] == 1);
    assert(result[1] == 2);
    result = SearchRange1(a, 6, 7);
    assert(result[0] == 1);
    assert(result[1] == 2);
    result = SearchRange(a, 6, 8);
    assert(result[0] == 3);
    assert(result[1] == 4);
    result = SearchRange1(a, 6, 8);
    assert(result[0] == 3);
    assert(result[1] == 4);
    result = SearchRange(a, 6, 9);
    assert(result[0] == -1);
    assert(result[1] == -1);
    result = SearchRange1(a, 6, 9);
    assert(result[0] == -1);
    assert(result[1] == -1);
    return 0;
}
// Description:
//
// Arguments:
//
// Return:
//
bool CPersonalRangeSignaling::AddRangeSignal( float fRadius, float fBoundary, const char* sSignal, IAISignalExtraData *pData /*=NULL*/ )
{
  CRY_ASSERT( m_bInit == true );
  CRY_ASSERT( sSignal != NULL );
  CRY_ASSERT( fRadius > 0.5f );
  CRY_ASSERT( fBoundary >= 0.0f );

  bool      bRet = true;
  CRange*   pRange = SearchRange( sSignal, m_vecRanges );

  if( pRange == NULL )
  {
    pRange = new CRange( this );
    m_vecRanges.push_back( pRange );
  }

  pRange->Init( fRadius, fBoundary, sSignal, pData );
	std::sort( m_vecRanges.begin(), m_vecRanges.end(), &CompareRange ); // std::less is properly overridden
	
  return( bRet );
}
Esempio n. 4
0
int CSubDictionary::Search(const char* pszWord, int nBeg, int nEnd, int nStep)
{
	SearchRange(pszWord[nStep], nStep, &nBeg, &nEnd);

	if (nBeg == nEnd) {
		if (nBeg == -1) { // haven't found
			return FALSE;
		}
		if (!strcmp(pszWord, m_vecWords[nBeg])) {
			return TRUE;
		}
	}

	if (pszWord[nStep + 1] == '\0') {
		if (!strcmp(pszWord, m_vecWords[nBeg])) {
			return TRUE;
		}
		return FALSE;
	}

	return Search(pszWord, nBeg, nEnd, nStep + 1);
}
Esempio n. 5
0
int main(int argc, char *argv[]){
	//double radius;
	int k = 4, L = 5;
//	char *output = "out.txt", *input = "in.txt", *query = "query.txt";
	char output[512];
	char input[512];
	char query[512];
	int outputFlag = 0;
	int inputFlag = 0;
	int queryFlag = 0;

	FILE* inputFile;
	FILE* queryFile;
	FILE* outputFile;

	size_t lineSize=0;
	size_t lineLen=0;

	LSH* lsh;

	char* lineBuff=NULL;
	char secBuff1[256];
	char secBuff2[256];

	srand((unsigned)time(NULL));

	memset(input,'\0',sizeof(input));
	memset(output,'\0',sizeof(output));
	memset(query,'\0',sizeof(query));

	int c;
	opterr = 0;

	while ((c = getopt (argc, argv, "k:L:d:o:q:")) != -1)
		switch (c)
		{
			case 'k':
				k = atoi(optarg);
				break;
			case 'L':
				L = atoi(optarg);
				break;
			case 'd':
				inputFlag = 1;
				strcpy(input,optarg);
				break;
			case 'o':
				outputFlag = 1;
				strcpy(output,optarg);
				break;
			case 'q':
				queryFlag = 1;
				strcpy(query,optarg);
				break;
			case '?':
				printf("wrong input\n");
				return 1;
			default:
				printf("abort\n");
				//abort ();
		}

	printf("input %s, output %s, query %s, k = %d, L = %d\n",input, output, query, k, L);

	printf("Welcome.\n");
	if ( !inputFlag)
	{
		printf("Please input the data file path:\n");
		scanf("%s", input);
	}


	memset(secBuff1,'\0',sizeof(secBuff1));
	memset(secBuff2,'\0',sizeof(secBuff2));

	if((inputFile=fopen(input,"r"))==NULL){
		perror("File specified could not be opened(inp)\n");
		exit(-1);
	}

	if((lineLen=getline(&lineBuff, &lineSize, inputFile))==-1) {

		free(lineBuff);
		lineBuff=NULL;
		exit(-1);
	}

	if(sscanf(lineBuff,"%s %s",secBuff1,secBuff2)<2){
		perror("Malformed file - Exiting...\n");
		exit(-1);
	}

//	printf("%s\n",secBuff2);

	/*
	 * Asserting the correct functions for input type
	 * -->	data parsing
	 * -->	data compare / functions
	 * --> 	select corresponding random function
	 * -->	other functions
	 */

	if(strcmp(secBuff2,"hamming")==0){

		data.distance=Hamming;
		data.inRange=InRangeHamming;
		data.print=Print;
		data.readData=ReadDataHamming;
		data.readQueries=ReadQueriesHamming;
		data.G=GHamming;
		data.getFirst = GetFirstHamming;
		data.getNext = GetNextHamming;
		data.getFirstQuery=GetFirstQueryHamming;
		data.getNextQuery=GetNextQueryHamming;
		data.initStruct = InitStructHamming;
		data.bruteForce = BruteForceANNHamming;
		data.bruteForceRange = BruteForceInRangeHamming;
		data.destroyStruct = DestroyStructHamming;
		data.destroyInput = DestroyInputHamming;
		data.destroyValue = DestroyValueHamming;
	}
	else if(strcmp(secBuff2,"vector")==0){

		memset(secBuff1,'\0',sizeof(secBuff1));
		memset(secBuff2,'\0',sizeof(secBuff2));
		memset(lineBuff,'\0',sizeof(lineBuff));

		if((lineLen=getline(&lineBuff, &lineSize, inputFile))==-1) {
			//something went wrong
			free(lineBuff);
			lineBuff=NULL;
			exit(-1);
		}
		if(sscanf(lineBuff,"%s %s",secBuff1,secBuff2)<2){
			perror("Malformed file - Exiting...\n");
			exit(-1);
		}

		if(strcmp(secBuff2,"euclidean")==0){
			data.distance=Euclidean;
			data.inRange=InRangeEuclidean;
			data.print=Print;
			data.readData=ReadDataEuclidean;
			data.readQueries=ReadQueriesEuclidean;
			data.G=FEuclidean;
			data.getFirst = GetFirstEuclidean;
			data.getNext = GetNextEuclidean;
			data.getFirstQuery=GetFirstQueryEuclidean;
			data.getNextQuery=GetNextQueryEuclidean;
			data.initStruct = InitStructEuclidean;
			data.bruteForce = BruteForceANNEuclidean;
			data.destroyStruct = DestroyStructEuclidean;
			data.destroyInput = DestroyInputEuclidean;
			data.destroyValue = DestroyValueEuclidean;
		}

	}
	else if(strcmp(secBuff2,"matrix")==0){

		data.distance = DistanceMatrixDistance;
		data.inRange = InRangeDistanceMatrix;
		data.print=Print;
		data.readData=ReadDataDistanceMatrix;
		data.readQueries = ReadQueriesDistanceMatrix;
		data.G = GDistanceMatrix;
		data.getFirst = GetFirstDistanceMatrix;
		data.getNext = GetNextDistanceMatrix;
		data.getFirstQuery=GetFirstQueryDistanceMatrix;
		data.getNextQuery=GetNextQueryDistanceMatrix;
		data.initStruct = InitStructDistanceMatrix;
		data.bruteForce = BruteForceANNDistanceMatrix;
		data.destroyStruct = DestroyStructDistanceMatrix;
		data.destroyInput = DestroyInputDistanceMatrix;
		data.destroyValue = DestroyValueDistanceMatrix;
	}
	else if(strcmp(secBuff2,"function")==0){
	
		data.distance = DistanceFunction;
		data.inRange = InRangeFunction;
		data.print=Print;
		data.readData=ReadDataFunction;
		data.readQueries = ReadQueriesFunction;
		data.G = GFunction;
		data.getFirst = GetFirstFunction;
		data.getNext = GetNextFunction;
		data.getFirstQuery=GetFirstQueryFunction;
		data.getNextQuery=GetNextQueryFunction;
		data.initStruct = InitStructFunction;
		data.bruteForce = BruteForceANNFunction;
		data.destroyStruct = DestroyStructFunction;
		data.destroyInput = DestroyInputFunction;
		data.destroyValue = DestroyValueFunction;
	}

	data.print=test;
	data.readData(inputFile, k);
	
	BuildLSH(&lsh,L,k);

	if ( !queryFlag)
	{
		printf("Please input the query file path:\n");
		scanf("%s", query);
	}
	if ( !outputFlag)
	{
		printf("Please input the output file path:\n");
		scanf("%s", output);
	}

	if((outputFile=fopen(output,"w"))==NULL){
		perror("File specified could not be opened(outp)\n");
		exit(-1);
	}
	if((queryFile=fopen(query,"r"))==NULL){
		perror("File specified could not be opened(quer)\n");
		exit(-1);
	}

	data.readQueries(queryFile);

	value* q=data.getFirstQuery();

	double avTimeLSH=0.0,avDistLSH=0.0,avTimeBrut=0.0;
	int stats=1;
	int dataSet=0;

	while(q!=NULL){

		int tLSH=0,tTRUE=0;

		double distance=0.0;
		double realDist=0.0;

		List nn;
		List allRange,resList;

		value *r = NULL;

		tLSH=GetClockTimeInNanoSec();
		distance = SearchANN(lsh, *q, &r);
		tLSH=GetClockTimeInNanoSec()-tLSH;

		avTimeLSH+=tLSH;

		InitList(&nn,sizeof(value),test,data.distance, NULL);

		tTRUE = GetClockTimeInNanoSec();
		realDist = data.bruteForce(*q,nn);
		tTRUE = GetClockTimeInNanoSec()-tTRUE;

		avTimeBrut+=tTRUE;
		avDistLSH+=(distance-realDist);

		//PrintList(nn);

		InitList(&allRange,sizeof(value),test,data.distance, NULL);
		InitList(&resList,sizeof(value),test,data.distance, NULL);

		SearchRange(lsh, *q, data.radius, allRange);
		DeduplicateList(allRange,resList);


		fprintf(outputFile,"Query: %s\n",q->name);

		fprintf(outputFile,"R-near Neighbors:\n");
		PrintListFile(resList,outputFile);

		if (r == NULL)
			fprintf(outputFile,"NULLLLL\n");
		else{
			fprintf(outputFile,"Nearest Neighbor: ");
			data.print(r,outputFile);
		}

		fprintf(outputFile,"distanceLSH: %f \n distanceTRUE: %f\n",distance ,realDist);
		fprintf(outputFile,"tLSH: ");
		PrintTime(tLSH,outputFile);
		fprintf(outputFile,"\n");
		fprintf(outputFile,"tTRUE: ");
		PrintTime(tTRUE,outputFile);
		fprintf(outputFile,"\n");

		DestroyList( &allRange);
		DestroyList( &resList);
		DestroyList( &nn);
		q=data.getNextQuery();
		dataSet++;
	}
	/**/

	if(stats){
		printf("k\tL\tAvTLSH\t\tAvTReal\t\tAvLSHDeviation(dist)\n");
		printf("%d\t%d\t%f\t%f\t%f\n",k,L,avTimeLSH/(double)dataSet,avTimeBrut/(double)dataSet,avDistLSH/(double)dataSet);
	}

	DestroyLSH(&lsh);
	data.destroyInput();

	fclose(inputFile);
	fclose(outputFile);
	fclose(queryFile);

	free(lineBuff);
	return 0;
}