//遗传算法求解图的最小连通支配集 int findMCDSWithGeneticAlgorithm() { //计算出度最大的节点,把它设为生成初始种群的起始节点 calculateDegree(); int startNode = 0; for (int i = 1; i < countOfNodes; i++) { if (degreeArr[i] > degreeArr[startNode]) { startNode = i; } nodesArr[i] = i; } //生成支配集 for (int i = 0; i < countOfDominatingSets; i++) { createConnectedDominatingSet(countOfNodes, adjacencyMatrix, dominatingSetsArr[i], startNode); calculateCountOfBlackNodes(i); if (isThisGraphCDS(i) == 0) { printf("下标为%2d的个体不是支配集\n", i); } randomArrangeNodesOfCDS(i); } printf("生成的支配集是:\n"); printDominatingSets(countOfNodes, countOfDominatingSets, dominatingSetsArr);//打印所有支配集 findTheBestDominatingSetThisTurn(); best = bestOfThisTurn; for (int i = 0; i < countOfNodes; i++) { bestDominatingSet[i] = dominatingSetsArr[bestOfThisTurnIndex][i]; } int iteration = 1;//迭代次数 //开始迭代 while (iteration <= maxIteration) { printf("--------------------------------------第%d次迭代--------------------------------------\n", iteration); selection(); //选择 crossover(); //交叉 mutation(); //变异 localOptimization(); //局部优化 printResult(); //计算并打印本次迭代的结果 for (int i = 0; i < countOfDominatingSets; i++) { int notCDS = 0; if (isThisGraphCDS(i) == 0) { printf("下标为%2d的个体不是支配集\n", i); notCDS++; } if (notCDS > 0) { exit(0); } } iteration++; } return best; }
//---------------------------------------------------------------------------------- void TSPLib::computePath( void ) { // remove any existing path m_nbEdges = 0 ; // compute enveloppe computeEnvelope() ; // reduce enveloppe reduceEnvelope( m_nbPoints ) ; // optimize path localOptimization() ; }