实验9 高级搜索技术1

news2025/3/19 6:58:00

实验9 高级搜索技术1

一、实验目的
(1)掌握高级搜索技术的相关理论,能根据实际情况选取合适的搜索方法;
(2)进一步熟悉爬山法搜索技术,掌握其在搜索过程中的优缺点;
(3)掌握模拟退火搜索的思想,能针对实际问题选取合适的温度;
(4)运用爬山法、模拟退火方法解决TSP问题,并对比两种方法的优缺点。
二、实验内容
1、现有一个商人,准备从广州出发,经过广东省的各个城市再回到广州,每个城市只经过一次,城市分布情况见图1所示。请使用模拟退火搜索算法和遗传算法寻找一条线路,使得商人按上述要求走过的路径之和最短,并比较两种方法所使用的时间和最终的行走路径的优越性。各个城市之间的距离可通过上网搜索确定,此处给出两种表示方法。

在这里插入图片描述

图1 广东省市级城市分布图

  String[] citys={"广州","佛山","东莞","中山","珠海","深圳","惠州","河源","汕尾","梅州","潮州","汕头","揭阳","清远","韶关","云浮","茂名","湛江","阳江","江门","肇庆"};

        int[][] Dist={
                {max ,22  ,90  ,86  ,133 ,147 ,148 ,228 ,272 ,426 ,490 ,527 ,465 ,63  ,180 ,145 ,371 ,488 ,225 ,102 ,109 },//广州到各市距离
                {22  ,max ,112 ,78  ,128 ,169 ,170 ,250 ,286 ,456 ,520 ,557 ,495 ,85  ,229 ,132 ,349 ,466 ,198 ,66  ,87  },//佛山到各市距离
                {90  ,112 ,max ,92  ,132 ,57  ,162 ,134 ,207 ,340 ,404 ,441 ,379 ,153 ,297 ,202 ,461 ,578 ,274 ,122 ,199 },//东莞到各市距离
                {86  ,78  ,92  ,max ,25  ,121 ,161 ,240 ,265 ,409 ,420 ,425 ,385 ,158 ,309 ,191 ,317 ,396 ,201 ,43  ,144 },//中山到各市距离
                {133 ,128 ,132 ,25  ,max ,162 ,195 ,282 ,307 ,452 ,462 ,467 ,427 ,202 ,354 ,230 ,328 ,407 ,199 ,87  ,193 },//珠海到各市距离
                {147 ,169 ,57  ,121 ,162 ,max ,90  ,177 ,169 ,343 ,351 ,333 ,317 ,198 ,324 ,265 ,420 ,499 ,303 ,144 ,218 },//深圳到各市距离
                {148 ,170 ,162 ,161 ,195 ,90  ,max ,87  ,130 ,259 ,284 ,289 ,249 ,188 ,271 ,278 ,452 ,531 ,335 ,180 ,231 },//惠州到各市距离
                {228 ,250 ,134 ,240 ,282 ,177 ,87  ,max ,219 ,190 ,269 ,286 ,246 ,211 ,251 ,335 ,534 ,613 ,418 ,266 ,288 },//河源到各市距离
                {272 ,286 ,207 ,265 ,307 ,169 ,130 ,219 ,max ,221 ,200 ,182 ,165 ,317 ,400 ,407 ,568 ,647 ,452 ,293 ,360 },//汕尾到各市距离
                {426 ,456 ,340 ,409 ,452 ,343 ,259 ,190 ,221 ,max ,135 ,155 ,110 ,398 ,360 ,522 ,708 ,787 ,592 ,436 ,475 },//梅州到各市距离
                {490 ,520 ,404 ,420 ,462 ,351 ,284 ,269 ,200 ,135 ,max ,49  ,29  ,421 ,439 ,545 ,718 ,797 ,601 ,446 ,498 },//潮州到各市距离
                {527 ,557 ,441 ,425 ,467 ,333 ,289 ,286 ,182 ,155 ,49  ,max ,46  ,426 ,466 ,550 ,723 ,802 ,606 ,450 ,503 },//汕头到各市距离
                {465 ,495 ,379 ,385 ,427 ,317 ,249 ,246 ,165 ,110 ,29  ,46  ,max ,387 ,413 ,511 ,684 ,763 ,567 ,412 ,464 },//揭阳到各市距离
                {63  ,85  ,153 ,158 ,202 ,198 ,188 ,211 ,317 ,398 ,421 ,426 ,387 ,max ,168 ,171 ,379 ,463 ,286 ,151 ,123 },//清远到各市距离
                {180 ,229 ,297 ,309 ,354 ,324 ,271 ,251 ,400 ,360 ,439 ,466 ,413 ,168 ,max ,323 ,531 ,615 ,436 ,301 ,293 },//韶关到各市距离
                {145 ,132 ,202 ,191 ,230 ,265 ,278 ,335 ,407 ,522 ,545 ,550 ,511 ,171 ,323 ,max ,244 ,328 ,182 ,148 ,56  },//云浮到各市距离
                {371 ,349 ,461 ,317 ,328 ,420 ,452 ,534 ,568 ,708 ,718 ,723 ,684 ,379 ,531 ,244 ,max ,96  ,130 ,275 ,267 },//茂名到各市距离
                {488 ,466 ,578 ,396 ,407 ,499 ,531 ,613 ,647 ,787 ,797 ,802 ,763 ,463 ,615 ,328 ,96  ,max ,208 ,354 ,348 },//湛江到各市距离
                {225 ,198 ,274 ,201 ,199 ,303 ,335 ,418 ,452 ,592 ,601 ,606 ,567 ,286 ,436 ,182 ,130 ,208 ,max ,158 ,201 },//阳江到各市距离
                {102 ,66  ,122 ,43  ,87  ,144 ,180 ,266 ,293 ,436 ,446 ,450 ,412 ,151 ,301 ,148 ,275 ,354 ,158 ,max ,104 },//江门到各市距离
                {109 ,87  ,199 ,144 ,193 ,218 ,231 ,288 ,360 ,475 ,498 ,503 ,464 ,123 ,293 ,56  ,267 ,348 ,201 ,104 ,max }//肇庆到各市距离
        };

# 21个城市的坐标
city_location = [(113.28, 23.12, '广州市'),
            (113.59, 24.80, '韶关市'),
            (114.08, 22.54, '深圳市'),
            (113.55, 22.22, '珠海市'),
            (116.70, 23.37, '汕头市'),
            (113.12, 23.02, '佛山市'),
            (113.09, 22.59, '江门市'),
            (110.36, 21.27, '湛江市'),
            (110.91, 21.65, '茂名市'),
            (112.47, 23.05, '肇庆市'),
            (114.41, 23.07, '惠州市'),
            (116.11, 24.29, '梅州市'),
            (115.36, 22.77, '汕尾市'),
            (114.69, 23.74, '河源市'),
            (111.97, 21.85, '阳江市'),
            (113.05, 23.68, '清远市'),
            (113.74, 23.04, '东莞市'),
            (113.38, 22.52, '中山市'),
            (116.63, 23.66, '潮州市'),
            (116.35, 23.54, '揭阳市'),
            (112.04, 22.92, '云浮市')
            ]

模拟退火算法:

#include<iostream>
#include<vector>
#include<string>
#include <queue>
#include <map>
#include<algorithm>
#include <chrono>
using namespace std;
 
#define SIZE 21
string citys[SIZE] = { "广州","佛山","东莞","中山","珠海","深圳","惠州","河源","汕尾","梅州","潮州","汕头","揭阳","清远","韶关","云浮","茂名","湛江","阳江","江门","肇庆" };
 
int Dist[21][21] = {
		{INT_MAX ,22  ,90  ,86  ,133 ,147 ,148 ,228 ,272 ,426 ,490 ,527 ,465 ,63  ,180 ,145 ,371 ,488 ,225 ,102 ,109 },//广州到各市距离
		{22  ,INT_MAX ,112 ,78  ,128 ,169 ,170 ,250 ,286 ,456 ,520 ,557 ,495 ,85  ,229 ,132 ,349 ,466 ,198 ,66  ,87  },//佛山到各市距离
		{90  ,112 ,INT_MAX ,92  ,132 ,57  ,162 ,134 ,207 ,340 ,404 ,441 ,379 ,153 ,297 ,202 ,461 ,578 ,274 ,122 ,199 },//东莞到各市距离
		{86  ,78  ,92  ,INT_MAX ,25  ,121 ,161 ,240 ,265 ,409 ,420 ,425 ,385 ,158 ,309 ,191 ,317 ,396 ,201 ,43  ,144 },//中山到各市距离
		{133 ,128 ,132 ,25  ,INT_MAX ,162 ,195 ,282 ,307 ,452 ,462 ,467 ,427 ,202 ,354 ,230 ,328 ,407 ,199 ,87  ,193 },//珠海到各市距离
		{147 ,169 ,57  ,121 ,162 ,INT_MAX ,90  ,177 ,169 ,343 ,351 ,333 ,317 ,198 ,324 ,265 ,420 ,499 ,303 ,144 ,218 },//深圳到各市距离
		{148 ,170 ,162 ,161 ,195 ,90  ,INT_MAX ,87  ,130 ,259 ,284 ,289 ,249 ,188 ,271 ,278 ,452 ,531 ,335 ,180 ,231 },//惠州到各市距离
		{228 ,250 ,134 ,240 ,282 ,177 ,87  ,INT_MAX ,219 ,190 ,269 ,286 ,246 ,211 ,251 ,335 ,534 ,613 ,418 ,266 ,288 },//河源到各市距离
		{272 ,286 ,207 ,265 ,307 ,169 ,130 ,219 ,INT_MAX ,221 ,200 ,182 ,165 ,317 ,400 ,407 ,568 ,647 ,452 ,293 ,360 },//汕尾到各市距离
		{426 ,456 ,340 ,409 ,452 ,343 ,259 ,190 ,221 ,INT_MAX ,135 ,155 ,110 ,398 ,360 ,522 ,708 ,787 ,592 ,436 ,475 },//梅州到各市距离
		{490 ,520 ,404 ,420 ,462 ,351 ,284 ,269 ,200 ,135 ,INT_MAX,49  ,29  ,421 ,439 ,545 ,718 ,797 ,601 ,446 ,498 },//潮州到各市距离
		{527 ,557 ,441 ,425 ,467 ,333 ,289 ,286 ,182 ,155 ,49  ,INT_MAX ,46  ,426 ,466 ,550 ,723 ,802 ,606 ,450 ,503 },//汕头到各市距离
		{465 ,495 ,379 ,385 ,427 ,317 ,249 ,246 ,165 ,110 ,29  ,46  ,INT_MAX ,387 ,413 ,511 ,684 ,763 ,567 ,412 ,464 },//揭阳到各市距离
		{63  ,85  ,153 ,158 ,202 ,198 ,188 ,211 ,317 ,398 ,421 ,426 ,387 ,INT_MAX ,168 ,171 ,379 ,463 ,286 ,151 ,123 },//清远到各市距离
		{180 ,229 ,297 ,309 ,354 ,324 ,271 ,251 ,400 ,360 ,439 ,466 ,413 ,168 ,INT_MAX ,323 ,531 ,615 ,436 ,301 ,293 },//韶关到各市距离
		{145 ,132 ,202 ,191 ,230 ,265 ,278 ,335 ,407 ,522 ,545 ,550 ,511 ,171 ,323 ,INT_MAX,244 ,328 ,182 ,148 ,56  },//云浮到各市距离
		{371 ,349 ,461 ,317 ,328 ,420 ,452 ,534 ,568 ,708 ,718 ,723 ,684 ,379 ,531 ,244 ,INT_MAX ,96  ,130 ,275 ,267 },//茂名到各市距离
		{488 ,466 ,578 ,396 ,407 ,499 ,531 ,613 ,647 ,787 ,797 ,802 ,763 ,463 ,615 ,328 ,96  ,INT_MAX ,208 ,354 ,348 },//湛江到各市距离
		{225 ,198 ,274 ,201 ,199 ,303 ,335 ,418 ,452 ,592 ,601 ,606 ,567 ,286 ,436 ,182 ,130 ,208 ,INT_MAX ,158 ,201 },//阳江到各市距离
		{102 ,66  ,122 ,43  ,87  ,144 ,180 ,266 ,293 ,436 ,446 ,450 ,412 ,151 ,301 ,148 ,275 ,354 ,158 ,INT_MAX ,104 },//江门到各市距离
		{109 ,87  ,199 ,144 ,193 ,218 ,231 ,288 ,360 ,475 ,498 ,503 ,464 ,123 ,293 ,56  ,267 ,348 ,201 ,104 ,INT_MAX }//肇庆到各市距离
};
 
//计算路径长度
int pathLength(vector<int>& path) {
	int length = 0;
	for (int i = 0; i < path.size() - 1; i++) {
		int src = path[i];
		int des = path[i + 1];
		length += Dist[src][des];
	}
	length += Dist[0][path[0]];
	length += Dist[path[path.size() - 1]][0];
	return length;
}
 
//模拟退火算法
vector<int> simulatedAnnealing(double temperature, double coolingRate, int maxIterations) {
	srand(time(0));	//设置随机数种子
	//随机生成初解
	vector<int>currentPath;
	for (int i = 1; i < SIZE; i++) {
		currentPath.push_back(i);
	}
	random_shuffle(currentPath.begin(), currentPath.end());	//随机打乱
	int currentLengh = pathLength(currentPath);
 
	vector<int>bestPath = currentPath;		//记录最优解
	int bestLength = currentLengh;
 
	//迭代扰动产生新解,随机交换两个位置
	while (temperature > 1e-8 && maxIterations) {
		int x = rand() % (SIZE - 1);
		int y = rand() % (SIZE - 1);
		while (x == y) y = rand() % (SIZE - 1);
		swap(currentPath[x], currentPath[y]);
		int newLength = pathLength(currentPath);
 
		//如果新路径更短或者根据Metropolis准则决定是否接受新解
		if (newLength < currentLengh || (rand() / (double)RAND_MAX) < (1 / (1 + exp(-1 * (newLength - currentLengh) / temperature)))) {
			currentLengh = newLength;
			if (currentLengh < bestLength) {
				bestLength = currentLengh;
				bestPath = currentPath;
			}
		}
		else {			//不接受
			swap(currentPath[x], currentPath[y]);
		}
		maxIterations--;				//减少迭代次数
		temperature *= coolingRate;		//降温
	}
	//返回最优解
	return bestPath;
}
 
int main() {
 
	auto start_time = chrono::high_resolution_clock::now();

	// 参数设置
	double initialTemperature = 1000.0;		//初始温度
	double coolingRate = 0.99;				//冷却率
	int maxIterations = 10000;				//最多迭代次数
 
	// 使用模拟退火搜索算法求解最优路径
	vector<int> bestPath = simulatedAnnealing(initialTemperature, coolingRate, maxIterations);
 
	cout << "Best path: ";
	for (int i = 0; i < bestPath.size(); ++i) {
		cout << citys[bestPath[i]] << " ";
	}
	cout << "广州" << endl;
	cout << "Path length: " << pathLength(bestPath) << endl;
	//计算运行时间
	auto end_time = std::chrono::high_resolution_clock::now();
	auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
	std::cout << "程序执行时间为:" << elapsed_time.count() << "毫秒" << std::endl;
	return 0;
}

结果:
在这里插入图片描述

遗传算法解决:

#include<iostream>
#include<vector>
#include<string>
#include <queue>
#include <map>
#include<algorithm>
#include <chrono>
using namespace std;
 
#define SIZE 21		//城市个数
#define POPULATION_SIZE 50   //种群规模
#define MAXITERATIONS 1000	//最大迭代次数
#define MUTATION_RATE 0.01	//变异率
#define ELITE_SIZE 5	//精英个数
string citys[SIZE] = {"广州","佛山","东莞","中山","珠海","深圳","惠州","河源","汕尾","梅州","潮州","汕头","揭阳","清远","韶关","云浮","茂名","湛江","阳江","江门","肇庆"};
 
int Dist[21][21] = {
		{INT_MAX ,22  ,90  ,86  ,133 ,147 ,148 ,228 ,272 ,426 ,490 ,527 ,465 ,63  ,180 ,145 ,371 ,488 ,225 ,102 ,109 },//广州到各市距离
		{22  ,INT_MAX ,112 ,78  ,128 ,169 ,170 ,250 ,286 ,456 ,520 ,557 ,495 ,85  ,229 ,132 ,349 ,466 ,198 ,66  ,87  },//佛山到各市距离
		{90  ,112 ,INT_MAX ,92  ,132 ,57  ,162 ,134 ,207 ,340 ,404 ,441 ,379 ,153 ,297 ,202 ,461 ,578 ,274 ,122 ,199 },//东莞到各市距离
		{86  ,78  ,92  ,INT_MAX ,25  ,121 ,161 ,240 ,265 ,409 ,420 ,425 ,385 ,158 ,309 ,191 ,317 ,396 ,201 ,43  ,144 },//中山到各市距离
		{133 ,128 ,132 ,25  ,INT_MAX ,162 ,195 ,282 ,307 ,452 ,462 ,467 ,427 ,202 ,354 ,230 ,328 ,407 ,199 ,87  ,193 },//珠海到各市距离
		{147 ,169 ,57  ,121 ,162 ,INT_MAX ,90  ,177 ,169 ,343 ,351 ,333 ,317 ,198 ,324 ,265 ,420 ,499 ,303 ,144 ,218 },//深圳到各市距离
		{148 ,170 ,162 ,161 ,195 ,90  ,INT_MAX ,87  ,130 ,259 ,284 ,289 ,249 ,188 ,271 ,278 ,452 ,531 ,335 ,180 ,231 },//惠州到各市距离
		{228 ,250 ,134 ,240 ,282 ,177 ,87  ,INT_MAX ,219 ,190 ,269 ,286 ,246 ,211 ,251 ,335 ,534 ,613 ,418 ,266 ,288 },//河源到各市距离
		{272 ,286 ,207 ,265 ,307 ,169 ,130 ,219 ,INT_MAX ,221 ,200 ,182 ,165 ,317 ,400 ,407 ,568 ,647 ,452 ,293 ,360 },//汕尾到各市距离
		{426 ,456 ,340 ,409 ,452 ,343 ,259 ,190 ,221 ,INT_MAX ,135 ,155 ,110 ,398 ,360 ,522 ,708 ,787 ,592 ,436 ,475 },//梅州到各市距离
		{490 ,520 ,404 ,420 ,462 ,351 ,284 ,269 ,200 ,135 ,INT_MAX,49  ,29  ,421 ,439 ,545 ,718 ,797 ,601 ,446 ,498 },//潮州到各市距离
		{527 ,557 ,441 ,425 ,467 ,333 ,289 ,286 ,182 ,155 ,49  ,INT_MAX ,46  ,426 ,466 ,550 ,723 ,802 ,606 ,450 ,503 },//汕头到各市距离
		{465 ,495 ,379 ,385 ,427 ,317 ,249 ,246 ,165 ,110 ,29  ,46  ,INT_MAX ,387 ,413 ,511 ,684 ,763 ,567 ,412 ,464 },//揭阳到各市距离
		{63  ,85  ,153 ,158 ,202 ,198 ,188 ,211 ,317 ,398 ,421 ,426 ,387 ,INT_MAX ,168 ,171 ,379 ,463 ,286 ,151 ,123 },//清远到各市距离
		{180 ,229 ,297 ,309 ,354 ,324 ,271 ,251 ,400 ,360 ,439 ,466 ,413 ,168 ,INT_MAX ,323 ,531 ,615 ,436 ,301 ,293 },//韶关到各市距离
		{145 ,132 ,202 ,191 ,230 ,265 ,278 ,335 ,407 ,522 ,545 ,550 ,511 ,171 ,323 ,INT_MAX,244 ,328 ,182 ,148 ,56  },//云浮到各市距离
		{371 ,349 ,461 ,317 ,328 ,420 ,452 ,534 ,568 ,708 ,718 ,723 ,684 ,379 ,531 ,244 ,INT_MAX ,96  ,130 ,275 ,267 },//茂名到各市距离
		{488 ,466 ,578 ,396 ,407 ,499 ,531 ,613 ,647 ,787 ,797 ,802 ,763 ,463 ,615 ,328 ,96  ,INT_MAX ,208 ,354 ,348 },//湛江到各市距离
		{225 ,198 ,274 ,201 ,199 ,303 ,335 ,418 ,452 ,592 ,601 ,606 ,567 ,286 ,436 ,182 ,130 ,208 ,INT_MAX ,158 ,201 },//阳江到各市距离
		{102 ,66  ,122 ,43  ,87  ,144 ,180 ,266 ,293 ,436 ,446 ,450 ,412 ,151 ,301 ,148 ,275 ,354 ,158 ,INT_MAX ,104 },//江门到各市距离
		{109 ,87  ,199 ,144 ,193 ,218 ,231 ,288 ,360 ,475 ,498 ,503 ,464 ,123 ,293 ,56  ,267 ,348 ,201 ,104 ,INT_MAX }//肇庆到各市距离
};
 
//计算路径长度
int pathLength(vector<int>& path) {
	int length = 0;
	for (int i = 0; i < path.size() - 1; i++) {
		int src = path[i];
		int des = path[i + 1];
		length += Dist[src][des];
	}
	length += Dist[0][path[0]];
	length += Dist[path[path.size()-1]][0];
	return length;
}
 
//随机创建一个种群
vector<vector<int>> generatePopulation() {
	vector<vector<int>> population;
	for (int i = 0; i < POPULATION_SIZE; i++) {
		vector<int>individual;
		for (int j = 1; j < SIZE; j++)
			individual.push_back(j);
		random_shuffle(individual.begin(), individual.end());
		population.push_back(individual);
	}
	return population;
}
 
//获取种群中的精英
vector<vector<int>> getElites(vector<vector<int>>& population) {
	vector<vector<int>>elites;
	sort(population.begin(), population.end(), [](vector<int>& a, vector<int>& b) {	return pathLength(a) < pathLength(b);	});
	for (int i = 0; i < ELITE_SIZE; i++)
		elites.push_back(population[i]);
	return elites;
}
 
//交叉,随机获取parent1中部分基因,然后剩下部分由parent2补充
vector<int> crossover(vector<int>& parent1, vector<int>parent2) {
	vector<int>child(parent1.size(),-1);
	//获取parent1中部分基因
	int start = rand() % parent1.size();
	int end = rand() % parent1.size();
	if (start > end)	swap(start, end);
	for (int i = start; i <= end; i++)
		child[i] = parent1[i];
	//获取parent2中的基因
	int index = 0;
	for (int i = 0; i < parent1.size(); i++) {
		if (child[i] == -1) {
			while (find(child.begin(), child.end(), parent2[index]) != child.end())	index++;
			child[i] = parent2[index];
		}
	}
	return child;
}
 
//变异
void mutate(vector<int>& individual) {
	for (int i = 0; i < SIZE - 1; i++) {
		if ((double)rand() / RAND_MAX < MUTATION_RATE) {
			int j = rand() % (SIZE - 1);
			swap(individual[i], individual[j]);
		}
	}
}
 
//遗传算法
vector<int> geneticAlgorithm() {
 
	//创建初始种群
	vector<vector<int>> population = generatePopulation();
	// 迭代产生新种群,选择、交叉、变异
	for(int i=0;i<MAXITERATIONS;i++) {
		//选择精英
		vector<vector<int>> elites = getElites(population);
		//进化生成新种群
		vector<vector<int>> new_population;
		while (new_population.size() < POPULATION_SIZE) {
			//交叉
			int x = rand() % ELITE_SIZE;
			int y = rand() % ELITE_SIZE;
			while(x==y)	y = rand() % ELITE_SIZE;
			vector<int>child = crossover(elites[x], elites[y]);
			//变异
			mutate(child);
			//加入新种群
			new_population.push_back(child);
		}
		population = new_population;
	}
	//返回最优解
	sort(population.begin(), population.end(), [](vector<int>& a, vector<int>& b) {	return pathLength(a) < pathLength(b);	});
	return population[0];
}
 
 
 
int main() {
	auto start_time = chrono::high_resolution_clock::now();
	srand(time(0));	//设置随机数种子
	
	//运行遗传算法
	vector<int> result = geneticAlgorithm();
	//输出结果
	cout << "Best path: ";
	for (int i = 0; i < SIZE-1; i++) {
		cout << citys[result[i]] << " ";
	}
	cout <<"广州" << endl;
	cout << "Path length: " << pathLength(result) << endl;
 
	//计算运行时间
	auto end_time = std::chrono::high_resolution_clock::now();
	auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
	std::cout << "程序执行时间为:" << elapsed_time.count() << "毫秒" << std::endl;
	return 0;
}

在这里插入图片描述

3、实验体会与总结
比较两种方法所使用的时间和最终的行走路径的优越性:
解的质量:
遗传算法找到的路径之和(2689)明显小于模拟退火算法找到的路径之和(4410),说明遗传算法在寻找最优解方面表现更好。
计算时间:
模拟退火算法的计算时间(3毫秒)远小于遗传算法的计算时间(297毫秒)。这可能是因为模拟退火算法在搜索过程中更快地收敛到一个局部最优解,而遗传算法需要更多的迭代来探索解空间并找到全局最优解。
适用性:
模拟退火算法适用于较简单的优化问题,特别是当解空间较小或问题具有单峰特性时。遗传算法适用于更复杂的优化问题,特别是当解空间较大、问题具有多峰特性或需要探索多个局部最优解时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据挖掘】Python基础环境安装配置

【数据挖掘】Python基础环境安装配置 一、摘要二、安装Python3.13.2三、安装Jupyter Notebook四、安装Numpy和Pandas以及matplotlib五、安装scikit-learn库和seaborn库 一、摘要 本文主要介绍如何在Windows上安装Python3.13.2&#xff0c;然后基于该Python版本安装Jupyter not…

【2025新版本】【谷粒商城版】Kubernetes

本文作者&#xff1a; slience_me 文章目录 【2025】Kubernetes1. docker安装2. kubernetes安装前3. kubeadm,kubelet,kubectl3.1 简介kubeadmkubeletkubectl常用指令 3.2 安装3.3 kubeadm初始化3.4 加入从节点(工作节点)3.5 安装Pod网络插件&#xff08;CNI&#xff09;3.6 Ku…

vulhub-Billu-b0x攻略

靶场下载链接 https://download.vulnhub.com/billu/Billu_b0x.zip 将kali和Billu,NAT连接 获取靶场ip arp-scan -l 使用diesearch进行目录扫描 dirsearch -u " " 查看目录中的信息 打开add.php,得到有上传文件功能的&#xff08;看到后面你会发现其实这里就可以完…

vue3+Ts+elementPlus二次封装Table分页表格,表格内展示图片、switch开关、支持

目录 一.项目文件结构 二.实现代码 1.子组件&#xff08;表格组件&#xff09; 2.父组件&#xff08;使用表格&#xff09; 一.项目文件结构 1.表格组件&#xff08;子组件&#xff09;位置 2.使用表格组件的页面文件&#xff08;父组件&#xff09;位置 3.演示图片位置 ele…

数字人本地部署之llama-本地推理模型

llama 本地服务命令 llama-server.exe -m "data/LLM/my.gguf" --port 8080 -m data/LLM/my.gguf -m 属于命令行选项&#xff0c;一般用来指定要加载的模型文件。 data/LLM/my.gguf 是模型文件的路径。gguf 格式的文件是一种用于存储语言模型权重的文件格式&…

RUOYI框架在实际项目中的应用三:Ruoyi微服务版本-RuoYi-Cloud

如需观看Ruoyi框架的整体介绍&#xff0c;请移步&#xff1a;RUOYI框架在实际项目中的应用一&#xff1a;ruoyi简介 一、Ruoyi微服务版本-Ruoyi微服务版本 1、官方资料 1&#xff1a;代码地址&#xff1a;https://gitee.com/y_project/RuoYi-Cloud.git 2&#xff1a;文档介绍…

linux操作系统3

1.安装桌面的centos操作系统 二.linux相对路径和绝对路径 1.相对路径:从当前目录开始数的不完整路径 2.绝对路径:从跟开始数的完整路径 (这2种路径主要是为了方便用户操作) 3.linux用户和用户组管理 创建用户组:useradd 删除用户:userdel 用户的修改:usermod(可以修改用…

windows创建开机启动任务

1、背景 一个java应用程序&#xff0c;需要做成开机启动&#xff0c;系统为windows系统。 2、创建启动脚本 创建一个 .bat 文件&#xff08;例如 startup.bat&#xff09;&#xff0c;并将其保存到 Java 应用程序的目录中&#xff08;如 E:\gitcode\mygit\learn\database\jdk2…

素数判定方法详解:从基础试除法到优化策略

素数是只能被1和自身整除的正整数。素数的判定是数论中的基础问题&#xff0c;也是算法竞赛中的常见考点。 一、知识点 素数的定义&#xff1a; 素数&#xff08;质数&#xff09;是大于1的自然数&#xff0c;且只能被1和自身整除。 试除法&#xff1a; 通过遍历从2到sqrt(n)​…

BFS,DFS带图详解+蓝桥杯算法题+经典例题

1.BFS和DFS的定义与实现方式 1.1 深度优先搜索&#xff08;DFS&#xff09; 基本概念&#xff1a;DFS 是一种用于遍历或搜索图或树的算法。它从起始节点开始&#xff0c;沿着一条路径尽可能深地探索下去&#xff0c;直到无法继续或者达到目标节点&#xff0c;然后回溯到上一个…

「清华大学、北京大学」DeepSeek 课件PPT专栏

你要的 这里都打包好啦&#xff0c;快快收藏起来&#xff01; 名称 链接 团队简介 类型 DeepSeek——从入门到精通 1️⃣ DeepSeek从入门到精通「清华团队」 清华大学新闻与传播学院 新媒体研究中心 元宇宙文化实验室 PPT课件 DeepSeek如何赋能职场应用? ——从提示语…

如何在 Github 上获得 1000 star?

作为程序员&#xff0c;Github 是第一个绕不开的网站。我们每天都在上面享受着开源带来的便利&#xff0c;我相信很多同学也想自己做一个开源项目&#xff0c;从而获得大家的关注。然而&#xff0c;理想很丰满&#xff0c;现实却是开发了很久的项目仍然无人问津。 最近&#x…

on-policy对比off-policy

目录 持续更新。。。 on-policy与off-policy的定义 Q-learning属于on-policy算法还是off-policy算法&#xff1f; 为什么off-policy适用于从离线经验或多种探索策略中学习&#xff0c;明明 On-policy 也可以基于探索学习的啊&#xff1f; 重要性权重方法 off-policy方法可…

基于SpringBoot+Vue的幼儿园管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、教师、普通用户功能模块&#xff1a;用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型&#xff1a;SpringBoot&#xff0…

案例5_3: 6位数码管静态显示

文章目录 文章介绍效果图仿真图复习知识&#xff1a;代码思考 文章介绍 第5章 学习数码管&#xff0c;使用6位数码管进行静态显示 效果图 仿真图 新建一个干净的5_3文件夹&#xff0c;用于存放新画的仿真图 除单片机最小系统外&#xff0c;新增3个元器件&#xff0c;分别是&…

Profinet转Modbus RTU/TCP以太网通讯处理器

Profinet转Modbus RTU/TCP以太网通讯处理器 在当今的工业自动化领域&#xff0c;各种通讯协议和标准层出不穷。 其中&#xff0c;Profinet和Modbus作为两种广泛应用的通讯协议&#xff0c;分别在不同的应用场景中发挥着重要作用。 然而&#xff0c;当需要将这两种协议进行转换…

3倍训练速度+40%显存节省!Mamba+Transformer 仅用一半时间,性能提升80%!

在人工智能领域&#xff0c;Mamba与Transformer的结合正在成为研究热点&#xff0c;为自然语言处理和多模态任务带来新的突破。 最新研究表明&#xff0c;通过将Mamba架构与Transformer的强大编码能力相结合&#xff0c;模型在处理复杂的多模态数据时的效率提升了50%&#xff…

春秋云境刷题1

CVE-2022-29464 靶标介绍&#xff1a; WSO2文件上传漏洞&#xff08;CVE-2022-29464&#xff09;是Orange Tsai发现的WSO2上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传&#xff0c;允许未经身份验证的攻击者通过上传恶意JSP文件在WSO2服务器上获得RCE。 Git…

台式机电脑组装---电源

台式机电脑组装—电源 22 33 主板供电是聚集了12V&#xff0c;5V,3.3V的24pin CPU供电的话主要是12V的44pin供电 44pin合并之后&#xff0c;就是8pin 55 SATA硬盘会使用饼io口取电&#xff0c;从电源获取12v,5v,3.3v的电 33

10-BST(二叉树)-建立二叉搜索树,并进行前中后遍历

题目 来源 3540. 二叉搜索树 - AcWing题库 思路 建立二叉搜索树&#xff08;注意传参时用到了引用&#xff0c;可以直接对root进行修改&#xff09;&#xff0c;同时进行递归遍历&#xff1b;遍历可以分前中后三种写&#xff0c;也可以用标志来代替合在一起。其余详见代码。…