Пример #1
0
void TabuSearchClass::getNeighbour(int *p, int *q) {
	int n = 0;
	double ran2 = 0.0;
	double ran1 = 0.0;
	copyGene(p, q);
	for (int i = 0; i < G.Nnum; i++) {
		if (p[i] == 1) {
			n++;
		}
	}
	if (n >= G.Cnum) {
		do {
			ran1 = (rand() % n) / (double) n * n;
		} while (p[(int) ran1] != 1);
		q[(int) ran1] = 0;
	} else {

		ran2 = (rand() % Conlength) / (double) Conlength * Conlength;
		if (p[(int) ran2] == 0)
			q[(int) ran2] = 1;
		else
			q[(int) ran2] = 0;

	}
}
Пример #2
0
void TabuSearchClass::BeginSolve() {
	int n;
	bestTabuSearchValue = 0;
	number4Gene = 0;
	initGene();
	copyGene(initNode, bestNode);
	curtEvaluationValue = Evaluat(initNode);
	bestEvauValue = curtEvaluationValue;
	bestNodeNumber = G.chosNum;
	while (number4Gene < MAX_GENERATION) {
		n = 0;
		while (n < neighbourNum) {
			getNeighbour(initNode, tempNode);
			tempEvaluationValue = Evaluat(tempNode);
			if (isTabuTable(tempNode) != 0)
					{
				if (tempEvaluationValue < bestEvauValue) {
					copyGene(tempNode, currenttNode);
					curtEvaluationValue = tempEvaluationValue;
				}

				n++;
			} else if (isTabuTable(tempNode) == 0) {
				if (G.Nnum < 500) {
					if (n == 0) {
						if (tempEvaluationValue
								<= (int) curtEvaluationValue * 1.0005) {
							copyGene(tempNode, currenttNode);
							curtEvaluationValue = tempEvaluationValue;
							n++;
						}
						continue;
					}
				}
				if (tempEvaluationValue < curtEvaluationValue) {
					copyGene(tempNode, currenttNode);
					curtEvaluationValue = tempEvaluationValue;

				}
				n++;
			}
		}
		if (curtEvaluationValue < bestEvauValue) {
			bestTabuSearchValue = number4Gene;
			copyGene(currenttNode, bestNode);
			bestEvauValue = curtEvaluationValue;
			bestNodeNumber = G.chosNum;
		}

		if ((int) clock() / (CLOCKS_PER_SEC /*/ 1000*/) >= 87)
			break;
		number4Gene++;
		copyGene(currenttNode, initNode);
		TabuTableFlush(currenttNode);
	}
}
Пример #3
0
void mkTabFile(char *db, struct genePred *genes, FILE *tabFh)
/* create a tab file to load, optionally adding binning or stripping extended
 * fields if not requested */
{
struct genePred *gene;

for (gene = genes; gene != NULL; gene = gene->next)
    copyGene(db, gene, tabFh);

if (gInvalidCnt > 0)
    {
    if (gSkipInvalid)
        fprintf(stderr, "Warning: skipping %d invalid genePreds\n", gInvalidCnt);
    else
        errAbort("Error: %d invalid genePreds, database unchanged", gInvalidCnt);
    }
}