货郎担问题 其他应用
- 格式:ppt
- 大小:114.50 KB
- 文档页数:6
旅行商问题的中心辐射算法与应用摘要:针对经典旅行商问题,本文提出了中心辐射算法,该算法首先计算节点中心,然后比较节点与中心连线的与横坐标轴夹角,再按角度从小到大按顺序依次连接节点,完成了走行路线设计。
算例分析并与贪心算法结果比较。
表明该算法具有简单实用性,能够对具体问题实现快速计算,为工程问题分析提供基础。
关键词:旅行商问题;中心辐射算法;可视化设计旅行商问题(traveling salesman problem,简称为tsp),也称为货郎担问题,是著名的组合优化问题,也是一个多局部最优解的问题。
它是由爱尔兰数学家sir william rowan hamilton和英国数学家thomas penyngton kirkman在19世纪提出的。
tsp是这样提出的[1]:假设有一个旅行商人要拜访n个城市,已知这些城市之间的距离,为了每个城市都会到达并且只拜访一次,而且最终要回到原来出发的那个城市,那么他需要怎么选择才能够得到一条最优路径呢?路径的选择目标是要求得的路径总路程为所有路径之中的最小值。
换言之,数据包括一个边权值是整数的,且边数有限的完全图。
目标是找到一个边权值之和最小的哈密尔顿回路。
1954年,tsp问题研究获得重大突破,george dantzig等描述了一种求解tsp的方法;50年后,2004年,获得一个包含多座城市的tsp问题的解决办法。
tsp问题目前研究主要有精确算法和近似算法。
精确算法主要包括回溯法,分支定界法和动态规划算法;能保证得到最优解,但是运行时间复杂度是呈指数增加,难以适应大规模计算的要求;近似算法则只能求得近似解,称为次优解。
包括构造算法和环路改进算法等。
构造算法从某个非法解开始,通过某种增广策略逐步改变该解,直到得到一个合法解为止。
这类算法包括最近邻算法、贪心算法等。
环路改进算法则在给定初始的合法解之后,使用某种策略来改进初始解,这些策略包括局部搜索、模拟退火、遗传算法等,其中最为简单和有效的方法为局部搜索法。
模拟退火算法模拟退火是一种通用概率算法,目的是在固定时间内在一个大的搜寻空间内寻求给定函数的全局最优解。
它通常被用于离散的搜索空间中,例如,旅行商问题。
特别地,对于确定的问题,模拟退火算法一般是优于穷举法。
这是由于我们一般只需得到一个可接受的最优解,而不是精确的最优解。
退火一词来源于冶金学。
退火(见图1)是将材料加热后再经特定速率冷却,目的是增大晶粒的体积,并且减少晶格中的缺陷。
材料中的原子原来会停留在使内能有局部最小值的位置,加热使能量变大,原子会离开原来位置,而随机在其他位置中移动。
退火冷却时速度较慢,使得原子有较多可能可以找到内能比原先更低的位置。
因此,我们将热力学的理论应用到统计学上,将搜寻空间内每一点想象成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。
而模拟退火算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。
模拟退火原理最早是 S. Kirkpatrick, C. D. Gelatt 和 M. P. Vecchi 在1983年所创造的。
而 V . Černý 在1985年也独立发明了此算法。
1. 问题描述数学上的最优化问题一般描述为如下形式:()()minimize()g 0,1,2,,subject to 0,1,2,,i i f x x i m h x i p≤=⎧⎪⎨==⎪⎩ 其中,():R n f x R →称作问题的目标函数,()g 0i x ≤称作问题的不等式约束条件,()0i h x =称作问题的等式约束条件。
寻求上述问题的最优解的过程就类似于从热动力系统的任意一个初始状态向内能最小的状态转移的过程,即退火过程。
2. 模拟退火算法基本思想模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有图1 物理退火原理图序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
实验一找最大和最小元素与归并分类算法实现(用分治法)一、实验目的1.掌握能用分治法求解的问题应满足的条件;2.加深对分治法算法设计方法的理解与应用;3.锻炼学生对程序跟踪调试能力;4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。
二、实验内容1、找最大和最小元素输入n 个数,找出最大和最小数的问题。
2、归并分类将一个含有n个元素的集合,按非降的次序分类(排序)。
三、实验要求(1)用分治法求解问题(2)上机实现所设计的算法;四、实验过程设计(算法设计过程)1、找最大和最小元素采用分治法,将数组不断划分,进行递归。
递归结束的条件为划分到最后若为一个元素则max和min都是这个元素,若为两个取大值赋给max,小值给min。
否则就继续进行划分,找到两个子问题的最大和最小值后,比较这两个最大值和最小值找到解。
2、归并分类使用分治的策略来将一个待排序的数组分成两个子数组,然后递归地对子数组进行排序,最后将排序好的子数组合并成一个有序的数组。
在合并过程中,比较两个子数组的首个元素,将较小的元素放入辅助数组,并指针向后移动,直到将所有元素都合并到辅助数组中。
五、源代码1、找最大和最小元素#include<iostream>using namespace std;void MAXMIN(int num[], int left, int right, int& fmax, int& fmin); int main() {int n;int left=0, right;int fmax, fmin;int num[100];cout<<"请输入数字个数:";cin >> n;right = n-1;cout << "输入数字:";for (int i = 0; i < n; i++) {cin >> num[i];}MAXMIN(num, left, right, fmax, fmin);cout << "最大值为:";cout << fmax << endl;cout << "最小值为:";cout << fmin << endl;return 0;}void MAXMIN(int num[], int left, int right, int& fmax, int& fmin) { int mid;int lmax, lmin;int rmax, rmin;if (left == right) {fmax = num[left];fmin = num[left];}else if (right - left == 1) {if (num[right] > num[left]) {fmax = num[right];fmin = num[left];}else {fmax = num[left];fmin = num[right];}}else {mid = left + (right - left) / 2;MAXMIN(num, left, mid, lmax, lmin);MAXMIN(num, mid+1, right, rmax, rmin);fmax = max(lmax, rmax);fmin = min(lmin, rmin);}}2、归并分类#include<iostream>using namespace std;int num[100];int n;void merge(int left, int mid, int right) { int a[100];int i, j,k,m;i = left;j = mid+1;k = left;while (i <= mid && j <= right) {if (num[i] < num[j]) {a[k] = num[i++];}else {a[k] = num[j++];}k++;}if (i <= mid) {for (m = i; m <= mid; m++) {a[k++] = num[i++];}}else {for (m = j; m <= right; m++) {a[k++] = num[j++];}}for (i = left; i <= right; i++) { num[i] = a[i];}}void mergesort(int left, int right) { int mid;if (left < right) {mid = left + (right - left) / 2;mergesort(left, mid);mergesort(mid + 1, right);merge(left, mid, right);}}int main() {int left=0,right;int i;cout << "请输入数字个数:";cin >> n;right = n - 1;cout << "输入数字:";for (i = 0; i < n; i++) {cin >> num[i];}mergesort(left,right);for (i = 0; i < n; i++) {cout<< num[i];}return 0;}六、运行结果和算法复杂度分析1、找最大和最小元素图1-1 找最大和最小元素结果算法复杂度为O(logn)2、归并分类图1-2 归并分类结果算法复杂度为O(nlogn)实验二背包问题和最小生成树算法实现(用贪心法)一、实验目的1.掌握能用贪心法求解的问题应满足的条件;2.加深对贪心法算法设计方法的理解与应用;3.锻炼学生对程序跟踪调试能力;4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。
在企业生产和日常生活中,人们总是希望用最少的人力、物力、财力和时间去办更多的事,这就是所谓的最优化问题。
线性规划方法是解决最优化问题的有效方法之一,因此受到人们的普遍关注。
在企业生产过程中,生产计划安排直接影响到企业的经济效益,而生产计划本质就是在目标一定时,对于人力、时间和物质资源的优化配置问题。
1。
综述了最优化方法,归纳了最优化闯题中线性规划和非线性规划模型的解法,并给出了相应的matlab求解代码。
2。
提出了基于信息增益率的用电客户指标选择方法,根据信息增益率的大小选择对分类有贡献的指标。
关键词:Matlab,最优化方法,应用举例In enterprise production and daily life, people always hope with the least amount of human, material and financial resources and time to do more things, this is the so-called optimization problem. Linear programming method is to solve the optimal problem, so one of the effective method by people's attention. In enterprise production process, production plan directly affect the enterprise economic benefit, but in essence is the production plan for the target certain human, time and material resources optimization allocation problem.1·Studying the optimization,summing up the solutions ofoptimization problem for both linear and non-linear programming model and proposing the matlabcode.2·Proposing a new way based on information-gain-ratio to choose the powercustomer indices,selecting the indices which are more contributive to theclassification,in order to avoid over learning。