节约里程法求解最短路问题
你只要记住2点之间直线最短。节约里程法是用来解决运输车辆数目不确定的问题的最有名的启发式算法。1、节约里程法优化过程分为并行方式和串行方式两种。
核心思想是依次将运输问题中的两个回路合并为一个回路,每次使合并后的总运输距离减小的幅度最大,直到达到一辆车的装载限制时,再进行下一辆车的优化。2、节约里程法最短路径是两点之间直线最短。
最短路径是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。3、在路径优化问题还包括节约里程法,遗传算法,神经网络这几种算法。
其中遗传算法相对简便,由于遗传算法不能直接处理问题空间的参数,因此必须通过编码将要求解的问题表示成遗传空间的染色体或者个体。这一转换操作就叫做编码。
谷歌人工智能写作项目:神经网络伪原创
NP完全问题
百科名片NP完全问题NP完全问题,是世界七大数学难题之一写作猫。NP的英文全称是Non-deterministicPolynomial的问题,即多项式复杂程度的非确定性问题。
简单的写法是NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
目录基本简介问题详解搜索方法近邻法(nearestneighbor)插入法(insertion)模拟退火算法(RecuitAlgorithm)遗传算法神经网络算法难度结果基本简介问题详解搜索方法近邻法(nearestneighbor)插入法(insertion)模拟退火算法(RecuitAlgorithm)遗传算法神经网络算法难度结果展开编辑本段基本简介数学上著名的NP问题,完整的叫法是NP完全问题,也即“NPCOMPLETE”问题,简单的写法,是NP=P?
的问题。问题就在这个问号上,到底是NP等于P,还是NP不等於P。证明其中之一,便可以拿百万美元大奖。
多流水线调度实际上是一个NP完全问题这个奖还没有人拿到,也就是说,NP问题到底是Polynomial,还是Non-Polynomial,尚无定论。
NP里面的N,不是Non-Polynomial的N,是Non-Deterministic,P代表Polynomial倒是对的。
NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题。
美国麻州的克雷(Clay)数学研究所于2000年5月24日在巴黎法兰西学院宣布了一件被媒体炒得火热的大事:对七个“千僖年数学难题”的每一个悬赏一百万美元。以下是这七个难题。
“千僖难题”之一:P(多项式算法)问题对NP(非多项式算法)问题“千僖难题”之二:霍奇(Hodge)猜想“千僖难题”之三:庞加莱(Poincare)猜想“千僖难题”之四:黎曼(Riemann)假设“千僖难题”之五:杨-米尔斯(Yang-Mills)存在性和质量缺口“千僖难题”之六:纳维叶-斯托克斯(Navier-Stokes)方程的存在性与光滑性“千僖难题”之七:贝赫(Birch)和斯维讷通-戴尔(Swinnerton-Dyer)猜想NP完全问题排在百万美元大奖的首位,足见他的显赫地位和无穷魅力。
编辑本段问题详解NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题。什么是非确定性问题呢?
有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。
有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。再比如,大的合数分解质因数的问题,有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?
也没有这样的公式。这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。
而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。
这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式时间内算出来,就叫做多项式非确定性问题。
而如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题。完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。
但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。
既然这类问题的所有可能答案,都可以在多项式时间内计算,人们於是就猜想,是否这类问题,存在一个确定性算法,可以在指数时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想。
解决这个猜想,无非两种可能,一种是找到一个这样的算法,只要针对某个特定NP完全问题找到一个算法,所有这类问题都可以迎刃而解了,因为他们可以转化为同一个问题。另外的一种可能,就是这样的算法是不存在的。
那么就要从数学理论上证明它为什么不存在。前段时间轰动世界的一个数学成果,是几个印度人提出了一个新算法,可以在多项式时间内,证明某个数是或者不是质数,而在这之前,人们认为质数的证明,是个非多项式问题。
可见,有些看来好象是非多项式的问题,其实是多项式问题,只是人们一时还不知道它的多项式解而已。上回说到可怜的旅行商想找出走遍所有城市的最短路径。让我们用计算机帮他搜索一下。
这就需要用到本篇文章中要介绍的第一门学科了:《人工智能》。人类的许多活动,如解算题、猜谜语、进行讨论、编制计划和编写计算机程序,甚至驾驶汽车和骑自行车等等,都需要"智能"。
如果机器能够执行这种任务,就可以认为机器已具有某种性质的"人工智能"。现在我们就要利用人工智能,用计算机模拟人的思维来搜索最短路径。
想像一下,我们人思考问题时,有两种方法:一种是精确搜索,就是试验所有的可能性,找出最精确的一个方案。
但它在搜索过程中不改变搜索策略,不利用搜索获得的中间信息,它盲目性大,效率差,用于小型问题还可以,用于大型问题根本不可能;另一种叫做启发式搜索,它在搜索过程中加入了与问题有关的启发性信息,用以指导搜索向着一个比较小的范围内进行,加速获得结果。
编辑本段搜索方法近邻法(nearestneighbor)推销员从某个城镇出发,永远选择前往最近且尚未去过的城镇,最后再返回原先的出发点。
这方法简单,也许是多数人的直觉做法,但是近邻法的短视使其表现非常不好,通常后段的路程会非常痛苦。插入法(insertion)先产生连接部分点的子路线,再根据某种法则将其它的点逐一加入路线。
比如最近插入法(nearestinsertion),先针对外围的点建构子路线,然后从剩余的点里面评估何者加入后路线总长度增加的幅度最小,再将这个点加入路线。
又比如最远插入法(farthest,insertion),是从剩余的点里面选择距离子路线最远的点,有点先苦后甜的滋味。
模拟退火算法(RecuitAlgorithm)模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。
用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解。
遗传算法遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法遗传算法是解决NP问题的一种较理想的方法,从某种程度上说遗传算法是对生物进化过程进行的数学方式仿真。
生物种群的生存过程普遍遵循达尔文进化准则,群体中的个体根据对环境的适应能力而被大自然所选择或淘汰。
进化过程的结果反映在个体的结构上,其染色体包含若干基因,相应的表现型和基因型的联系体现了个体的外部特性与内部机理间逻辑关系。通过个体之间的交叉、变异来适应大自然环境。
生物染色体用数学方式或计算机方式来体现就是一串数码,仍叫染色体,有时也叫个体;适应能力是对应着一个染色体的一个数值来衡量;染色体的选择或淘汰则按所面对的问题是求最大还是最小来进行。
神经网络算法根据一个简化的统计,人脑由百亿条神经组成—每条神经平均连结到其它几千条神经。通过这种连结方式,神经可以收发不同数量的能量。
神经的一个非常重要的功能是它们对能量的接受并不是立即作出响应,而是将它们累加起来,当这个累加的总和达到某个临界阈值时,它们将它们自己的那部分能量发送给其它的神经。
大脑通过调节这些连结的数目和强度进行学习。尽管这是个生物行为的简化描述。但同样可以充分有力地被看作是神经网络的模型。
编辑本段难度结果虽然百万美元的奖金和大量投入巨大却没有实质性结果的研究足以显示该问题是困难的,还有一些形式化的结果证明为什么该问题可能很难解决。最常被引用的结果之一设计神喻。
假想你有一个魔法机器可以解决单个问题,例如决定一个给定的数字是否为质数,但可以瞬间解决这个问题。
我们的新问题是,若我们被允许任意利用这个机器,是否存在我们可以在多项式时间内验证但无法在多项式时间内解决的问题?结果是,依赖于机器能解决的问题,P=NP和P≠NP二者都可以证明。
这个结论的后果是,任何可以修改来证明该机器的存在性的结果不能解决问题。不幸的是,几乎所有经典的方法和大部分已知的方法可以这样修改(我们称它们在相对化)。
如果这还不算太糟的话,1993年Razborov和Rudich证明的一个结果表明,给定一个特定的可信的假设,在某种意义下“自然”的证明不能解决P=NP问题。
这表明一些现在似乎最有希望的方法不太可能成功。随着更多这类的定理得到证明,该定理的可能证明有越来越多的陷阱要规避。
这实际上也是为什么NP完全问题有用的原因:若有一个多项式时间算法,或者没有一个这样的算法,对于NP完全问题存在,这将用一种相信不被上述结果排除在外的方法来解决P=NP问题。
P=NP问题可以用逻辑命题的特定类的可表达性的术语来重新表述。所有P中的语言可以用一阶逻辑加上最小不动点操作(实际上,这允许了递归函数的定义)来表达。
类似地,NP是可以用存在性二阶逻辑来表达—也就是,在关系、函数、和子集上排除了全域量词的二阶逻辑。多项式等级,PH中的语言对应与所有的二阶逻辑。
这样,“P是NP的真子集吗”这样的问题可以表述为“是否存在性二阶逻辑能够表达带最小不动点操作的一阶逻辑的所不能表达的语言?
”普林斯顿大学计算机系楼将二进制代码表述的“P=NP?”问题刻进顶楼西面的砖头上。如果证明了P=NP,砖头可以很方便的换成表示“P=NP!”。
康奈尔大学的HubertChen博士提供了这个玩笑式的P不等于NP的证明:“反证法。设P=NP。令y为一个P=NP的证明。
证明y可以用一个合格的计算机科学家在多项式时间内验证,我们认定这样的科学家的存在性为真。但是,因为P=NP,该证明y可以在多项式时间内由这样的科学家发现。
但是这样的发现还没有发生(虽然这样的科学家试图发现这样的一个证明),我们得到矛盾。
数学建模的方法有哪些?
。
预测模块:灰色预测、时间序列预测、神经网络预测、曲线拟合(线性回归);归类判别:欧氏距离判别、fisher判别等;图论:最短路径求法 ;最优化:列方程组 用lindo或lingo软件解;其他方法:层次分析法马尔可夫链主成分析法等。
建模常用算法,仅供参考:蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时间=可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法)。
数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具)。
线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo软件实现)。
图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备)。
动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中)。
最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用)。
网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具)。
一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的)。
数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用)。
图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理)。
MATLAB线性神经网络的程序,跪求。。
。
美国Michigan大学的Holland教授提出的遗传算法(GeneticAlgorithm,GA)是求解复杂的组合优化问题的有效方法,其思想来自于达尔文进化论和门德尔松遗传学说,它模拟生物进化过程来从庞大的搜索空间中筛选出较优秀的解,是一种高效而且具有强鲁棒性方法。
所以,遗传算法在求解TSP和MTSP问题中得到了广泛的应用。
matlab程序如下:function[opt_rte,opt_brk,min_dist]=mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter)%%%实例% n=20;%城市个数% xy=10*rand(n,2);%城市坐标 随机产生,也可以自己设定% salesmen=5;%旅行商个数% min_tour=3;%每个旅行商最少访问的城市数% pop_size=80;%种群个数% num_iter=200;%迭代次数% a=meshgrid(1:n);% dmat=reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),n,n);% [opt_rte,opt_brk,min_dist]=mtspf_ga(xy,dmat,salesmen,min_tour,...% pop_size,num_iter);%函数%%[N,dims]=size(xy);%城市矩阵大小[nr,nc]=size(dmat);%城市距离矩阵大小n=N-1;%除去起始的城市后剩余的城市的数%初始化路线、断点的选择num_brks=salesmen-1;dof=n-min_tour*salesmen; %初始化路线、断点的选择addto=ones(1,dof+1);fork=2:num_brksaddto=cumsum(addto);endcum_prob=cumsum(addto)/sum(addto);%%初始化种群pop_rte=zeros(pop_size,n); % 种群路径pop_brk=zeros(pop_size,num_brks); %断点集合的种群fork=1:pop_sizepop_rte(k,:)=randperm(n)+1;pop_brk(k,:)=randbreaks();end% 画图路径曲线颜色clr=[100;001;0.6701;010;10.50];ifsalesmen>5clr=hsv(salesmen);end%%%基于遗传算法的MTSPglobal_min=Inf; %初始化最短路径total_dist=zeros(1,pop_size);dist_history=zeros(1,num_iter);tmp_pop_rte=zeros(8,n);%当前的路径设置tmp_pop_brk=zeros(8,num_brks);%当前的断点设置new_pop_rte=zeros(pop_size,n);%更新的路径设置new_pop_brk=zeros(pop_size,num_brks);%更新的断点设置foriter=1:num_iter%计算适应值forp=1:pop_sized=0;p_rte=pop_rte(p,:);p_brk=pop_brk(p,:);rng=[[1p_brk+1];[p_brkn]]';fors=1:salesmend=d+dmat(1,p_rte(rng(s,1)));%添加开始的路径fork=rng(s,1):rng(s,2)-1d=d+dmat(p_rte(k),p_rte(k+1));endd=d+dmat(p_rte(rng(s,2)),1);%添加结束的的路径endtotal_dist(p)=d;end%找到种群中最优路径[min_dist,index]=min(total_dist);dist_history(iter)=min_dist;ifmin_dist
谁能给:详细:翻译一下 这个C语言程序
以下是炭/炭+执行该弗洛伊德-Warshall算法解决所有对最短路径问题。该守则是不能保证正确运行在所有情况下,正如我刚才只是测试我的系统上,但如果没有,请让我知道了!
//弗洛伊德-Warshall算法解决了所有对最短路径问题,用弗洛伊德-Warshall算法//投入:神经网络,节点数目//连接矩阵cmat,其中0手段断开//距离都是积极的。
阵列双打的//长度(神经网络*神经网络)。
//输出://dist_mat-最短路径的距离内(答案)//pred_mat-上游矩阵,有用的重建最短的路线//注意,来电者应提供空指针,因为这//功能将处理malloc()的来电。
无效fwarsh(诠释神经网络,双*cmat,双**dist_mat,诠释**pred_mat)(双*区;诠释*pred;诠释,我J型,K型;//回路柜//初始化的数据结构的dist=(双*)malloc(sizeof(双人)**神经网络的神经网络);pred=(诠释*)malloc(sizeof(int)将神经网络**神经网络);memset(区,0,sizeof(双人)**神经网络的神经网络);memset(pred,0,sizeof(int)将神经网络**神经网络);//算法初始化(一=0;我。
什么时候使用遗传算法 vs 什么时候使用神经网络
一个遗传算法(GA)搜索技术用于计算找到精确或近似优化和搜索问题的解决方案。神经网络是非线性统计数据建模工具。可以用来建模输入和输出之间复杂的关系,或者为数据中的查找模式。
当有一个条目的数量在不同的类中,神经网络可以"学习"分类项还没有"看见"之前。比如,人脸识别,语音识别。遗传算法可以执行定向搜索解决方案的空间。比如:查找两点之间的最短路径。
非数学专业的大学生参加mcm(数学建模比赛)需要做哪些准备?要多深的数学基础?
三个人当中看你被分派到的任务了,一般是一个建模,一个编程,也就是用软件模拟模型,一个写论文的~~建模的话要求数学比较好。。。
其实了解经典的几个算法,比如说神经网络,最短路径,NP难题算法,图解法等等,能熟悉地应用,高数中的微分也用得比较多,算是基础了~~其实数学建模的话也不一定完全做出来的,有个思路,论文写得清晰规范的话,结果都会不错的,建队的时候一定要选比较严谨的人写论文~~书的话如果你们学校有培训的话老师会推荐的~分工一定要明确,三个组员的功能各不相同努力地方向也不同的~~。
求:c#编写神经网络源程序计算最优化公交线路 10
。
找找迪杰斯特拉算法#includeusingnamespacestd;#defineSIZE100#defineMAX1000typedefstructVex{charname;//顶点的名称}Vex;typedefstructGraph{Vexvex[SIZE];intarc[SIZE][SIZE];intvexnum;//顶点的个数intarcnum;//弧的个数inttag;//tag=0表示无向图tag=1表示有向图}Graph,*LGraph;typedefstructPath{boolfinish;intpre;intweight;}Path;voidInitial(LGraph&G){G=newGraph;G->arcnum=G->vexnum=0;G->tag=0;}boolSearch(LGraph&G,charch,int&e){for(inti=0;ivexnum;i++){if(G->vex[i].name==ch){e=i;returntrue;}}returnfalse;}boolInsertArc(LGraph&G,charv1,charv2,intw){intj,k;if(!Search(G,v1,j)||!Search(G,v2,k)){coutarcnum++;returntrue;}voidSearchShort(LGraph&G,Path*p,intv){inti;intcount=1,min;for(i=0;ivexnum;i++){if(G->arc[v][i]!=0)p[i].pre=v;elsep[i].pre=-1;p[i].weight=G->arc[v][i];p[i].finish=false;}p[v].finish=true;while(count!=G->vexnum){i=0;while(p[i].finish||p[i].pre==-1&&ivexnum)i++;if(i>=G->vexnum)return;min=i;while(ivexnum){if(!p[i].finish&&p[i].pre!=-1&&p[min].weight>p[i].weight)min=i;i++;}p[min].finish=true;for(i=0;ivexnum;i++){if(!p[i].finish&&G->arc[min][i]!=0&&(G->arc[min][i]+p[min].weightarc[min][i]+p[min].weight;p[i].pre=min;}}count++;}}voidmain(){LGraphG;intvexnum,arcnum;inti=0,j=0,w,e;charv1,v2,beg;Initial(G);cout。