多种算法

2024-07-26

多种算法(精选七篇)

多种算法 篇1

伴随改革开放,电力行业处在从计划到市场体制转变的探索期和电力市场逐步建立期,各种各样的电能交易模式应运而生,各区域电网、省市电网纷纷投资建设电力市场技术支持系统[1],但这些系统因定位于实际运行,极大地受到实际需求和现有模式的制约,不能适应探索期快速变化的要求,因此重复建设在所难免,能不能有个系统,跳出实际因素的制约,并能充分反映这些已经出现的各种市场交易模式呢?基于此目的,2008年,我们组织了一个研发小组,研发一套电力市场电能交易仿真系统。

1 交易仿真系统

交易仿真系统分为七个模块(如图1所示)。市场主体基本信息管理、历史记录管理、市场预测系统、交易配置管理、交易申报管理、交易模拟管理、交易影响分析和指标管理。

交易仿真系统的定位是:(1)为政府部门、电监会提供政策研究、市场研究、电价研究提供决策咨询服务;(2)为电力市场参与者提供参与策略研究服务;(3)为电力市场参与者提供培训服务;(4)为电力市场管理者提供对电力市场分析的服务;(5)为电力市场支持系统开发和维护提供服务平台。

交易仿真系统提供的服务是:(1)研究国家政策变化对电力市场影响;(2)研究电价变化对电力市场影响;(3)研究交易模式变化对电力市场影响;(4)研究电力市场交易过程及结果分析评估。

2 交易模式原型

交易仿真系统由多种交易模式组成,目前比较常见的交易模式有:撮合交易、竞价交易、节能调度。

按照交易时间范围分,交易又可以分为:年度交易、月度交易、单笔挂牌(多日)交易、日前交易。

按照市场级别分:一级电力市场(国家电网,交易主体为区域电网),二级电力市场(区域电网,交易主体为各个省市电力公司或者电厂),三级电力市场(省市电网公司),本系统主要针对二级电力市场,并以华中电网作为案例原型。

2.1 撮合交易

对于二级电力市场而言,撮合交易的交易主体是各省市公司,还有部分的电厂可以直接参与交易。

撮合交易将交易所在期限内的每天分为多个不连续的时段,每个时段可以单独进行报价,单独进行撮合,匹配原则是根据买卖价差大者优先成交(扣除买卖双方之间的线路损耗),并受限于跨省联络线容量。

单个时段匹配算法步骤如下:

(1)获取某个时段的售电和购电报价;

(2)依次计算购电方与售电方之间的价差,价差等于购电方折算后的价格减去售电方申报价格;

(3)购电方折算后的价格=购电方的申报价格×(1-输电线损率)-输电价格;

(4)价差大于或等于零的购电方与售电方之间形成一个有效匹配对;

(5)从价差最大的匹配对开始撮合,计算该匹配对的成交电力、电量和成交价格;

(6)存在价差相同的多个匹配对时,以售电方申报价格低的优先成交;若售电方申报价格相同,以申报时间早的优先成交;

(7)按照购、售电双方平均分配价差的原则,确定匹配对的成交价格;

(8)确定一个匹配成交对后,相应调整可用通道容量和各主体的报价中可供撮合的容量,继续进行其他有效匹配对的撮合计算,直到可供撮合的容量为零或跨省联络线的可用通道容量为零。

2.2 竞价交易

竞价交易的交易主体仍是各省市及其所有参与竞价的电厂机组,算法分为三步:第一步确定开机机组,第二步确定各机组的发电量,第三步确定各机组发电曲线,具体步骤如下:

(1)根据省(市)的用电需求,将省(市)的发电机组按售电报价排序,报价低者优先满足本省。这样就将省(市)的发电机组分为了边际内机组和边际外机组。

(2)将各个省(市)的边际外机组报价考虑网损和跨省输电费折算到其他省(市),并与其他省(市)的边际内机组进行匹配。用其他省(市)的边际内机组的报价值减去该折算值,如果报价值之差大于0,则形成一个匹配对。依次循环,直至列出全部的匹配对。

(3)将匹配对按照报价差进行排序,报价差最大者优先“中标”,中标发电量为两者发电量和线路容量三者中的最小值。

(4)在确定完开机方式后,对用电负荷96点曲线进行分配,形成所有开机机组的96点发电负荷曲线。

2.3 节能调度交易

2007年国家有关部委出台了《节能发电调度办法》[2],节能调度交易成为大量关注电力市场的研究人员的研究重点,并且在全国有几个省市电力公司已经开始了试点工作,经过充分论证,只要将竞价交易中的售电价改为煤耗,节能调度和竞价算法是一致的,因此这里就不赘述。

3 统一算法的实现

3.1 算法的统一

经过对上述交易模式的仔细研究和分析,笔者认为:不管是哪种模式,都有一个共同的要素——匹配交易,即有一个需方队列和一个供方队列,两个队列根据不同的交易模式进行不同地排序,并形成有效的匹配对队列,这个队列按照煤耗差或者价差排序,形成一个有序匹配对队列,按照这个思路,笔者设计了统一的算法,其中总算法框图如图3。

3.2 匹配

三种交易模式在框图中的统一点是“匹配”。

匹配对于三种交易来说,所起的作用是不一样的,对于节能调度交易来说,匹配是通过优化确定煤耗低的机组优先中标为开机机组,对于竞价交易来说,匹配是通过优化确定报价低的机组优先中标为开机机组,对于撮合交易来说,匹配就是售购双方(省市电力公司或部分可以参与交易的电厂)按照价差(扣除线路损耗)大优先成交的原则进行的交易,包括确定成交量。

对于不同的交易虽然匹配的作用不同,但执行的算法却是一样的(如图4匹配框图)。

(1)准备匹配对队列:根据申报和交易模式,形成两个有序队列:需方队列(称之为A队)和供方队列(称之为B队)。

(2)产生匹配对队列:将A队每个数据和B队所有数据匹配,形成匹配对,并计算比较量(煤耗或申报电价)的差额,排除差额不满足要求的匹配对,按照差额倒序形成一个有效匹配对的队列。

(3)成交:将差额最大的匹配对作交换,并通过考虑供需双方的电量、以及联络线容量,计算交换电量。

(4)调整匹配对列,将刚成交的匹配对从匹配对队列中删除,并根据交换量修正其他相关匹配对,即某个匹配对的供方和刚成交的匹配对的供方一样,则将该匹配对的供量大于交换量,则供量减去交换量,如果小于等于交换量,则去掉该匹配对,需方用同样的方法处理。

3.3 动态匹配对队列

在匹配交易算法中,匹配对队列随着算法的执行是在动态地变化着的,一直到匹配对处理完,算法结束,这里给出一个“动态匹配对队列”的概念,并用数学符号定义,使得动态匹配对队列问题变成一个数学问题,以便更精确地描述,并启发读者作更深入的研究。

动态匹配对队列为一个六元组:

为供方集合,设a∈A,则a是一个四元组:

,其中id为元素身份,相当于供方,c为比较值,煤耗或电价,p为报价,v为可供交易的量。

为需方集合,设b∈B,则b是一个四元组:

,其中id为元素身份,相当于需方,c为比较值,煤耗或电价,p为报价,v为可供交易的量。

(3)Rab

是一个A×B关系矩阵,我们称之为交易矩阵,假设,A={a1,a2,a3},B={b1,b2,b3},则Rab矩阵如下:

设,则r(a,b)是一个三元组:r(a,b)=(a,b,lr),lr为限制因子,即ida和idb之间的联络线限制容量。

(4)J

为成交结果集,设jab∈J,则jab为一个四元组:,p为ida和idb之间的成交价,v为成交量。

(5)F:为一个处理集,包括成交及队列调整。

(a)成交,方法是在Rab中选取ca-cb(我们称之为差额)最大者,经过处理,加入J集合中。

这里有两种情况,分别成为情况一和情况二。

情况一,如果Rab中只有一个元素的差额最大时,如图5中r(a2,b2)的差额最大,设:

则:

情况二,Rab中如果有两个或以上元素的差额同样最大,并且在矩阵属于同一列或同一行时,如图5矩阵中虚线框内,假设图5中r(a2,b2)和r(a1,b2)的差额一样最大,则:

(b)调整匹配对队列:

对于情况一,作如下处理:

对于纵向虚线框集合,中每个元素,如果则:修改每个元素的b2的vb2为,否则:

对于横向虚线框集合,中每个元素,如果则:修改每个元素的a2的va2为,否则:

对于情况二,处理道理和情况一相同,由于有两个匹配对成交,相应的虚线框有两对,需要分别处理,这里就不赘述。

4 结论

本文用一个统一的算法——动态匹配对队列算法统筹三种目前流行的电能交易模式,这正是仿真系统所需要的:

1)目前,电力体制处在改革期,研究者需要探索各种可能的交易模式并分析其效果,是电力行业大量建设交易仿真系统的原因,也是华中电网成立交易仿真系统项目组的原因,不确定性和可扩展性是其主要特征,本算法包含了国内已经出现的三种交易模式,成为交易仿真系统的核心模型,在国内可以为其他类似系统建设者提供模型,也可以为实际运行电力交易技术支持系统所借鉴或采用。

2)一个成功软件系统主要特点是其包容性、代码的重用性和可读性,本算法正好体现了这一点,算法灵活,适应能力强,概念明确易于学习。

交易仿真系统最为显著的特点是灵活性、整体性和复杂性,它的灵活性是能适应各种交易模式和各式各样参数配置,这些从客观上决定了系统的复杂性,它的整体性是系统用统一的算法、统一的界面去实现不同的交易模式。

要想实现统一的算法以达到降低实现复杂度的效果,需要我们从中归纳、抽象出它们共同的东西,以便寻找统一的实现算法,降低复杂度。

参考文献

[1]尚金成,黄永皓,等.电力市场技术支持系统设计与关键技术研究[M].北京:中国电力出版社,2002.

[2]张维,范玉宏.华中电力市场双边交易模拟分析[J].电力系统自动化,2008,32(11):97-102.ZHANG Wei,FAN Yu-hong.Analysis on Bilateral Transaction Simulation of Central China Electricity Market[J].Automation of Electric Power Systems,2008,32(11):97-102.

多种算法 篇2

[关键词] 客户分类 时间窗 车辆路径问题 多种群并行遗传算法

一、引言

车辆路径问题(VRP)是1959年由Dantzig GB等首次提出,它是个NP难问题,只有当客户和路段较少时,才能求得精确解。启发式算法成了求解该问题的重要方向,国内外学者已经提出了多种求解该问题的启发式算法,如禁忌搜索算法、节约算法、蚁群算法、模拟退火算法、神经网络算法以及混合启发式算法。但是这些算法都只能求出该问题的某一特殊类型或规模较小时的近似最优解或最优解。由于VRP问题的特殊性,利用遗传算法的搜索能力解决此类问题是很自然的想法。

可是传统的标准遗传算法有两个严重的缺点:容易早熟收敛以及在进化后期搜索效率较低。为此,本文提出一种改进的遗传算法——多种群并行遗传算法。在大多数情况下,相比较于单种群遗传算法,多种群遗传算法得以实现多种群的协同进化,具有更好的全局搜索能力,有效地避免了早熟收敛。

本文从顾客差异化的角度出发,利用聚类分析对客户进行分类,研究基于客户分类的时间窗约束的车辆配送路径问题,根据其特点,构造了求解该问题的数学模型,该模型克服了传统时间窗车辆配送模型对各个客户不加区分,进行同等处理的不合理性,并使用多种群的并行遗传算法进行计算。通过实验计算,证明了该算法的良好寻优性能。

二、基于客户分类的带时间窗VRP问题的数学模型

有时间窗的车辆路径问题描述为:一个配送中心,拥有一定数量容量为q的车辆,负责对N个客户进行货物配送工作,客户i的货物需求为gi,且gi

在以上的做法中,处理时间约束时,对于所有的客户来说,都是同等处理,这显然不符合实际情况。不同的客户对于时间限制有不同的要求,而对于配送方来说,对于不同的客户,也应采取不同的配送优先级别。在这里,根据客户的订货量,货物对于客户的重要性,客户的业务需求拓展潜力等因素,利用聚类分析的方法将客户分成三类,第一类是优先客户,货物必须在规定的时间范围内到达,配送方如果违反规定,将很可能失去此客户或者支付极高的违约金;第二类是重要客户,他们的要求没有优先客户高,允许配送时间偶尔超出规定的时间范围;第三类是一般客户,他们对时间限制的要求相对是最低的。

根据以上的分类,分别对不同类别的客户调整时间窗的约束范围。对于第一类客户,必须严格遵守时间窗范围的约束;对于第二类客户,允许在原有时间窗范围的基础上,进行一定的调整(允许偶尔延迟若干小时);对于第三类客户,则不考虑其时间约束。

设配送中心编码为0。客户编码为1,2,……,n。其中第一类客户的编码为1,2,……,h;第二类客户的编码为h+1,h+2,……m;第三类客户的编码为m+1,m+2,……,n。定义变量

其中:s为车辆数目;n为客户数目;cij为车辆单位运距从i到j的运费;d和e为惩罚系数,第二类客户的时间窗约束允许在原来基础上分别调整u和v个小时;gi为客户i的货物需求量;q为车辆的容量:tij为连接客户i和客户j的行驶时间;ti为到达客户i处的时间;ETi为到达客户i处的规定最早到達时间;LTi为到达客户i处的规定最晚到达时间;wi为客户i处的服务时间。在上述模型中,式(2)表示目标函数;式(3)表示每辆车的配送量不超过其相应的容量约束;式(4)和(5)表示每个客户只能被一辆车服务一次;式(6)表示车辆从仓库出发并且最后回到仓库;式(7)表示车辆到达客户j的时间的计算公式;式(8)表示时间约束。

三、求解带时间窗的VRP问题的多种群并行遗传算法

由于标准遗传算法具有容易过早收敛以及在进化后期搜索效率较低的缺点,本文引入多种群并行遗传算法。其基本思想是:用多个子种群代替单一种群,每个子种群按一定的进化策略,遗传算子并行进化,用多个子种群代替原始种群在可行解空间进行搜索。不同子种群各自独立进化,每进化若干代(子种群独立进化的代数)就按照一定的迁移策略交换子种群中的个体。如此反复,直至找到最优解。以下是算法的步骤:

1.初始化

(1)编码

本文采用自然数编码。在使用s辆车访问n个客户的问题中,将染色体设计成长度为s+n-1的字符串,每个基因的取值范围是[1,s+n-1],即是用1,2,……,n表示客户,用n+1,n+2,……,s+n-1来表示配送中心。

(2)产生初始群体

考虑到问题的约束条件式(3),种群用随机方法生成,首先随机生成n个客户的排列,然后对各车辆依次分配客户,直到已分客户的需求量之和刚好小于该车的载重容量为止。

(3)适应度函数的确定

染色体在进行交叉、变异后会出现一些不满足问题中车辆装载容量约束的要求,因此对不满足要求的给予一定的惩罚。令

k=1,2,……s

则第i个染色体的适应度为fi=1/(Z+M)。

2.遗传算子设计

本文采用随机遍历抽样进行选择操作,而交叉和变异则采用了单点交叉和均匀多点变异。由于使用了代沟,子代的数量比当前种群数量要小,因此要使用基于适应度的重新插入。

3.种群的迁移

在各子种群进行独立的遗传操作(适应度计算、选择、交叉、变异、重插入)一定的代数以后,选择子种群中最适应的一定数量的个体进行迁移。最邻近的子种群在它们之间交换个体,均匀地重插入移民个体。

四、实例计算与分析

某配送中心为8个客户提供配送服务。这里,先根据各个客户的货物需求量,货物对于客户的重要性,客户的业务需求拓展潜力等三个因素(如表1所示)使用K-均值聚类法进行客户分类,通过SPSS12.0分析可得,客户3和客户6为第一类客户,客户4、客户7和客户8 为第二类客户,其余为第三类客户。参考文献的实例数据,确定服务时间和客户规定的时间范围,以及配送中心与各个客户之间的距离。出车时间为早上6∶00,每辆车的平均行驶速度为60公里/小时,i到j的行驶时间可以由式tij=dij/60求出,假设各点之间的距离即为运输费用。而完成该配送任务所需的车辆数s可由下式估计确定,α为装车复杂性系数,取值为[0.5,1] 。每辆车的最大载重量为10吨。求,如何安排车辆的行驶路线,使得总运行费用最低。

注:用取值范围在[0,1]之间的数表示货物对于客户的重要性和客户的业务需求拓展潜力,取值越大表示程度越高。

令装车复杂性系数为α=0.8,因此,所需车辆为3辆,则染色体为1~10的自然数的排列(其中9和10为虚拟的配送中心)。惩罚系数d=100,e=200。

根据问题的特点,本文在利用多种群并行遗传算法求解该问题时,算法参数设定如下:群体规模m=20;个体基因串长度为l=10;最大进化代数gmax=100;子种群数为nsub=10,每隔20代相邻的子种群中最适应的20%的个体进行交换;交叉概率pc=0.8;变异概率pm=0.03。

根据给出的例子,用Matlab编写程序来实现以上的遗传算法,我们进行了10次求解,计算结果如表2所示。10次费用的平均值为157,其中第3次和第6次的计算结果最好,满意解为6-7-4-9-1-5-3-10-8-2和1-5-3-9-6-7-4-10-2-8,费用为153,对应的车辆行驶路径均为0-6-7-4-0,0-1-5-3-0,0-8-2-0。将其结果与标准遗传算法做比较,可以发现多种群改进遗传算法可以得到较好的计算结果。

五、结束语

综上所述,本文对传统的带时间窗约束的车辆配送路径问题进行了改进,建立了基于客户分类的带时间窗约束的车辆配送路径模型,该模型相对于传统模型而言,可以更好地反映客户之间的差别,并且提高了车辆配送的灵活性。另外根据该问题的特点,我们应用多种群并行遗传算法进行求解。计算结果表明,该算法相比较标准遗传算法,搜索能力得到加强,收敛性也提高了,能够得到更好的结果。

参考文献:

[1]Dantzig G B,Ramser J H. The Truck Dispatching Problem[J].Management Science,1959,10(6):80-91.

[2]陈湘州杨勇王俊年:一种改进的自然数编码遗传算法在非满载时间窗车辆优化调度问题中的应用[J].长沙电力学院学报,2004,19(2):57

[3]王 薇吴敏等:基于多种群并行遗传算法的原料库存的优化[J].控制工程,2003,10(1):33

[4]Eshelman L, Schaffer J D.Real-coded genetic algorithms and interval schemata[A].In Whitley L D (Ed.), Foundations of Genetic Algorithms 2[C].Los Altos,CA,Morgan Kaufmann,1993,187-202.

[5]雷英杰張善文李续武等:MATLAB遗传算法工具箱及应用[M].西安电子科技大学出版社,2005

[6]宋松柏蔡焕杰康艳:约束优化问题的遗传算法求解[J].西北农林科技大学学报(自然科学版),2005,33(1):152

[7]张文彤:SPSS统计分析高级教程[M].高等教育出版社,2004

[8]宋厚冰蔡远利:带时间窗的车辆路径混合遗传算法[J].交通运输工程学报,2003,3(4):114

[9]宋伟刚张宏霞佟玲:有时间窗约束非满载车辆调度问题的遗传算法[J].系统仿真学报,2005,17(10):2594

[10]Malmborg,Charles. Genetic Algorithm for Service Level Based Vehicle Scheduling[J].European Journal of Operational Research,1996,93(1)

多种内部排序算法的可视化实现 篇3

在计算机科学与技术应用中,一个排序算法(Sorting algorithm)是一种能将一系列同质元素依照某种特定顺序规则放置到一个有序列表中的算法。最常用到的排序方式是数值顺序或字典顺序。一些排序算法对于其他算法(比如搜索算法与合并算法)的性能优化至关重要。排序算法也用在处理文字数据以及产生人机可读输出等应用。排序算法的输出必须遵守下列两个原则:(1)输出结果为递增或递减串行;(2)输出结果是原输入的一种排列或是重组。

当序列中存在两个或两个以上关键字相等的元素时,在排序前元素R[i]领先于元素R[j],经过排序后R[i]仍领先于R[j],则称所使用的排序方法是稳定的;反之,如果经过排序后R[j]领先R[i],则称所使用的排序方法是不稳定的。

由于待排序的记录数量不同,使得待排序过程中涉及的存储器不同,可将排序算法分为两大类:一类是内部排序,指的是将待排序列存放在计算机随机存储器中进行的排序过程;另一类是外部排序,指的是待排序列的数量巨大,在排序时尚需对外存进行访问的排序过程。文中实现的都是内部排序。

在排序过程中需进行两种基本操作:(1)比较两个元素的关键字的大小;(2)将元素移动到另一个位置。前一操作对大多数排序算法都是必要的,而后一个操作可以通过改变元素的存储方式来避免。待排的序列可有3种存储方式:(1)存放在地址连续的一组存储单元上,类似于线性表的顺序存储结构,在序列中相邻的两个元素,它们的物理存储位置也相邻。在这种存储方式中,元素之间的次序关系由其存储位置决定,排序时必须借助记录移动。(2)将序列存放在静态链表中,元素之间的次序由指针指示,则在排序过程中无需移动记录,仅需修改指针即可。(3)将待排序列本身存储在一组地址连续的存储单元中,同时设置一个记录各个元素的存储位置的伴随地址向量,在排序过程中无需移动元素,只需修改地址向量中的地址值,在排序结束之后再按照地址向量中的值调整元素的存储位置。

实例采用C#语言,对经典的内部排序算法进行完整的可视化设计。方案包含3个工程:第一个工程用于排序算法的实现,是整个方案的核心。它是一个简单、可扩展的架构。所有的算法实现函数根据算法本身名称命名,并且都接受一个ILis类型参数并返回一个IList对象。第二个工程用于GIF动画的绘制,它是一个辅助工程。所有GIF动画片段以算法名称加步骤索引(从0开始)命名。第三个工程是功能界面的设计与实现。

2 排序算法的实现

2.1 冒泡排序

冒泡排序(Bubble Sort)是一种交换排序算法。它将待排序的元素数组R[…n]垂直排列,每个元素R[i]看作是重量为R[i].Key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上浮。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。

下面的方法实现了冒泡排序算法:

2.2 双向冒泡排序

双向冒泡排序(Bidirectional Bubble Sort),也称为鸡尾酒排序,本质上是冒泡排序的一种变体。不同的地方在于双向冒泡排序是先从到低到高,然后从高到低;而冒泡排序则是从低到高比较序列中的每个元素。在性能上,前者更进一步。原因在于冒泡排序只从一个方向进行比较(由低到高)并且每次循环只移动一个元素。

排序过程中,冒泡排序在每次确定了最大的元素并把它放在列表最后一位,然后执行下一次循环过程时就减少了一个元素,依此类推。而鸡尾酒排序则是先从列表中寻找最大元素排在最后,然后排除掉这一元素,从后往前搜索,确定最小元素。然后排除掉这个最小元素,从前往后找剩下元素的最大元素。可能在计算机硬件资源上鸡尾酒排序算法不需要每次排序时都要把PC指针回归到第一个元素上,即不需要进行跳转。而是直接可以按照当前指针做地址递增或者递减操作即可。

下面的方法实现了双向冒泡排序算法:

2.3 桶排序

桶排序(Bucket Sort),也称为箱排序,其工作原理是将阵列分到有限数量的桶子里。每个桶子再进行个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。桶排序执行下列程序:

(1)设置一个定量的阵列当作空桶子。

(2)遍历序列,并且把元素条目一个一个放到对应的桶子去。

(3)对每个非空的桶子中的元素进行排序。

(4)从非空的桶子里把项目再放回原来的序列中。

桶排序算法要求数据的长度必须完全一样,程序过程要产生长度相同的数据,每次进行下一次的扫描顺序以上次扫描的结果为依据,所以设计上提供相同的两个桶数据结构。前一个保存每一次扫描的结果供下次调用,另外一个临时拷贝前一次扫描的结果以供前一个调用。桶式排序是数据排序,所以设置的桶的键值为0~9共10个桶。每次从数据的最后一个数位开始扫描,如果这个数位的值与桶的键值相等,就把这个数据放入桶内。桶可以看作是一个有序的链表,后进入的元素排在先进入的数据的后面,直到所有的数据都完成扫描,算作一次扫描。以后依次取倒数第二个扫描,按照桶的键值开始扫描,同样把数位的值与桶的键值相等的数据放入桶内。直到所有数据的最高数位也完成扫描。最后一次扫描完成,桶的键值从低到高,把这些链表串起来输出的结果就是原来数据的从小到大排序。平均情况下,桶排序以线性时间运行。像基数排序一样,桶排序也对输入作了某种假设,因而运行得很快。

下面的方法实现了桶排序算法:

2.4 梳排序

梳排序(Comb Sort)是一种不稳定排序算法。梳排序的基本思想源于泡沫排序和快速排序的改进,其要旨在于消除乌龟,亦即在阵列尾部的小数值,这些数值是造成泡沫排序缓慢的主因。相对地,兔子亦即在阵列前端的大数值,不影响泡沫排序的效能。

在泡沫排序中,只比较阵列中相邻的二项,即比较的二项的间距(Gap)是1,梳排序提出此间距其实可大于1,源于插入排序的希尔排序也提出相同的观点。在梳排序中,开始时的间距设定为阵列长度,并在循环中以固定比率递减,通常递减率设定为1.3。在一次循环中,梳排序如同泡沫排序一样把阵列从首到尾扫描一次,比较及交换两项,不同的是两项的间距不固定于1。如果间距递减至1,梳排序假定输入阵列大致排序好,并以泡沫排序作最后检查及修正。

同快速排序和合并排序一样,梳排序的效率在开始时最佳,接近结束时,即进入泡沫排序时最差。如果间距变得太小时(例如小于10),改用诸如插入排序或鸡尾酒排序等其他算法,则可提升整体效能。这样做的最大好处是不再需要检查有否进行过交换程序以将排序循环提早结束。

下面的方法实现了梳排序:

2.5 堆排序

这里的堆是一种数据结构。首先给出堆的定义:n个元素构成的序列当且仅当{k1,k2,…kn}满足条件或时,称之为堆。

如果将此序列对应的一维数组(即将一维数组作为此序列的存储结构)看作一棵完全二叉树,则堆的含义表明,完全二叉树中所有非终端节点的值均不大于(或不小于)其左右孩子节点的值。因此,如果序列{k1,k2,…kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。

在输出堆顶的最小值之后,使得剩下的n-1个元素的序列又构成一个堆,则得到n个元素的次小值,如此反复执行,便能得到一个有序序列,这个过程称之为堆排序。

下面的方法实现堆排序:

2.6 插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于新的未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序的具体过程如下:

(1)从第一个元素开始,该元素可以认为已经被排序。

(2)取出下一个元素,在已经排序的元素序列中从后向前扫描。

(3)如果该元素(已排序)大于新元素,将该元素移到下一位置。

(4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。

(5)将新元素插入到该位置后。

(6)重复步骤2~5。

下面的方法实现了插入排序:

2.7 归并排序

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

假设初始序列包含n个元素,则它可看作是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序序列;再两两归并,……,如此反复,直至得到一个长度为n的有序序列为止。这种排序方法称为2-路归并排序。2-路归并排序中的核心操作是将一位数组中前后相邻的两个有序序列归并为一个有序序列。

下面的代码实现了归并排序:

2.8 奇偶排序

奇偶排序(Old-Even Sort),或称奇偶换位排序,或称砖排序,是一种相对简单的排序算法,最初用于有本地互连的并行计算。在并行计算排序中,每个处理器对应处理一个值,并仅有与左右邻居的本地互连。所有处理器可同时与邻居进行比较、交换操作,交替以奇-偶、偶-奇的顺序,以提升并行处理的效率。该算法可以有效地延伸到每个处理器拥有多个值的情况。在Baudet–Stevenson奇偶合并分区算法中,每个处理器在每一步对自己所拥有的子数组进行排序,然后与邻居执行合并分区或换位合并。

奇偶排序的基本思想是在数组中重复两次扫描。第一次扫描选择所有的数据项对,R[j]和R[j+1],j是奇数。如果它们的关键字的值次序颠倒,就交换它们。第二次扫描对所有的偶数数据项进行同样的操作。重复进行这样两次的排序直到数组全部有序。

下面的代码实现了奇偶排序:

2.9 鸽巢排序

鸽巢排序(Pigeonhole Sort),也被称作基数分类,是一种在不可避免遍历每一个序列元素并且需要排序的情况下效率最佳的排序算法,它只在差值(或者可被映射在差值)很小的范围内的数值排序的情况下实用。

当涉及到多个不相等的元素,并且将这些元素放在同一个“鸽巢”的时候,算法的效率会有所降低。一般很少使用鸽巢排序,因为它缺乏灵活性、简便性,在排序速度上也不具备更多优势。事实上,桶排序较鸽巢排序更加的实用。

下面的代码实现了鸽巢排序:

2.10 快速排序

快速排序(Quick Sort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到整个数据变成有序序列。

假设要排序的数组是A[0],A[1],…,A[n-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。其具体执行步骤为:

(1)设置两个变量i、j,排序开始的时候:i=0,j=n-1。

(2)以第一个数组元素作为关键数据,赋值给关键字Key,即Key=A[0]。

(3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于Key的值A[j],交换A[i]与A[j]。

(4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于Key的A[i],交换A[i]与A[j]。

(5)重复第3、4、5步,直到i=j。

下面的代码实现快速排序:

2.11 选择排序

选择排序(Selection Sort)的基本思想是:每一趟在n-i+1(i=1,2,…,n-1)个元素中选取关键字最小的元素作为有序序列中的第i个元素。

一次简单选择排序的操作为:通过n-i次关键字之间的比较,从n-i+1个元素中选出关键字最小的元素,并和第i(1≤i≤n)个元素交换。

下面的代码实现简单选择排序:

2.12 希尔排序

希尔排序(Shell Sort)又称为缩小增量排序(Diminishing Increment Sort)。它是插入排序的一种,但在时间和效率上都有很大的改进。它的基本思想是:先将整个待排序列分割成若干个子序列分别进行直接插入排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。

希尔排序的一个最明显的特点是:子序列的构成不是简单地逐段分割,而是将相隔某个增量的元素组成一个子序列。

下面的代码实现希尔排序:

3 GIF动画的实现

在排序过程中,对于样本数组中两个样本每次交换时产生一个GIF图像并保存到本地目录。这些图像的索引取值0~n(n是当前交换的次数)。下面的函数Save Picture()实现这一功能:

为了更生动地展示排序过程,还可以以GIF动画表现出来。下面的函数Create Animation()实现这一功能:

其他一些关于GIF格式编码与解码的功能函数,限于篇幅,这里不一一介绍。

4 功能界面的实现

在主窗体中,主要包括包含选择算法类型、设置排序样本的数量、设置排序速率、动态显示排序过程以及是否将结果以GIF动画的形式存储。

排序的基本条件是需要准备一个元素序列。为简化起见,本文采用实数作为序列元素。下面的代码实现这一功能:

为了增强排序的可视化效果,每次重新开始排序操作时,需要对排序序列中的所有样本元素进行随机排序。下面的函数Randomize()实现了这一功能:

在序列样本产生并经过随机排序之后,就可以在主窗体中描绘初始化的未排序序列样本了。下面的Draw Samples()函数实现这一功能:

为了加速排序过程,需要为每个排序算法启动一个执行线程。下面的方法Execute Sort()实现同时启动多个线程,完成批量排序工作:

多种算法 篇4

美国国家标准和技术学会 (NIST) 自1997年1月开始征求新一代的对称式加密标准, 于2000年10月决定采用J.Daemen和V.Rijmen提出的Rijndael algorithm作为 Advanced Encryption Standard (AES) [1]。AES算法可以使用在许多需要使用资料保密的应用上, 如IPsec, SSL, 无线局域网802.11, ATM, RFID, 智能卡和各种终端加密设备。

AES属于分组密码, 其处理消息的长度是固定的, 但是在实际应用中要处理的消息通常是任意长的, 且要求相同明文对应的密文尽量不确定, 而分组密码算法本身并不能做到, 所以就出现了对分组密码工作模式的研究。NIST于2001年11月在文件sp800-38A[2]中公布了用于AES的保密性的5种工作模式, 它们分别是:电子密码本 (ECB) 模式, 密码分组链接 (CBC) 模式、密码反馈 (CFB) 模式、输出反馈 (OFB) 和计数器 (CTR) 模式。

本文提出了一种能针对不同应用的保密性需求, 具有多种工作模式的AES算法的VLSI实现方案, 并在一个模块内集成了加密和解密功能。

1 AES算法简介

AES算法属于分组密码算法, 加密/解密分组单元的数据宽度是128比特, 密钥长度可支持128 (AES-128) 、192 (AES-192) 、256 (AES-256) 比特三种, 与密钥长度相对应的加/解密轮数Nr分别为10、12、14。AES算法的核心是对状态矩阵进行Nr次轮操作, 轮函数操作由SubBytes, ShiftRows, MixColumns和AddRoundKey四个函数组成, 加/解密流程如图1所示。

从图1可以看出, 就AES算法本身而言, 相同的明文经过轮函数操作必然得到相同的密文, 如果一个较长的被加密序列中同一个分组单元出现多次, 攻击者就很容易根据得到的密文猜测到加密密钥, 从而得到整个明文。为加强数据的机密性和安全性, 必须根据应用需求选择不同的AES工作模式。在5种工作模式中, CBC, CFB和OFB三种工作模式都要求每一个密文分组的输出与下一个明文分组操作以作为下一轮加密的输入, 所以他们属于反馈型的工作模式, 而ECB和CTR是非反馈型的工作模式。AES的硬件实现结构与其工作方式有密切的关系, 非反馈模式可以利用流水线结构以提高硬件实现的速度, 三种反馈模式安全性较好, 但无法利用流水线技术, 所以实现的速度相对较慢。

2 AES算法的VLSI实现

2.1 AES算法VLSI实现的结构选择

AES算法的硬件总体结构可以分成五种[6]:基本结构、内部流水线结构、循环抡展开结构、外部流水线结构和混合流水线结构。根据工作模式、对速度和面积不同的要求, 可以选择合适的结构。

在反馈结构中, 只有在当前数据分组被处理完成后, 下一个数据才可以开始被处理。在这种情况下流水线结构不能带来任何加速, 因为每个时钟周期只有一级流水线中有数据, 其它级流水线都处于空闲状态。非流水线结构可以用增加面积的方法来提高速度, 混合流水线结构在反馈结构中甚至使性能急剧下降。

本文考虑面积与速度的折中, 并且要实现5种工作模式, 所以选择如图2所示的基本结构。完整的AES系统可被划分成3个主要的模块, 如图3所示。其中信号mode[2∶0]为工作模式选择信号。mode=000时为ECB模式;mode=001时为CBC模式;mode=010时为CFB模式;mode=011时为OFB模式;mode=100时为CTR模式。

再仔细分析图1, 加密和解密算法中的密钥调度形式相同, 但解密步骤的顺序与加密步骤不同。这种不同使得在硬件实现AES算法时加密和解密结构不能共享相同的结构。故[1]通过交换逆字节替代变换和逆行移位变换、轮密钥加变换和逆行移位变换的顺序, 同时将解密中密钥扩展得到的密钥列 (字) 应用InvMixColumns () 变换进行修改, 给出了等价的解密算法, 如图4所示。

2.2 SubBytes () /InvSubBytes () 变换的实现

通常有两种方法来实现字节替代变换及其反变换。第一种方法是采用基于ROM的查找表方法, 将文献[1]中提供的S-Box和S-1-Box存放在ROM中, 它们各需要256个字节。另外一种方式是SubBytes () /InvSubBytes () 中的仿射变换、反仿射变换和有限域GF (28) 中的乘法逆运算都用组合电路来实现。这对于加密和解密在同一芯片中实现特别有利, 加密和解密模块可共用乘法逆单元, 有效减少电路面积。如图5所示。

因为有限域乘法逆的运算比较复杂, 一种易于实现的方法是将域GF (28) 中元素变换到其复合域GF (24) 中, 在域GF (24) 中实现求逆后, 再变换回域GF (28) 中[3], 域GF (24) 中的乘法逆仍采用查表的方法实现[7], 只需要16字节查找表空间, 能实现速度与面积的有效折中。

仿射变换、反仿射变换只涉及到有限域加法, 可以采用异或单元实现。

2.3 MixColumns () /InvMixColumns () 变换的实现

实现MixColumns () /InvMixColumns () 变换的结构有很多种。对列中单个字节和四个字节计算应用结构共享, 可以导出有效的MixColumns () /InvMixColumns () 变换实现结构[4]。如图6所示。图中虚线上方实现MixColumns () 变换, 最后输出为InvMixColumns () 变换的结果。

图中XTime () , 即{02}16X可以通过移位和异或运算实现。X表示为二进制形式为{X7, X6, X5, X4, X3, X2, X1, Y0}, 则,

{02}16X={X6, X5, X4, X3, X2, X1, X0, 0}♁{0, 0, 0, X7, X7, 0, X7, X7}={X6, X5, X4, X3♁X7, X2♁X7, X1, X0♁X7, X7}

从上式可以看出XTime () 只需要3个异或门, 并且关键路径上只有1个异或门。

X4Time () , 即{04}16x可表示为,

{04}16x={X5, X4, X3♁X7, X2♁ (X6♁X7) , X1♁X6, X0♁X7, X6♁X7, X6}

再共享X6♁X7, X4Time () 可用5个异或门实现, 关键路径上有2个异或门。

从图6可以看出计算状态中的一列MixColumns () 总共需要108个异或门, 关键路径需要3个异或门。InvMixColumns () 变换的实现共需193个异或门, 关键路径上有7个异或门。

2.4 密钥扩展单元的设计与实现

以AES-128为例, 每轮需要128位轮密钥, 加上初始轮11轮共需1408比特 (44字) , 而原始密钥只有128比特, 所以必须先将原始密钥扩展成1408位, 然后再分配给11轮使用。

轮密钥产生的方式有两种, 一种方法是在数据路径迭代开始之前, 产生所有的轮密钥, 把所有这些轮密钥存储起来, 在每一轮迭代时选取适当的128比特轮密钥。只要密钥不变, 就不必产生新的轮密钥, 即Store-in-rom。另一种方法是在数据路径迭代的同时, 只存储当前所需的轮密钥, 根据上一轮或本轮密钥产生新的轮密钥, 即On-the-fly方式。

Store-in-rom方式需要较大的存储空间, 当更换密钥时, Store-in-rom方式产生全部的轮密钥所需时间比较长。但是一旦全部轮密钥产生, 就可以存储起来, 不再需要重新建立轮密钥, 直到更换新密钥。如果密钥的变化不频繁, 适合采用Store-in-rom方式, 芯片的速度较快, 功耗较低。On-the-fly方式所需的存储空间较小, 适合于密钥变换频繁的应用, 其应用更广泛。本设计中采用On-the-fly方式实现密钥扩展。基于资源共享的密钥扩展结构如图7所示。

2.5 实现结果和比较

采用FPGA (XCV800-6) 实现时, 文献[4]设计的最小面积为9406 Slices, 文献[8]设计的面积为10992 Slices, 本文FPGA验证的面积是3528 Slices, 实现了面积的优化。比较结果如表1所示。另外, 其他两种实现方式都不适用于反馈型工作模式, 而本文提出的实现结构能实现AES的全部5种工作模式。

3 结束语

从实现分组密码的多种工作模式出发, 从结构和算法上对AES算法进行了分析与优化, 在一个模块内实现了加密和解密功能, 很好的实现了面积与速度的折中, 能同时满足多种应用的保密性需求。

参考文献

[1] Federal Information Processing Standard 197.The Advanced Encryption Standard (AES) [S/OL].[2001].http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.

[2]Morris Dworkin.Recommendationfor Block Cipher Modes of Operation:Methods and Tech-niques[EB/OL].[2001].http://csrc.nist.gov/pub-lications/nistpubs/800-38a/sp800-38a.pdf.

[3] Vincent Rijmen.Efficient Implementation of the Rijndael S-box[EB/OL].[2000].http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf.

[4] Xinmiao Zhang, Keshab K, Parhi.High-speed VLSI architectures for the AES algorithm[J].IEEE transactions on very large scale integration (VLSI) systems, 2004, 12 (9) .

[5]Xinmiao Zhang, Keshab K, Parhi.Implementation approaches for theAdvanced Encryption Standard algorithm[J].Circuits and Systems Ma-ga-zine, IEEE, Fourth Quarter 2002, 2 (4) :24-46.

[6] Nechvatal, Barker E, Bassham L, et al.Report on the Development of the Advanced Encryption Standard (AES) [R/OL].Avaliable at http://csrc.nist.gov/archive/aes/round2/r2report.pdf.

[7]Cillian O’Driscoll B.E.Hardware implementation aspects of the Rijn-dael block cipher[D].National University of Ireland, October, 2001.

多种算法 篇5

无功补偿点及补偿大小都很不容易确定, 蚁群算法在解决多变量、非线性、不连续、多约束的问题有其独特的优势, 在无功优化方面更加得到人们的重视。通过对蚁群算法的改进, 避免了该算法收敛过快的问题, 有效实现了配电网的安全经济运行[1]。

2 蚁群算法简介

蚁群算法是一种仿生进化算法, 其思路是模拟真实蚂蚁的行为规律[2]。蚁群蚂蚁能够找到从蚁穴到食物源的最短路径, 又能随着环境的变化自动调整, 发现新的最短路径。这是因为蚂蚁会散发一种信息素, 一只蚂蚁会根据不同线路上的信息素的多少来判断走哪条路径。信息素多的表明线路较近, 蚂蚁选择这条路径的概率就大。

蚁群算法的常规计算步骤如下:

2.1 初始化算法参数。设置循环次数初值m=0, 所有路径上的信息素都为一常数。

2.2 k=1 (k表示派出第k只蚂蚁) 。

2.3 第k只蚂蚁以一种随机策略完成整个搜索过程, 得到问题的一个解。同时k=k+l。

2.4 如果k

2.5 用评价函数评价D1只蚂蚁的搜索路径, 然后根据评价函数值修正相应路径上的信息素。同时m=m+1。

2.6 如果m>M (为设置的最大迭代次数) , 或最佳路径保持不变的次数大于设定值, 则转步骤7, 否则转步骤b。

2.7 输出最佳路径。

在这里, 蚂蚁的一次搜索过程是一个随机过程。蚂蚁每次从地点i选择下一个地点j是依据两地之间的状态转移概率决定, 而状态转移概率是与路径上的信息、素以及该路径的期望程度相关联的。

3 多种群算法在配电网无功优化中的应用

3.1 配电网拓扑图

为了更好的说明蚁群算法在配电无功优化中的应用, 通过下图来说明配电网的大体网络结构和蚁群寻优办法。拓扑如图1。

其中1-n为配电网可能安装无功补偿装置的节点, 以节点i到节点j来说明蚁群的路径选择。从i到j有m中路径选择, m表示补偿容量的大小, 蚂蚁会在随机选择的路径上留下信息素, 路径信息素高的为最短路径。如果路径1信息素浓度最高, 表示无功补偿容量为0, 其他路径代表相应容量的无功补偿容量。最终选出需要安装补偿装置的位置及容量。

3.2 算法改进

因为蚁群算法的鲁棒性, 收敛速度快等缺陷, 使得普通蚁群算法很难找到最佳路径, 出现停滞现象[3]。既搜索到一定程序过后, 某只蚂蚁发现的个体解完全一致, 不能对解空间进一步搜索, 发现更好解。这样就存在陷入局部最小值的可能。

对发现最优解不利。通过多种群的方法, 让每个种群之间不受影响, 定期的让这些种群通过一定算法进行信息素交换, 形成优势互补。这样会增加蚂蚁选择路径的随机性, 可以扩大搜索范围, 找到更好的全局最优解。

4 算法仿真

用IEEE14节点系统来做仿真。运用三种群算法在MATLAB中进行仿真, 其加补偿设备前后的对照仿真如图2, 3。

由仿真曲线得出, 在装设无功补偿装置以后, 各个节点的电压都向期望值1.0靠拢, 达到了提高电网的电压质量的目的, 因此, 本方法是有效的。

5 结论

随着生产力水平的推进和我国经济的快速发展, 配电网络的建设、改造以及优化运行正逐渐得到了电力系统规划和运行部门的重视, 近年来新兴的智能优化算法的发展和应用, 为解决配电网络规划和优化运行提供了新的思路。

其优化结果显示了采用多种群蚁群算法合理配置无功补偿装置对提高电压质量, 提高经济效益等都有显著效果。

摘要:蚁群算法是一种优化算法, 采用改进的蚁群算法对无功补偿装置进行优化配置, 对补偿装置地点和容量做出优化选择。通过仿真实验证实此优化算法可有效实现配电网的安全经济运行。

关键词:蚁群算法,配电网,无功优化

参考文献

[1]陈珩.电力系统稳态分析[M].北京:中国电力出版社, 1995, 1:150-153.

[2]唐剑东.电力系统无功优化算法及其应用研究[D].上海:华中科技大学, 2004:2, 5.

多种算法 篇6

关键词:数字签名,MD5,AVS,特色摄像头

0 引言

随着社会的发展和科技的进步,越来越多的摄像头布置在地球的各个重要位置,用以记录可能的犯罪现场,打击犯罪。但是在中国和大部分国家,视频监控资料一直作为司法实践环节当中的辅助证据,而不能成为直接的诉讼证据和定案证据[1],一个很重要的原因就是视频监控资料的真实性和可靠性无法得到保证,即无法保证某监控视频是在某时某地合法拍摄的以及视频的内容是否被篡改过。如果能保证视频监控资料形成的时间、地点、内容的真实性和可靠性,那么视频监控资料就能成为直接的诉讼证据和定案证据。本文提出一种基于多种加密算法和数字签名技术的视频监控资料防篡改方案,用以保证视频监控资料内容真实可靠。

1 技术背景

在数字视频和图像的保护领域,数字签名和脆弱水印是目前两种常见的技术。数字签名技术[2]是将视频数据压缩为固定长度的数字串,使得对视频数据的任何篡改都会导致压缩后数字串发生改变,从而保证了原来数据的完整性。脆弱水印技术是[3]在图像中嵌入一个无形的水印,增加视频数据之间的关联性。只要某一部分被修改过,数据之间的关联性就受到破坏,从而无从检测到水印。目前,脆弱水印技术还处于研究初期,还不成熟。综合考虑两种技术,笔者认为数字签名技术更加可靠,因为该技术算法成熟,而且不改变数字视听资料本身,最大程度地保持了数字视听内容的原貌。

2 基于多种算法的AVS标准视频监控资料防篡改方案

2.1 AVS标准和MD5算法

AVS(Audio Video coding Standard)[4]是我国具有独立自主知识产权的数字音视频压缩标准,因其具有编码效率高、画面清晰等优点,被广泛应用于数字电视、IPTV、光盘和视频监控等领域。公安部也在考虑在全国范围内统一采用AVS标准作为视频监控的压缩标准。目前,一些地方的数字视频监控标准已经采纳了AVS作为其压缩标准。

第五代信息摘要算法(Message-Digest algorithm 5,MD5)是国家密码委员会认可的一种加密算法[5],在20世纪90年代初由MIT的计算机科学实验室和RSA Data Security Inc.共同发明,经MD2,MD3和MD4发展而来。MD5将任意长度的“字节串”变换成一个128 bit的大整数,这种变换只与字节的值有关,与字符集或编码方式无关。MD5是一个不可逆的变换算法,即使得到源程序和算法描述,也无法根据MD5的运算结果得到原始的字节串。MD5的典型应用是对一段字节串(Message)产生指纹 (fingerprint),以防止被“篡改”。如果存在第三方认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

2.2 防篡改方案的关键——特色摄像头

MD5虽然性能卓越,但是还是无法直接应用于数字视频监控资料的防篡改。原因是摄像头无法保存很多MD5的值,而且也无法安全地将很多MD5的值传送给权威认证机构。MD5的值必须和数字视频监控资料一起传输和存储。因此,打算修改视频监控资料内容的非法攻击者,只要在修改后用同样的算法计算出MD5的值并置于原来的位置就可以以假乱真了。

为了解决这个问题,必须引入另一个对称加密算法,将处于明文状态的视频监控资料通过摄像头中的密钥进行加密,然后对密文进行MD5运算,得到MD5值。这样,由于攻击者无法得到摄像头的加密密钥,也就无法得到密文,从而无法获得准确的MD5值。

特色摄像头是本方案的关键所在,它在出厂时由权威机构设置一个特定的密钥,而且任何情况下都无法读出,摄像头的密钥由权威机构作为机密数据保存备案,与摄像头的编号一一对应。摄像头的编号是明文的,用户可见,但密钥则是透明的,用户是无法知道的。摄像头对明文进行加密的算法,拟采用DES[6]。DES虽然比较简单,但是由于密文根本不会出现,因此足以保证安全性。

为了进一步增强安全性,每个摄像头在对明文进行加密之前,首先要对明文进行重排序,重排序算法由摄像头编号和密钥共同决定。摄像头编码是唯一的。因此可以保证每个摄像头的加密算法都是不一样的。

摄像头监控过程中,时间戳被不停地记录到每一帧图像的扩展信息中,因为保证了扩展信息的内容可靠,就保证了拍摄时间的可靠性。

每个特色摄像头在投入使用过程中,使用部门都要对摄像头的编号和投放监控的地点有所备案,这样任何一段伪造的视频都可以通过视频验证来证明是否出自这个编号的摄像头,从而知道是否为这一地点所拍摄,使得该方案可以保证视频监控资料拍摄地点的可靠性。

2.3 防篡改方案具体算法

本方案将在ES流的层面上进行。在ES流的层次上进行签名,与高层的数据打包格式无关。无论采用何种传输和存储方式,最终都要恢复ES流才能解码。因此本方案可以支持任何传输和存储格式。AVS的ES流是通过开始码分成若干段的。因此特别适合MD5算法。

本方案将签名定位到图像级,即对每帧图像的编码数据分别进行签名。对不属于图像的数据,例如视频序列头及其扩展数据单独进行签名。这样可以对单帧图像进行验证,也比较容易定位篡改的位置。以下是针对AVS压缩标准设计防篡改方案需要考虑的一些问题以及本方案的解决办法。

1) 签名信息放到位置

放到视频扩展信息中,在序列头和图像头之后的扩展中,均增加签名扩展signature_extension( )。签名扩展必须出现在其他扩展信息和用户数据之后。

2) 对哪些数据进行签名

首先,签名时将视频序列开始码前缀和图像头开始码前缀跳过,不在签名计算的范围之内。出现在序列头之后的签名扩展,对序列头及其后出现的扩展信息和用户数据(除签名扩展本身外)进行签名。出现在图像头之后的签名扩展,对该图像的编码数据进行签名(除签名扩展本身外)进行签名。

3) 具体签名算法

由权威机构为每一个摄像头分配唯一的编号N,设置密钥K,编号N和密钥K的长度均为128位。

第一步:剔除开始码前缀等不需要签名的数据,将待签名的数据重新组织成一个连续的字节串,记为Bs。称Bs为原文。

第二步:将Bs重排序,得到Bsn。称Bsn为明文。Bs和Bsn是一一对应的。其中一个发生任何改变,都会引起另一个发生改变。重排序算法的参数包括密钥K和摄像头编号N。K和N经过某种运算得到一个128位的重排序密钥Z。

第三步:使用密钥K及DES加密算法对Bsn进行加密,得到密文Bsm。Bsm和Bsn是一一对应的。其中一个发生任何改变,都会引起另一个发生改变。

第四步:使用MD5算法对Bsm进行签名,得到128位校验字S。

4) 验证算法

本方案的验证算法只需要摄像头编号N和待验证的视频数据。通过摄像头编号N,可以从权威机构,也就是认证中心,获取密钥K。

第一步:重复签名算法,若得到的校验字S’等于S,则通过算法验证。

第二步:对视频内容进行主观判断,若视频内容可理解,则通过主观验证。

只有同时通过算法验证和主观验证,才视为通过了完整性验证。

防篡改方案算法性能分析:

1) 载荷分析

监控的视频帧率一般在30帧/秒(f/s)之内,视频序列头出现的频率一般不超过2次。因此每秒钟出现签名扩展的次数一般不超过32次。每个签名占用的比特数是160 bit,按照32次计算共占用160×32=5 120 bit。当视频码率为1 Mbit/s时,签名的开销约为0.5%。

2) 计算复杂度分析

监控的视频帧率一般在30 f/s之内,视频序列头出现的频率一般不超过2次。因此每秒钟出现签名扩展的次数一般不超过32次。

3) 安全性分析

本方案的安全性由重排序算法、DES算法和MD5算法共同保证。重排序算法保证每个摄像头的算法都不同,即使破解了一个摄像头的签名,也无法类推到其他摄像头。DES算法使破解者在不知道密钥的前提下,无法得到密文,从而在修改视频内容后无法伪造签名。MD5算法使得破解者无法根据签名获得密文。本方案的总体框架保证了密钥不需要传输。因此只须保证密钥的安全,本方案就是安全的。

4) 易用性分析

本方案产生的带有签名的码流,不影响一般的观看,只要符合AVS-S标准的解码器都可以正常解码。只有需要验证的时候,才需要密钥。事实上,摄像头可以工作在验证模式,即将一段码流送给摄像头,摄像头利用自己的签名算法重新进行签名,若得到的签名和码流中的签名相同,则通过算法验证。这样在验证时也不再需要密钥了。当然,这会增加摄像头的成本。

3 结束语

本文提出了一种基于数字签名和多种加密算法的视频防篡改方案,根据该方案可以对生成的监控视频进行充分的认证,用以判断该视频是否出自特定的摄像头以及内容是否有无被篡改过,用以保证证据的真实性、可靠性和完整性,消除对视频电子证据的真实性的疑虑,为视频电子证据成为合法的诉讼证据解决这一难题。

参考文献

[1]姜琳炜.视听资料与“最佳证据规则”[J].上海大学学报:社会科学版,2002,9(5):84-87.

[2]张先红.数字签名原理及技术[M].北京:机械工业出版社,2004.

[3]张江,赵黎,杨士强.视频水印技术综述[J].计算机应用,2005,25(4):850.

[4]侯金亭,马思伟,高文.AVS标准综述[J].计算机工程,2009,35(8):247-250.

[5]胡建伟.网络安全与保密[M].西安:西安电子科技大学出版社,2003.

多种算法 篇7

随着城市化进程的加快, 道路交通供需矛盾日趋扩大, 交通拥堵成为影响城市发展的一大问题。交通信号控制系统是解决城市交通拥堵的一种有效途径, 而交叉路口是整个交通系统最为重要的组成部分, 因此交叉路口信号配时优化的研究得到了研究人员的重视。徐建闽等[1]采用车辆平均延误作为交叉路口的性能评价指标, 提出了一种新型模糊控制算法优化交叉路口的配时方案;Rouphail N M等[2]针对固定周期, 提出了一种遗传算法与CORSIM模型相结合的优化策略;Kim J等[3]将遗传算法引入了城市路口信号的模糊控制中, 对模糊控制器的参数进行全局优化;毛红阁等[4]采用模糊神经网络算法对交叉路口配时方案进行优化;刘建华等[5]将交叉口总滞留车辆数作为目标函数, 采用粒子群优化算法求解配时方案。交通系统模型是大而复杂的离散模型, 利用遗传算法求解能够得到较好的解, 但容易陷入局部优化;粒子群算法容易实现并能较快收敛, 但难以对解进行持续优化, 容易陷入局部优化;模糊控制等启发式方法能得到一个较好的解, 但缺乏一定的数学严密性, 不能保证所得解是最优解。

蚁群算法[6,7,8]是一种仿生型的群体智能算法, 具有分布式计算、信息正反馈和启发式搜索特征。该算法借鉴了蚂蚁在觅食过程中寻找巢穴与食物之间最短路径的原理, 在一系列的离散优化问题中表现出相当好的性能。因此, 本文提出一种基于多种群的改进蚁群算法, 对交叉路口多相位配时信号进行优化, 并以车辆延误、车辆停车次数和通行能力作为性能指标进行仿真实验。

1 交叉路口信号优化控制模型

城市交通信号控制需要根据不同交通状况实行不同的配时方案, 用于评价交叉路口交通效益的指标一般有车辆延误时间、车辆起停次数、排队长度、通行能力、饱和度、油耗等。根据相关研究表明[9], 在一定的道路条件下, 车辆延误时间、车辆起停次数、交叉路口的通行能力与周期时长及各相位绿信比的关联程度都比较高, 在正常的周期时长范围内, 周期时长越长, 通行能力越大, 但车辆延误及停车率也随之增长。因此, 仅以任一指标作为交叉路口的评价指标难以反映实际状况, 在实际研究过程中可以通过把相位的绿灯时间作为自变量, 使交叉路口信号配时问题转化成为一个求解多目标问题的研究模型。

根据交通状况的实际需求, 建立以车辆延误时间最小、车辆起停次数最少、通行能力最大为目标函数的研究模型。

式中, Di表示第i相位的车辆平均延误时间 (s) , Hi表示第i相位的车辆平均起停次数 (次) , Qi表示第i相位的通行能力 (辆/h) , ti表示第i相位的有效绿灯时间 (s) , ti, min与ti, max表示交叉口第i相位最小有效绿灯时间和最大有效绿灯时间 (s) , yi表示第i相位的交通强度, C表示交叉口信号周期 (s) 。

Webster[10]通过模拟车辆均匀到达的情况, 建立了交叉路口平均延误和平均停车次数的经典研究方法:

式中, λi为绿信比表示第i相位有效绿灯时间与信号周期的比值, qi表示第i相位的交通流量 (辆/h) 。

根据文献[11], 交叉路口通行能力表示为每一相位饱和度与该相位饱和流量si的乘积。

2 应用于交叉路口信号配时的改进蚁群算法

2.1 传统蚁群算法基本思想

蚁群算法是一种源于生物世界的新型仿生类算法, 据科学家的观察和研究发现, 蚂蚁会在其走过的路径上释放信息素, 通过这种信息素蚂蚁间能相互交流、合作, 并影响其他蚂蚁的选择。在往返于食物和巢穴之间的所有路径中, 较短的路径能使蚂蚁以较短的时间通过, 使得该路径上的信息素挥发较少, 保留着较强的信息素浓度。同时, 较强的信息素浓度会促使更多的蚂蚁选择该路径, 该条路径上的信息素得到进一步加强, 选择这条路径的蚂蚁也会越多。经过这一种正反馈机制, 使蚂蚁最终能找到食物和巢穴之间的最短路径。

基于蚁群算法的交叉路口信号配时优化问题, 其核心是选择每个相位的最佳绿灯时间。根据每个相位对绿灯时间的约束条件, 可以将每一相位作为蚂蚁觅食过程中的一个节点, 将每一相位的可选绿灯时间作为蚂蚁通向该节点的一条可选路径。蚂蚁在每一相位上选择绿灯时间后, 便产生一种信号配时方案, 构成一条从始点到终点的觅食路线, 该路线将由车辆延误、车辆停车次数和通行能力三个目标函数进行评价。路线的优劣将影响蚂蚁所选路径上的信息素更新, 较好路线的信息素浓度将会得到加强, 反之则将会减弱。

传统蚁群算法只使用一种蚁群寻找觅食过程中的最短路径, 但在交叉路口信号配时问题上, 仅利用单种蚁群难以反映车辆延误、车辆停车次数和通行能力不同评价指标之间的差异, 因此本文提出一种基于多种群的改进蚁群算法, 以适应交叉路口信号配时问题的求解和优化。

2.2 基于多种群的改进蚁群算法介绍

本文将蚂蚁分为多种不同的种群, 负责不同的工作。根据工作性质的差别, 将蚁群分为侦察蚁群和搜索蚁群。侦察蚁群的任务是对不同评价指标进行侦察, 一群侦察蚁负责侦察一个评价指标;搜索蚁群的任务则是综合不同评价指标, 根据不同的交通情况, 优化信号配时方案。在搜索过程中, 侦察蚁群首先工作, 并以信息素来标记侦察结果, 为搜索蚁群寻找交叉路口信号配时方案提供辅助信息。当达到一定的搜索次数后, 搜索蚁群与侦察蚁群一起工作。通过综合侦察蚁群的信息素及该相位上各可选绿灯时间的信息素, 搜索蚁群对信号配时方案全局搜索, 并更新搜索蚁所选路径上的信息素。随着搜索次数的增加, 搜索蚁群能最终得到信号配时的优化方案。

为提高算法的求解速度及获取最优解的能力, 本文将蚁群的搜索过程分为三个阶段, 即搜索的初始阶段、中间阶段及后期阶段。

1) 搜索初始阶段

在蚁群搜索的初始阶段, 蚂蚁只能走过一部分路径并更新该路径的信息素, 而蚂蚁选路的策略是以较大的概率选择信息素多的路径, 这使得蚂蚁从搜索的一开始较容易集中到几条长度较短的路径上, 导致搜索所得的结果是局部最优而不是全局最优。为了避免蚂蚁从搜索的一开始就失去解的多样性, 本文为蚂蚁初始搜索过程建立一个路径表, 并设置使用阈值RTL。在蚂蚁探索次数未达到RTL时, 让蚂蚁忽视信息素的存在并利用该路径表选择路径, 并在所有蚂蚁都选择完路径后对路径表进行更新。这样可以使不同蚂蚁所选路径不一样, 并让蚂蚁在初始阶段选择较多的不同路径, 以获得多样化的解。同时, 为了平均各路径的信息素浓度, 避免因个别路径上的信息素具有较大的优势而造成早熟。在此搜索阶段, 把信息素更新公式中的积累因子与挥发因子设置为一样的值ρ0。

式中, σti, j表示侦察蚁群在第i步对路径j所积累的信息素, Kk (i) 表示侦察蚁群k在第i步所释放的信息素对搜索蚁群的影响系数, τtk (i, j) 表示蚁群k中的蚂蚁在第i步所选择的路径j的信息素浓度, τt-1k (i, j) 表示前一次迭代后蚁群k中的蚂蚁在第i步所选择的路径j的信息素浓度, G表示侦察蚁群, S表示搜索蚁群, N表示G的种群数, Δτk (i, j) 表示蚁群k的信息素增量。由于侦察蚁群与搜索蚁群负责的工作不一样, 信息素增量Δτk (i, j) 将根据不同的蚁群作出调整:

式中, фk (i, j) 表示蚁群k中的蚂蚁在第i步选择路径j的信息素增量函数。为了提高蚂蚁发现更优路径的能力, 加快算法搜索全局最优解的速度, 在фk (i, j) 中引入Z'k, min, Z'k, max表示搜索过程的局部最小值及局部最大值, 并以局部最优值与当前目标函数值对比。同时, 引入正的常量Uk, 平衡фk (i, j) 的变化幅度。

对于车辆平均延误、车辆平均停车次数, фk (i, j) 表示为:

对于通行能力, фk (i, j) 表示为:

由文献[12]可知, 在饱和率较低时应侧重减少车辆平均延误和车辆平均停车次数, 饱和率较高时应侧重提高通行能力。根据该要求, 将式 (6) 和式 (7) 中的Kk (i) 表示为:

式中K1 (i) 、K2 (i) 和K3 (i) 分别为车辆平均延误、车辆平均停车次数及通行能力的影响系数, Y是交叉路口饱和度。

2) 搜索中间阶段

在蚁群搜索的中间阶段, 蚂蚁需要不断地积累与开发。对于该阶段搜索的前半部分, 应提高蚂蚁的开发能力, 使蚂蚁能搜寻更多不同的路径, 丰富候选解的多样性。随着搜寻次数的增加, 蚂蚁将会对不同路径的优劣程度有一定了解, 因此对于该搜索阶段的后半部分, 应逐步加强蚂蚁对较优路径的认识, 提高蚂蚁搜索最优路径的能力。其中, 蚂蚁系统[13,14,15]的转移规则能较好地平衡算法中积累与开发的性能, 该规则中的α和β都是一个正的常量, 分别用于放大信息素浓度的影响和放大吸引度的影响。本文基于蚂蚁系统的转移规则, 分别令α随迭代次数增加而增加, 令β随迭代次数增加而减少, 以达到适应该搜索阶段前期着重积累和后期着重开发的不同性能要求。

式中, Pk (i, j) 表示蚁群k中的蚂蚁在第i步选择路径j的概率, L (i) 表示蚂蚁在第i步所能选择的所有路径, ηk (i, j) 表示在蚁群k中的蚂蚁第i步选择路径j的吸引度, TLL, r是[0, 1]的随机数, TLL用于平衡积累与开发, 当r≥TTL蚂蚁选择当前信息素最多的路径, r

对于车辆平均延误、车辆平均停车次数, fk (i, j) 表示为:

对于通行能力, fk (i, j) 表示为:

本搜索阶段, 根据式 (18) 和式 (19) 对信息素进行更新:

其中, 把式 (18) 用作对蚂蚁所选路径进行信息素更新, 把式 (19) 用作对对蚂蚁未选路径进行更新。ρ表示已选路径上信息素的挥发因子, ρ'表示未选路径上信息素的挥发因子, φk (m) 表示蚁群k中第m只蚂蚁所走路径的积累因子。

由于蚂蚁的寻路过程与人的学习过程有一定的相似性, 可类比学习过程中的遗忘曲线, 为式 (18) 中的信息素挥发因子ρ设定可变范围[ρmin, ρmax], 并使该挥发因子随迭代次数的增加而减少。当ρ较大时, 能提高蚂蚁获得新路径的能力;当ρ较小时, 能提高蚂蚁根据已选路径筛选最优路径的能力。ρ'作为未选路径上信息素的挥发因子, 对未被选择路径进行更新, 为了防止搜索早熟应将ρ'取较小值。

φk (m) 与目标函数值的优劣相关, 所寻路径对应的目标值越优, 其值越大。φk (m) 的计算方法如下:

式中, Mk表示表示蚁群k的蚂蚁数量, Rank (m) 表示蚁群k中第m只蚂蚁所寻路径的目标函数值在本次迭代中排序后的位置。若Rank (m) 值较小, 即路径较优, 则φk (m) 越大, 信息量增加的强度就越大, 有效地强化了较优路径上的信息素浓度。这种自适应的信息量更新机制可以动态地调整信息量, 有效地实现蚂蚁的搜索速度和解的多样性之间的平衡。

3) 搜索后期阶段

在蚁群搜索的后期阶段, 某些路径上的信息浓度较大可能是因为进入了局部最优的状态, 也可能是因为整个蚂蚁的群体遍历行为已经接近尾声。为了提高搜索最优解的能力, 在该阶段搜索中加入一群新的蚂蚁, 负责局部搜索, 尝试在拥有较大信息素的路径周围寻找更优的方案。新的蚁群将维护一个新的局部信息素表, 以式 (5) 中的k∈G部分作为信息素更新公式, 式 (14) 作为转移规则, 并设置迭代次数阀值ETL, 标记局部搜索的开始。由于该组蚂蚁主要用于开发, 因此式 (14) 的α值较小, 且α和β值不随迭代次数变化。

2.3 算法步骤

第1步

初始化参数和系数, 包括RTL, ETL, TLLmin, TLLmax, αmin, αmax, βmin, βmax, 挥发因子ρ', 迭代阈值Nc, 每一蚁群的蚂蚁个数mk, 初始信息素τk0 (i, j) 等;

第2步

根据迭代次数Times判定搜索阶段。若Times

第3步

根据不同蚁群维护的信息素表, 计算蚂蚁对路径的选择概率;

第4步

根据算法中不同搜索阶段的转移规则, 让蚂蚁搜索最优解;

第5步

根据算法中不同搜索阶段的信息素更新公式, 更新对应蚁群的信息素表;

第6步

使迭代次数Times←Times+1, 若Times

第7步

输出Z1、Z2、Z3及各相位时间Ti。

3 仿真实验

3.1 交叉路口交通模型

本文以广州市浣花路 (东西向) 与花地大道 (南北向) 交叉路口为研究对象, 该交叉路口交通流分布如图1所示。

该路口由两条双向街道交叉形成, 每个方向均有3个车流支路 (左、直、右) 。如方向1有流向方向3的直行支流L13, 流向方向2的右转支流L12, 流向方向4的左转支流L14。各方向车流支路是构成整个交叉路口的基本单元。

该交叉路口为四相位信号控制, 如图2所示。第1相位为北进口直行和左行, 第2相位为南进口直行和左行, 第3相位为西进口直行和左行, 第4相位为东进口直行和左行, 且右行始终放行, 不考虑其延误。

3.2 路口参数

本文结合文献[16]和实际交通调查资料, 得到该交路口的饱和流量、实际交通流量和配时现状等数据。平峰状态下的各相位交通流量和饱和流量如表1所示, 高峰状态如表2所示, 该交叉路口各相位绿灯之间黄灯时间为3 s。

3.3 蚁群算法参数设置

蚁群算法参数初始化为:迭代次数Nc=1 000;蚂蚁个数mk=50;信息素浓度初始值τk0 (i, j) =0.5;挥发因子ρ'=0.1;局部搜索领域半径R=3, RTL=200, ETL=800, TLLmin=0.15, TLLmax=0.8, ρmin=0.25, ρmax=0.8;并将交叉路口各相位有效绿灯时间的最小和最大设定为15 s和90 s。

3.4 仿真结果分析

本文仿真算法由Visual C++8.0实现, Windows XP环境下运行。实验分别采用Webster配时方法[17]、蚂蚁系统算法[13]以及本文的基于多种群的蚁群算法对交叉路口信号配时问题进行求解。Webster配时方法广泛应用于交通控制领域, 而蚂蚁系统算法是传统的蚁群算法。通过将本文方案的实验结果与这两种算法的实验结果及该交叉路口的现状配时方案进行分析比较, 验证本文方案的有效性和优越性。另外, 蚂蚁系统算法是通过单一种群对目标问题进行求解, 需要把总延误、总停车次数和通行能力三个目标综合为式 (21) 的单目标函数。这三种算法在平峰状态和高峰状态的数值试验结果如表3和表4及图3、图4和图5所示。

从表3和表4的数值试验结果可知:在平峰状态与高峰状态下, 本文提出的改进算法所得配时方案, 在车辆总延误、车辆总停车次数和通行能力方面, 均优于实际配时方案, 且通过改进蚁群算法所得配时方案的周期时长小于实际配时方案。由于减少周期时长, 能在给定时间内增多周期次数, 说明该算法所得配时结果可以提高交叉路口的利用率, 避免出现无端的停车等待。与Webster方法所得的配时方案相比, 该算法所得配时方案在交通平峰状态下车辆总延误有所增加, 但增加了道路通行能力, 降低了平均停车次数;在高峰状态下总停车次数略有增加, 但减少了车辆总延误时间, 增加了道路通行能力。综合平峰和高峰状态下的实验结果对比, 本文算法能够更好地满足信号配时问题中车辆延误、车辆停车次数和通行能力不同评价指标的实际需要。

从图3、图4和图5中可以看出, 在同一个实验中, 所有基本参数都相同的情况下, 使用改进的蚁群算法比使用传统的蚂蚁系统算法效果要好。改进的蚁群算法能较快地找到比蚂蚁系统算法更好的解, 在迭代结束的时候改进算法所找到的解要比蚂蚁系统算法所得解更令人满意。同时, 上述三图也显示出改进的算法收敛速度比原始的蚂蚁系统算法快, 改进算法迭代300次时已经保持最优解, 而蚂蚁系统算法要迭代700至800次才开始收敛。

综合而言, 对于优化交叉路口信号配时方案问题, 改进的蚁群算法收敛速度较快, 能找到比传统方法更优的解, 且该算法也有较好的稳定性。因此, 该改进的算法适用于优化交叉路口信号配时方案问题。

4 结语

本文提出了一种基于多种群的改进蚁群算法, 并将该算法应用于优化交叉路口信号配时问题, 进而对交叉路口的平峰状态和高峰状态进行仿真实验。结果表明该方法能够改善交叉口的运行状况, 提高交叉路口通行能力, 减少车辆延误及车辆停车次数, 并能够根据交通量的实际需求更新配时方案, 达到优化交叉路口信号配时的目的。该改进蚁群算法为解决交叉路口信号配时优化问题提供了一种新的、有效的解决思路和方法。

但在交通信号配时优化应用中, 还有多个方面值得研究。其中蚁群算法的参数设置, 目前主要靠实验测试获得, 缺乏一定的理论基础。因此如何合理选择设置参数, 是以后进一步研究的方向。

摘要:针对交叉路口信号控制面临的多目标优化问题, 建立以延误时间、停车次数和通行能力作为性能指标的交叉路口信号配时模型, 提出一种基于多种群的改进蚁群算法, 对信号配时方案进行优化。改进的算法以交叉路口的平峰状态和高峰状态进行仿真。实验结果表明利用该算法对模型求解的结果优于传统方法, 能降低交叉口的总延误时间和停车次数, 提高了通行能力。且该算法稳定性好, 求解速度快。

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【多种算法】相关文章:

多种群分层粒子群算法07-23

多种评价05-02

多种方法05-07

多种资源06-03

多种措施07-06

多种举措07-30

多种艺术08-03

多种控制08-05

多种需求09-06

离职证明(多种)05-09

上一篇:混凝土绿色化下一篇:大气污染与植物修复