《决策支持系统作业.pdf》由会员分享,可在线阅读,更多相关《决策支持系统作业.pdf(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 决策支持系统导论 期末作业 )$姓名:学号:1、设某企业生产多种最终产品 Y=(yi),各种产品的单价为 Pi,它们的投入产出直接消耗系数为 A=(aij),企业的资源(煤、电力、劳力)的约束方程为 BXh(“”表示),其中,B=(bij)是资源消耗系数矩阵,X=(xi)是企业总产品向量,h 是资源约束向量。为使企业净产值最大,其目标方程 S=maxPiyi,试安排生产计划(求总产品 X 和最终产品 Y)。请设计该企业的生产计划决策支持系统,画出 DSS 运行结构图,并对总控程序、模型程序、数据库进行结构和功能说明。提示:该决策支持系统需要利用 3 个模型(投入产出模型、线性规划模型和报表模
2、型(打印投入产出表)和两个数据库(投入产出数据库和线性规划数据库)。在 DSS 总控程序中要详细说明何时调用哪个模型运行,何时存取哪个数据库中的数据,何时进行数据计算。该 DSS需要两次调用投入产出模型:一次计算中间结果,一次计算最后结果。请注意,模型程序应该是一个标准程序,在一定的参数控制下,可得到中间结果,也可得到最终结果。该模型程序既适合于该问题的 DSS,也适合于其他问题的 DSS,不能是一个专用的模型程序。(20 分)一、模型 1.投入产出模型 投入:经济部门在进行经济活动时候的资源消耗;产出:经济部门在进行经济活动时候的成果;投入产出模型表示的是各个经济部门之间的投入产出关系。根据
3、公式可求得中间结果值 X 与最终产品值 Y 之间的关系:X=(I-A)-1Y 2.线性规划模型:根据约束方程 BXh 与目标方程 S=Piyimax,输入参数为 B、P、h,运用模型中的数学公式求解问题,最后输出Y 即为最终结果。3.;4.报表模型 调用投入产出数据库中的数据,根据投入产出模型的分析结果,得到投入产出表,并将其打印出来。不需要输入参数,可以手动调用,也可以用时间来触发,生成表格。二、数据库 1.投入产出数据库 首先对数据进行初始化,存入投入产出相关的数据,包括最终产品 Y=(yj),各种产品的单价 Pi,它们的投入产出直接消耗系数 A=(aij),企业总产品向量X=(xi)等用
4、于投入产出表计算的重要数据,方便模型对数据的提取。数据库本身可以对数据进行维护,如自动初始化,自动更新等操作。字段名 数据类型 长度 是否可为空 最终产品 -int 8 是 int 8 是 int 8 是 int 8 是 int 8 是;产品单价 float 16 是 float 16 是 float 16 是 float 16 是 float 16 是 直接消耗系数 float 16 是 -float 16 是 float 16 是 float 16 是(float 16 是 2.线性规划数据库 对数据进行初始化,存储的数据包括最终产品 Y=(yj),各种产品的单价为Pi,资源消耗系数矩阵
5、B=(bij),企业总产品向量 X=(xi)企业的资源(煤、电力、劳力)的约束方程为 BXh(“”表示)目标方程 S=Piyi 等线性规划是需要的数据。字段名 数据类型 长度 是否可为空 资源消耗系数 float 8 是 float 8 是&float 8 是 float 8 是 float 8 是 总产品 int 16 是 int 16 是 int 16 是 int 16 是?int 16 是 资源约束 h float 16 是【最终产品 int 8 是 int 8 是 int 8 是 int 8 是 int 8 是 产品单价 float 16 是¥float 16 是 float 16 是
6、 float 16 是 float 16 是 三、总控程序(1)根据系统提示选择需要的服务,输入提示要求的相关数据,保存到数据库中。(2)调用投入产出模型,提取投入产出数据库中 A、Y 作为模型的输入参数。调用模型内部的公式解决问题,根据输入参数判断需要输出的是中间结果还是最终结果,将结果输并存入投入产出数据库中。(3)调用线性模型,提取线性规划数据库中的数据作为输入参数,根据模型内部公式进行数据计算,既要符合约束条件,又要使得目标函数值最大,最终得出 Y 向量,将结果输出并存入投入产出数据库。(4)调用投入产出模型,提取投入产出数据库中的 A、Y 作为输入参数。调用模型内部公式计算出需要的结
7、果 X,根据输入参数判断需要的输出结果,输出结果,并存入投入产出数据库。(5)调用报表模型,提取投入产出数据库中的数据,得出投入产出表并打印。四、运行结构图 )2、教材中节物资分配与调拨决策支持系统,详细给出模型库设计,包括主要模型、存储形式说明,数据库设计,各接口说明(各模块之间的调用顺序、数据存取关系)。(30 分)一、分析问题 物资分配调拨问题是根据各单位提出对物资的需求申请,按仓库的库存情况制定分配方案,再根据分配放案以及仓库和单位的距离制定物资运输方案。最后按照物资运输方案制定各仓库的发货表和各单位的接收表,修改各仓库库存数和各单位的物资数。该决策问题需要设计多个数据库和多个模型共同
8、求解。总的处理流程如图:物资申请 和库存的 计划汇总 制定物资 分配方案 物资调拨 制定物资 运输方案 制定物资 调拨方案 打印 报表 图 3 物资分配调拨流程图 二、具体方案 通过上述分析可知该决策问题共涉及 6 个模型:汇总模型,预处理模型、分配模型、运输优化模型、调拨模型、制表模型。其中汇总、预处理、调拨、制表模型都是数据处理模型,属于管理业务工作。分配和运输优化属于数学模型。分配模型属于平衡分配决策,它要达到的目标是使物资分配尽量合理,该模型的计算公式是分配决策方法之一,也可以采用别的分配方法。运输模型属于优化决策,它使运输过程达到总吨公里数最小。该 6 个模型以程序形式出现,均放入模
9、型库中。该方案包括十个数据表(1)单位申请数据表;(2)仓库库存数据表;(3)物资总申请数据表;(4)物资总库存数据表;(5)物资分配数据表;(6)距离数据表;(7)物资调拨数据表;(8)仓库发货数据表;(9)单位收货数据表;(10)单位物资数据表。三、具体表设计(1)单位申请数据表 名称 类型 长度 是否允许为空 描述 marketno(pk)char 3 否 单位号 goodsno(fk)char 13 否 资源编号 goodssum bigint 10 是 申请数量 (2)仓库库存表 名称 类型 长度 是否允许为空 描述%w_no(pk)char 3 否 仓库号 goodsno(fk)c
10、har 13 否 资源号 goodsnum,bigint 10 是 库存量 unit varchar 6 否 数量单位 (3)物资分配数据表#名称 类型 长度 是否允许为空 描述 marketno(pk)char 3 否 单位号 goodsno(fk)char 13 否 资源编号 goodssum bigint 10 是 分配数量 (4)距离数据表 名称 类型 长度 是否允许为空 描述 marketno(pk)char 3 否 单位号 w_no(fk)char 3 否 仓库号 distance varchar 10 否 距离 unit varchar 10 否 计量单位 (5)物资调拨分配数据
11、表 名称 类型 长度 是否允许为空 描述(marketno(pk)char 3 否 单位号 w_no(fk)char 3 否 仓库号 goodsno(fk)=Q 即库存量=申请量,我们采用产销不平衡的沃尔格运输方法;若 SQ,则按产销平衡沃尔格运输方法计算。制定物资调拨方案 利用物资调拨数据库中调拨物资的数量,经过物资调拨模型将所有物资仓库调拨给单位所有的数量,转换成个仓库的发货数据库和各单位的接收数据库,在制定表格,打印各仓库的发货报表和各单位的收货报表。制定物资调拨方案包括物资调拨模型和制表模型,他们都是数据处理模型。其中物资调拨模型完成物资调拨汇总工作(类似于计划汇总的旋转处理),同时修
12、改库存和物资的两个数据库。制表模型完成发货和收货报表的打印。它们和数据库之间的关系如图:图 8 物资调拨与制表模型与数据库的关系 物资分配调拨决策支持系统体系结构 为了使模型部件和数据部件有机结合,要建立总控程序,即控制各模型有序运行,数据有效存取,同时进行必要的人机对话,允许决策用户修改分配方案和调拨方案,形成决策支持系统,达到人机共同进行决策。该决策支持系统的基本方案按目前分析的模型和数据库进行组合运算,得到辅助决策信息。其运行结构如图:物资调拨数据库 物资分配数据库 实际距离矩阵 运输问题 模型 物资调拨数据库(物资调拨仓库发货数据库 单位收货数据库 制 表 修改 发、收报表*)仓库库存
13、数据库 计划汇总模型 总申请数据库 总库存数据库 开始 计划汇总,分配处理¥60,单位为分钟)。训练集见表:实例 属性 目标WillWait Others WCond WEnd Cons Price Rain Res WEst X1 Yes No No Some EX No、Yes 0-10 Yes X2 Yes No No Full CH No No)30-60 No X3 No Yes No Some CH No No 0-10!Yes X4 Yes No Yes Full CH Yes No 10-30 Yes X5 Yes No Yes Full EX No Yes 60 No X6
14、No Yes No Some MID Yes Yes 0-10 Yes X7 No Yes No None CH Yes No 0-10 No X8 No No(No Some MID Yes Yes 0-10 Yes X9 No Yes Yes Full CH Yes No 60 No X10 Yes Yes Yes Full EX No Yes 10-30 No X11 No No No None CH,No No 0-10 No X12 Yes Yes Yes Full CH No!No 30-60 Yes 要求:建立 BP 神经网络模型,并进行容错性分析。(25 分)解:通过对训练集进
15、行训练建立神经网络模型,首先对训练集输入数字化,之后建立神经网络,设置输入输出向量,网络层数及网络各层权值阈值。然后进行训练得到神将网络模型。最后进行容错分析,可以训练原训练集的数据,分析网络的准确性,均方差的误差值等,也可以对原训练集数据稍作修改,看是否会影响所作的决策。对训练集数据修改后如下表,用来进行容错分析。实例 属性 目标WillWait Others WCond WEnd Cons Price Rain Res WEst X1 1|0 0 0-1 0 1 1 X2 1 0%0 1 1 0 0 0 X3 0 1 0 0 1 0 0 1 X4 1 0 1 1、1 1 0 0 1 X5
16、1 0 1 1-1;0 1-1 0 X6 0 1 0 0 0 1 1 1 X7 0 1 0-1 1 1 0、0 X8 0 0 0 0 0 1 1 !1 X9 0 1 1 1 1 1 0-1 0 X10 1 1 1 1-1 0 1 0 0 X11 0 0 0-1 1 0 0 0 X12 1#1 1-1 1 0 0 1 1:等待 0:不等 在 MATLAB 中运行如下代码 P=1 0 0 0-1 0 1 1;1 0 0-1 1 0 0 0;!0 1 0 0 1 0 0 1;1 0 1-1 1 1 0;1 0 1-1-1 0 1-1;0 1 0 0 0 1 1 1;0 1 0 1 1 1 0 1;0
17、 0 0 0 0 1 1 1;0 1 1-1 1 1 0-1;1 1 1-1-1 0 1;0 0 0 1 1 0 0 1;1 1 1-1 1 0 0 0;T=1 0 1 1 0 1 0 1 0 0 0 1;pause;运行结果 net=newff(minmax(P),3,1,tansig,purelin,traingdm)Warning:NEWFF used in an obsolete way.In nntobsu at 18 In newff at 105 See help for NEWFF to update calls to the new argument =Neural Netw
18、ork object:architecture:numInputs:1&numLayers:2 biasConnect:1;1 inputConnect:1;0 layerConnect:0 0;1 0 outputConnect:0 1 numOutputs:1 (read-only)numInputDelays:0 (read-only)numLayerDelays:0 (read-only)subobject structures:/inputs:1x1 cell of inputs layers:2x1 cell of layers outputs:1x2 cell containin
19、g 1 output biases:2x1 cell containing 2 biases inputWeights:2x1 cell containing 1 input weight layerWeights:2x2 cell containing 1 layer weight functions:adaptFcn:trains:divideFcn:(none)gradientFcn:calcgrad initFcn:initlay performFcn:mse trainFcn:traingdm parameters:adaptParam:.passes divideParam:(no
20、ne)gradientParam:(none)initParam:(none)performParam:(none)trainParam:.epochs,.goal,.lr,.max_fail,.mc,.min_grad,.show,.time weight and bias values:IW:2x1 cell containing 1 input weight matrix LW:2x2 cell containing 1 layer weight matrix b:2x1 cell containing 2 bias vectors other:userdata:(user inform
21、ation)inputWeights=1,1 inputWeights=*inputbias=1 inputbias=layerWeights=2,1 layerWeights=layerbias=2 layerbias=pause;,=50;=;=;=1000;=1e-3;pause;net,tr=train(net,P,T);TRAINGDM-calcgrad,Epoch 0/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 50/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 100/100
22、0,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 150/1000,MSE,Gradient 1e-010#TRAINGDM-calcgrad,Epoch 200/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 250/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 300/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 350/1000,MSE,Gradient 1e-010 TRAINGDM-calc
23、grad,Epoch 400/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 450/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 500/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 550/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 600/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 650/1000,MSE,Gradient 1e
24、-010 TRAINGDM-calcgrad,Epoch 700/1000,MSE,Gradient 1e-010、TRAINGDM-calcgrad,Epoch 750/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 800/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 850/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 900/1000,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 950/10
25、00,MSE,Gradient 1e-010 TRAINGDM-calcgrad,Epoch 1000/1000,MSE,Gradient 1e-010 TRAINGDM,Maximum epoch reached,performance goal was not met.pause A=sim(net,P)/A=Columns 1 through 11 Column 12 E=T-A:E=Columns 1 through 11 Column 12 MSE=mse(E)MSE=test=1 0 1 0-1 0 1 0;1 0 0-1 1 0 1 0;0 1 0 1 1 0 0 1;1 0 1
26、-1 0 1 0;1 1 1-1-1 0 1-1;0 1 1 0 1 1 1 1;0 1 0 1 1 0 0 1;0 0 0 0 0 1 0 1;1 1 1 0 1 1 0-1;1 1 1-1-1 0 1;)0 1 0 1 1 0 0 1;1 1 1 0 1 0 0 0;A1=sim(net,test)A1=Columns 1 through 11 Column 12 -E1=T-A1 E1=Columns 1 through 11 Column 12 MSE=mse(E1)MSE=pause echo off(得到如下的曲线图:对运行结果进行容错性分析:实例 输入 输出 WillWait(1
27、)输出 WillWait(0)结果 Oths WCon WEn Con Price Rai【Res WEst X1 1 1 0 0-1)0 1 1 等(1)X2 1 0 1 1 1 0 0 -1 不一定 X3 0 1 0、1 1 0 0 1 等(1)X4 1 0】0 1 1 1 0 0 等(1)X5 1,1 1 1-1 0 1 -2 不等(0)X6 0 1 1 0 0 0 1 1 不一定、X7 0 1 1-1 0 1 0 1 /不等(0)X8 0 1 1 0 0 1 1 1 (不一定 X9 0 0 0 0 1 1 0 -2¥不一定 X10 1 1 0 0 1 0 1 0 不等(0)X11 1
28、1 1-1 1 0:0 1 不等(0)X12 1 1 0 0 0 0 0 -1 等(1)4、编制旅行商路径优化问题的遗传算法程序,并计算一个实例。(25 分)一、旅行商问题概述 旅行商问题(Traveling Saleman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为 TSP 问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。TSP 问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n 个点的所有排列的集合,大小为n-1。可以采用遗传算法来搜索解空间,群体搜索
29、易于进行并行化处理,它并不是盲目穷举,而是启发式搜索,由于采用了遗传、变异、突变,丰富了种群的基因,优化了解空间。遗传算法是建立在最优解与较优解的差别小的基础上的,也可以说是建立在父母漂亮,小孩很有可能也漂亮的理论基础上的。遗传算法得出的很有可能是局部最优解,而不是全局最优解。(百度)二、遗传算法(GA)遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国 Michigan大学教授于 1975 年首先提出来的,并出版了颇有影响的专著Adaptation in Natural
30、and Artificial Systems,GA 这个名称才逐渐为人所知,教授所提出的 GA 通常为简单遗传算法(SGA)。三、问题描述 假设有一个旅行商人要拜访 n 个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP 问题是一个组合优化问题。该问题可以被证明具有 NPC 计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。四、问题分析 TSP 问题就是寻找一条最短的遍历 n 个城市的最短路径,即搜索自然子集 W=1,2,n(W 的元素表示对 n 个城市的编
31、号)的一个排列(W)=V1,V2,Vn,使 len=d(Vi,Vi+1)+d(V1,Vn)取最 小值,式中的 d(Vi,Vi+1)表示城市 Vi 到城市 Vi+1 的距离.遗传算法是具有“生成+检测”的迭代过程的搜索算法。它的基本处理流程如图 1 所示。由此流程图可见,遗传算法是一种群体型操作,该操作以群体中的所有个体为对象。选择(Selection)、交叉(Crossover)和变异(Mutation)是遗传算法的 3 个主要操作算子,它们构成了所谓的遗传操作(genetic operation),使遗传算法具有了其它传统方法所没有的特性。遗传算子包含如下6 个基本因素:(1)参数编码:由于
32、遗传算法不能直接处理解空间的解数据,因此必须通过编码将它们表示成遗传空间的基因型串结构数据。(2)生成初始群体:由于遗传算法的群体型操作需要,所以必须为遗传操作准备一个由若干初始解组成的初始群体。初始群体的每个个体都是通过随机方法产生。(3)适应度评估检测:遗传算法在搜索进化过程中一般不需要其他外部信息,仅用适应度(fitness)值来评估个体或解的优劣,并作为以后遗传操作的依据。(4)选择(selection):选择或复制操作是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。个体适应度越高,其被选择的机会就越多。此处采用与适用度成比例的概率方法进行选择。具体地说,就是首
33、先计算群体中所有个体适应度的总和(f),再计算每个个体的适应度所占的比例(iff),并以此作为相应的选择概率sP。(5):(6)交叉操作:交叉操作是遗传算法中最主要的遗传操作。简单的交叉(即一点交叉)可分两步进行:首先对种群中个体进行随机配对;其次,在配对个体中随机设定交叉处,配对个体彼此交换部分信息。(6)变异:变异操作是按位(bit)进行的,即把某一位的内容进行变异。变异操作同样也是随机进行的。一般而言,变异概率mP都取得较小。变异操作是十分微妙的遗传操作,它需要和交叉操作配合使用,目的是挖掘群体中个体的多样性,克服有可能限于局部解的弊病。这 6 个要素构成了遗传算法的核心内容,其流程如图
34、 1 所示。图 1 遗传算法的基本流程 遗传算法解题的基本步骤如下:Step1:参数设置及种群初始化;Step2:对不可行解进行贪婪修复;Step3:适应度评价;Step4:轮盘赌选择;Step5:交叉;.Step6:变异;Step7:对不可行解进行贪婪修复;Step8:适应度评价;Step9:终止条件判断,若未达到终止条件,则转到 Step4;Step10:输出结果。五、运行结果 初始种群中的一个随机值:Rlength=+004 Rlength=+004 迭代次数c 400 迭代后结果 Rlength=+004 选 择 编码和初始种群生成种群中个体适应度的检测评估交 叉变 异 36 个城市坐
35、标 随机化结果 遗传算法求解结果 六、结果分析 由遗传算法对以上求解可以看出,用遗传算法来求解 TSP 问题是可行的。用遗传算法求解时,增加迭代次数,可以得到更加优良的结果,但是会需要更长的时间,即一个优良的结果往往是以时间为代价的,这种情况要依据具体问题具体分析,平衡两者在问题求解时的比重。另外,对选择算法进行优化,会提高遗传算法的性能,这些都需要在实践中不断积累和广泛涉猎优良算法。最后,遗传算法得到的未必是最优解,我们可以根据需要进行多次求解,从而比较得出符合要求的结果。七、程序源代码 a=1304 2312;3639 1315;4177 2364;3712 1399;3488 1535;
36、3326 1556;.3238 1229;4196 1044;4312 790;2864 570;1927 1970;2562 1756;.2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;.3780 2212;3676 2578;1537 2838;2745 2931;3429 1908;3507 2376;.2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;.3780 2212;3676 2578;1537 2838;2745 2931;3429 1908
37、;3507 2376;.;%a:假定的36个城市的坐标 n=100;%n:种群个数 C=200;%C:停止代数?m=2;%m:适配值淘汰加速指数,不宜太大 Pc=;%Pc:交叉概率 Pm=;%Pm:变异概率 D=distance(a);%生成距离矩阵 R,Rlength=GeneTSP(D,a,n,C,m,Pc,Pm);function R,Rlength=GeneTSP(D,a,n,C,m,Pc,Pm)N,NN=size(D);%(31*31)farm=zeros(n,N);%存储种群%随机生成初始种群,随机产生从1到N的N个初始值,例如,RANDPERM(6),可能结果为:2 4 5 6
38、1 3.for i=1:n%farm(i,:)=randperm(N);end R=farm(1,:);%一个随机解(个体)scatter(a(:,1),a(:,2),x);%画 出 所 有 点,a(:,1):X 坐标,a(:,2):Y坐标 hold on pause(1)%画出随机解得路径图 figure;plotaiwa(a,R);hold on pause(1)%输出随机的解得路径和总距离 disp(初始种群中的一个随机值:)Rlength=myLength(D,R)%计算各个个体总距离和适配置 len=zeros(n,1);%存储路径长度 fitness=zeros(n,1);%存储适
39、配值 counter=0;while counterrand&i=rand FARM(i,:)=mutate(FARM(i,:);end end FARM=R;FARM;%将随机产生的n-aa个体加入从后面种群,将上次迭代的最优解从前面加入种群 aa,bb=size(FARM);%保持种群规模为n if aan FARM=FARM(1:n,:);end%更新farm farm=FARM;clear FARM%更新迭代次数 counter=counter+1;end%结果输出 Rlength=myLength(D,R)figure plotaiwa(a,R)%画图 disp(迭代次数c);dis
40、p(C);disp(迭代后结果);Rlength=myLength(D,R)%结果输出 function D=distance(a)c,d=size(a);%此例中c=36,d=2 D=zeros(c,c);%申请一个0阵 for i=1:c for j=i:c bb=(a(i,1)-a(j,1).2+(a(i,2)-a(j,2).2;D(i,j)=bb;%计算第i个城市到j城市的距离 D(j,i)=D(i,j);end end%总路径len function len=myLength(D,p)N,NN=size(D);len=D(p(1,N),p(1,1);for i=1:(N-1)len=
41、len+D(p(1,i),p(1,i+1);end%绘制路径示意图 R记录路径%a:假定的36个城市的坐标%R:最短路径 function plotaiwa(a,R)scatter(a(:,1),a(:,2),x)hold on plot(a(R(1),1),a(R(36),1),a(R(1),2),a(R(36),2)hold on for i=2:length(R)x0=a(R(i-1),1);y0=a(R(i-1),2);x1=a(R(i),1);y1=a(R(i),2);xx=x0,x1;yy=y0,y1;plot(xx,yy)hold on end%交叉算法采用部分匹配交叉 func
42、tion a,b=cross(a,b)L=length(a);if L=rand&L10 W=ceil(L/10)+8;else W=floor(L/10)+8;end p=unidrnd(L-W+1);for i=1:W%交叉 x=find(a=b(1,p+i-1);y=find(b=a(1,p+i-1);a(1,p+i-1),b(1,p+i-1)=exchange(a(1,p+i-1),b(1,p+i-1);a(1,x),b(1,y)=exchange(a(1,x),b(1,y);end%变异算法 function a=mutate(a)L=length(a);rray=randperm(L);a(rray(1),a(rray(2)=exchange(a(rray(1),a(rray(2);