单源多目标最短路径模型

/*
	单源多目标最短路径模型
		————从顶点v到其他顶点的最短距离
*/
#define MAX_VERTICE 100
#define TRUE 1
#define FALSE 0
int cost[MAX_VERTICE][MAX_VERTICE];
int distance[MAX_VERTICE];
short int found[MAX_VERTICE];
int n = MAX_VERTICE;

void shortestpath(int v, int cost[][MAX_VERTICE], int distance[], int n, short int found[])
{
	/* distance[i] represents the shortest path from vertex v to vertex i */
	/* found[i] holds a 0 if the shortest path from vertex i has not been found and a 1 if it has */
	/* cost[][] is the adjacency matrix */
	/* n stand for n vertex */
	/* v stand for the source vertex */
	int i, u, w;
	for(i = 0; i < n; i++){
		found[i] = FALSE;
		distance[i] = cost[v][i];
	}
	found[v] = TRUE;
	distance[v] = 0;
	for(i = 0; i < n - 2; i++){
		u = choose(distance, n, found);
		found[u] = TRUE;
		for(w = 0; w < n; w++)
			if(!found[w])
				if(distance[u] + cost[u][w] < distance[w])
					distance[w] = distance[u] + cost[u][w];
	}
}
int choose(int distance[], itn n, short int found[])
{
	/* find the smallest distance not yet checked */
	int i, min, minpos;
	min = INT_MAX;
	minpos = -1;
	for(i = 0; i < n; i++)
		if(distance[i] < min && !found[i]){
			min = distance[i];
			minpos = i;
		}
	return minpos;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标优化问题一直是科学和工程研究领域的一个难题和热点问题,在遗传算法应用到这一领域以前,已经产生了许多经典的方法,经典方法在处理大维数、多模态等复杂问题上存在不足。多目标遗传算法具有处理大的问题空间的能力在依次进化过程中可以得到多个可行解,对问题域的先验知识没有要求,对函数定义域的凸性不敏感,这正是经典算法不具备的。所以,应用遗传算法求解多目标问题,是这一领域的发展趋势。 路径问题是网络设计中遇到的最常见的问题之一,寻找指定两点间总长度最短或费用最低的路径。经典的Dijkstra算法能够精确的求出两点间的最短路径,但是经典的Dijkstra算法存在着占用时间、空间消耗过大的缺点。利用遗传算法求解路径问题可以减少算法对时间、空间的消耗。 利用遗传算法求解多目标路径寻优要考虑两个方面的问题。1.在多目标优化过程中,如何给出确保遗传算法进化的选择压力;2在路径问题中,如何对路径进行遗传操作。 本文对遗传算法及其面向多目标优化问题和路径寻优问题的基础理论和基本方法进行了阐述,提出了自己的方法,并进行了实验分析,主要内容如下: 1.介绍了遗传算法的基本理论、方法和一般流程,遗传多目标优化的现状。 2.利用遗传算法对路径进行遗传操作进行寻优,并利用改进的Dijkstra算法进行验证。 3.在遗传算法多目标优化中权重和原有产生权的方法的基础上对权重的给出进行了改进。以此对多目标路径进行寻优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值