动态规划思想范文

时间:2023-09-25 18:14:43

导语:如何才能写好一篇动态规划思想,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

动态规划思想

篇1

关键词:万州、生态涵养规划、多规协同

中图分类号: G322 文献标识码: A

0 引言

2013年9月13日至14日,重庆市委四届三次全会召开。会议审议通过了《关于科学划分功能区域、加快建设五大功能区的意见》。渝东北地区被划为生态涵养发展区,这个以三峡库区为主的区域,面临着新的发展要求。除了要实现生态涵养的要求,更有要实现社会经济迅速发展,库区社会和谐稳定的要求。渝东北生态涵养区各区县都迅速提出了各自的生态涵养发展的思路与规划,但是总体仍然是发展战略性规划,产业和社会经济发展与环保要求居多。而区县相对较小的地理空间,需要更具体的空间落地规划和实施指导,不能够简单照搬重庆直辖市全域主体功能区划分的方式来落实规划意图,而要探索以实施导向的区县生态涵养规划编制思路,引导规划有效实施。本文结合万州区生态涵养发展规划编制的探索来进行分析。

1、渝东北生态涵养区的背景与要求

1.1背景

重庆首次将全域划分为都市功能核心区、都市功能拓展区、城市发展新区、渝东北生态涵养发展区、渝东南生态保护发展区“五大功能区”,并根据各自定位,在产业布局、人口分布、生态建设等方面作出了调整。五个功能区域在更大的空间格局和区域范围内优化资源配置,以更好地推动重庆大都市区的发展和建设;划分生态涵养发展区和生态保护发展区,是为了正确处理加快发展与保护生态的关系;明确各区域功能定位、发展重点和发展方向,目的是强化五大区域联动,更好地突出整体性、互补性和联动性,实现全市一盘棋发展,引导形成主体功能明确、板块之间联动、资源配置优化、整体效能提升的区域一体化发展格局。在五个功能区域划分基础上,进一步完善考核机制,充分发挥考核评价的引导和激励作用。

渝东北生态涵养发展区包含11个区县,以万州为核心,包括1个大城市(万州),10个中小城市,196个小城镇,面积约3.39万平方公里。截止2011年底,该区域户籍人口为1096万人,常住人口为833万人,城镇人口为325万人,城镇化率为39.02%,城镇人口占全市比重20.24%。该区域地区生产总值为1723.56亿元,占全市域比重17.03%。该区域是国家重点生态功能区和农产品主产区,长江流域重要生态屏障和长江上游特色经济走廊,长江三峡国际黄金旅游带和特色资源加工基地。需要把生态文明建设放在更加突出的地位,引导人口相对聚集和超载人口梯度转移,着力涵养保护好三峡库区的青山绿水,提高基本公共服务水平。

1.2要求

在五大功能区的划分中,也对渝东北生态涵养区提出了以下重点要求:

一是把万州作为重点开发区加快建设,发展特色产业集群,承接周边地区人口转移,建成三峡库区经济中心,带动形成万(州)开(县)云(阳)特色产业板块。

二是增强梁平县、丰都县、垫江县、忠县、开县等国家农产品主产县农业综合生产能力,推进县城及市级特色工业园区开发,构建农产品特色经济板块。

三是增强城口县、云阳县、奉节县、巫山县、巫溪县等国家重点生态功能县生态产品供给能力,因地制宜发展资源环境可承载的特色产业,构建特色旅游经济带。

四是根据资源环境承载能力,培育壮大有资源依托、环保水平高、吸纳就业多的特色优势产业,重点发展特色资源加工、机械加工、轻纺食品、生物医药、清洁能源、商贸物流等。严格控制并逐步淘汰落后产业。大力发展特色效益农业。大力发展生态旅游、人文旅游,加快建成长江三峡国际黄金旅游带,把旅游业打造成为支柱产业。

2 万州生态涵养发展规划编制的探索

2.1万州生态涵养发展的基础

万州是重庆第二大城市,地处三峡库区腹心。目前该流域内蕴藏着全国1/3的水资源和3/5的水能资源,拥有全国1/2的内河通航里程,是我国水资源配置的战略水源地、实施能源战略的主要基地、珍稀水生生物的天然宝库、连接东中西部的“黄金水道”和改善我国北方生态与环境的重要支撑点,具有十分重要的战略地位。万州区幅员面积3457平方公里,境内山丘起伏,最高点海拔1760米,最低点海拔120米,中山、低山、丘陵面积占90%以上,少平坝和台地,且零星散布。境内河流、溪涧切割深,落差大,呈枝状分布,均属长江水系。境内流域面积100平方公里以上的河流有共13条,溪沟93条,总水域面积为108.66平方公里。在不计基本农田的因素下,万州全区适宜建设用地约为 71.1平方公里,较适宜建设用地约为 475.1 平方公里。万州适合进行城市建设用地的承载力约为190万人左右。通过GIS分析,得出铁峰山、方斗山、七曜山以及长江沿线是低安全格局区域,是保障生态安全的最基本保障,是城市发展建设中不可逾越的生态底线,需要重点保护和严格限制。

2.2万州生态涵养发展的总体思路与空间布局

规划到2020年基本形成生态涵养发展的总体格局,功能区划清晰,发展重点突出,特色鲜明,生态环境明显好转,对主要森林、水源、景区、生物多样性保护较好,形成重点生态涵养保护区域的新发展态势。形成以中心城区及各镇乡的合理城镇体系结构,新农村聚居点为主的乡村居住空间体系,人口分布更加科学,城乡低碳绿色建设和宜居水平大幅提升。基本建成城乡一体化的公共服务设施和基础设施体系。社会事业更加发展,文化内涵更加浓郁,实现“看得见山,望得见水,记得住乡愁。”

全区生态涵养发展形成“一核、两轴、多点”的重点开发空间格局,形成四带五片保育与涵养的生态保护空间格局,总体形成开发与保护有机结合,城乡空间一体的生态涵养发展的新空间结构。

一核 ―― 中心城区

两轴 ――长江和318国道两条重点发展轴线

多点 ―― 41个镇乡小城镇和若干乡村聚居区、特色产业项目、旅游、能源基地,围绕各中心,与生态环境有机融合的点状网络结构

生态保护空间格局:

四带――长江及沿线、铁峰山脉、方斗山脉、七曜山脉等四片重点生态保障区

五片――甘宁龙沙武陵片、分水李河片、白羊太安片、龙驹罗田白土片、余家后山片等五片主要集中生态保育发展片区

图1开发空间格局规划图

2.3万州生态涵养发展功能区类型与空间布局

在全区生态安全格局分析基础上,按照不同国土空间所承担发展与涵养方面的不同特点与职责,宜建则建,宜养则养,将全区国土空间划定为城市建设区、城镇建设区、乡村聚居区、农业保养区、生态保障区五类功能区域,对各类分区进行诠释、定义,在不同功能区综合落实城乡建设规划、土地利用规划、生态环境保护规划、社会事业发展规划和产业空间布局规划的主要要求,实现“五规合一”协同。

城市建设区以城市综合发展为主,促进产业和社会事业充分发展,引导区域人口集聚,是最主要的城市生产生活空间。

城镇建设区以城镇特色发展为主,优化空间布局,缓解生境压力,促进人口集聚,适度发展第二产业和商业服务业等第三产业,是主要的城镇生活空间。

乡村聚居区以农村人口聚居为主,新建与改造相结合,节约资源能源,提高人居环境质量,可适当发展乡村旅游等第三产业,是主要的农村生活空间。

农业保养区以发展生态农业为主,引导人口有序转移,主要发展特色农业、观光休闲等产业,是主要的农业性生产空间

生态保障区以生态涵养为主,加强生态建设和环境保护,适当发展旅游度假等第三产业,是主要的生态空间。

2.4镇乡生态涵养涵养发展的引导与管控

对全区53个镇乡街道的国土空间结合其具体情况科学划定功能区域,分别明确各区引导建设内容与禁止建设内容,既要充分发挥各镇乡资源优势,又要落实区域生态环境建设、社会经济发展的要求。部分镇乡街道拥有前述5类功能区,部分也只拥有其中的几种。各镇乡街道规划以发展规划图、生态涵养管控(负面清单)图及发展管控说明(表)进行表达,如下图案例。

图2龙沙镇生态涵养规划图

2.5规划的实施与运用

本规划探索实施的路径。规划提出经政协协商,党委政府审议,人大审批后实施,严格执行,不得随意调整或突破。对禁止性要求等要重点监督。原则上3年修编一次,修编前对实施情况应进行评估。具体建设时还应按照土地利用、城乡规划建设、环境保护等规划的要求,相关法律法规规定及程序进行。

要求各镇乡街道要加强规划的实施,在招商引资、项目选址等活动时要对照本规划,作为宏观指导要求。在城市规划、小城镇规划、土地利用规划等规划进行动态调整时,要以本规划作为中观指导依据。项目审批时,要以本规划作为具体的审批规划依据。

同时也要加强生态补偿机制的研究、制度设计与实施。探索完善生态涵养发展指标评价体系。

3 实施导向的区县生态涵养发展规划方法与思路

万州生态涵养发展规划的编制,在以下实施导向的重点编制思路与方法探索,为直辖市区县主体功能区规划向实施层面探索提供了有益的支撑。

3.1多规协同的规划

生态涵养发展是区县域发展思路的调整,空间布局的优化。而传统的城乡建设规划、国土规划、社会经济发展规划等各自引导着发展和项目实施。为了生态涵养发展规划意图的落实,就必须要协同各大规划的重点要求,协调各大规划在空间落地等方面的一些矛盾,在新的生态涵养发展思路下形成新战略、新布局,同时又探索把生态涵养规划的要求,反转到城乡建设规划、国土规划等传统法定规划的更新落实,实现动态的有机融合状态。

3.2生态规划要点把控

生态涵养发展规划中“生态”是重点。而各规划中涉及到的生态要素众多,规划综合时既要考虑实现产业转型、城乡空间布局优化、生态环境保护等重大内容,更要重点关注关键生态要素的管控,主要有水源地及相关区域,集中林地,自然保护区,风景名胜区、森林公园、湿地等,石漠化、地灾点等生态修复区域。规划既要加强保护,也要通过人为的建设,形成更优的生态空间结构和发展应用模式。

3.3镇乡生态规划的管控

镇乡是规划实施的重要单元。当区县城成为发展的重点区域,项目的建设、生产运行有较严格的控制。而镇乡成为生态涵养的重要空间,一是镇乡小城镇发展中容易忽视环境类基础设施建设,也是环境污染小企业的重点集聚地,人居环境较差。二是在农业生产过程中,不注重对生态意义重要的资源保护,部分农业、畜禽养殖等造成面源污染。本次规划强化将各区域层面规划意图、法规要求结合镇乡实际情况,细化到每个镇乡街道空间,重点强调了生态管控的要素与要求,并以镇乡领导、管理者容易懂,便于使用的图表方式来表达,明白每块国土空间适合干什么,不能干什么,运用于发展战略布局、招商引资等工作情况,大大增强实用性。

3.4 GIS的空间规划叠加与分析

在规划技术方法上,加强了GIS的空间规划叠加与分析技术的应用。首先是GIS技术对全域生态本底进行分析,重点对山脉、水系、森林和需要控制的景源、地灾点进行分析,结合地形坡度等进行分析,综合评判生态安全格局,成为规划研究的基础。再者对各大规划(如城规、国土、交通、环保等)的要求分解并转化为空间发展布局或管控要素线,进行综合叠加来推导方案,并与生态基础分析叠加评估,增强了规划的科学性。

3.5非法定规划的实施应用探索

作为非法定规划,其应用方式与保障路径必须在规划初期就应该设计好,才能够保障有较强的实施性。关键点一是要通过党委政府审议、人大审批等方式,获得有类似准法定规划的权威性,二是要设计好评估、检查、监督机制,有一定奖惩的规则,以保障有足够的实施自觉性。

篇2

【关键词】动态规划;高维;优化方法;渠道工程

目前,动态规划的“维数灾”问题受到计算机高速存储量和计算时间的限制,在求解高维问题时,常遇困难.近40年来,各国学者对动态规划的计算方法进行了多方面的探索,提出了各种方法,如旨在减少维数的拉格朗日乘子法[1]、动态规划逐次渐近法[2],聚合法[3],旨在减少离散状态数的离散微分动态规划法[4]、双状态动态规划法[5]、状态增量动态规划法[6]和不离散状态直接求解以减少计算量的微分动态规划[7](要求目标函数、约束条件三阶可微)以及H.R.Howson等人1975年提出的以减少阶段数为手段的渐进优化法[7].这些方法虽然一定程度上减轻了“维数灾”,但进展并不很大.作者在对大型渠道工程系统优化设计研究时也遇到了这些问题,本文另辟其径,采用文献[8~12]中的系统试验选优基本思想,来求解高维动态规划问题,则可在该领域内取得突破性的进展。

1. 大中型渠道工程优化设计的高维动态规划模型及求解方法

1.1大中型渠道工程优化设计的高维动态规划模型。文献[13]提出了大中型渠道工程系统的定性定量混合系统动态规划模型,模型的决策变量为各渠段纵坡(Ii)和各渠段的定性方案(Si),目标函数为工程计算分析期内的总支出费用,并考虑首末水位、不冲不淤、渠道最小水位衔接和工程总投资约束. 为了进一步提高模型决策的精度,在文献[13]的模型基础上,再考虑以下约束:

1.1.1填挖土方量约束。若获得满足约束条件,且使文献[13]目标函数最小的解,而渠道工程的填方量大于挖方量,附近又没有土方资源,此时文献[13]中模型获得的解就不一定为最优解,因此,还应加上填挖方量约束方程。

1.2求解方法。考虑全部约束条件,则模型为四维问题,该模型的求解工作量、难度比文献[13]的二维问题大大增加了,为此本文在模型的求解方面进行了一定的探讨,提出了高维动态规划的试验选优方法。

1.2.1基本原理。本文对高维动态规划的降维传统技术之一——拉格朗日乘子法[1]进行了修正,提出了广义拉氏方法,使加入到目标函数中去的约束检验在计算迭代过程中进行,而不是传统的计算迭代结束后检验,因而不管拉格朗日乘子取值多少,采用广义拉氏方法的解均为满足约束条件的可行解.此时的问题就转化为寻找最优拉氏乘子的问题,根据数学模型和拉氏乘子的物理意义,容易知道拉氏乘子的取值范围,在此基础上则可采用部分试验选优方法[8~12](如正交试验法)确定最优的乘子值。

1.4实例分析。采用文献[13]算例,有关主要参数和可能的定性方案见表1.通过计算分析u2,u3,u4的取值范围均取为[0,2.4],选用L9(34)型正交表对所选的9个uj组合进行了对应的一维动态规划问题求解,其最优解和采用DDDP法求解结果目标值相差5.6%,对uj进一步离散选用L25(56)型正交表选择对应25个uj组合进行对应的一维动态规划问题求解分析,其最优解和采用DDDP法求解结果基本相同,此时占用计算机的运算时间不到DDDP法的1/6,有关计算主要成果摘要见表2和表3。

2. 结论

(1)寻求高维动态规划的求解方法是近40年国内外众多学者久攻不下的系统科学重大研究的课题.目前经典方法一般仅能求解3~5维问题,其它近似方法也只能求解数拾维问题.本文提出的试验选优方法可以使较高维数的高维动态规划问题求解成为可能.本文的试验方法主要针对正交试验法而言的,对于采用其它部分试验选优方法进行优化分析,还有待于进一步探讨。

(2)本文提出的大型渠道工程优化设计的高维动态规划模型对大型调水工程优化设计具有较为重要的参考价值。

参考文献

[1]Leon C, Mary W C.Introduction to Dynimic Programming.PergamonmPress, 1981, 197~207.

[2]Bellman R E, Dreyfus S E. Applied Dynamic Programming.Princeton Unversity Press, 1962, 293~3852.

[3]Turgeon A. A decomposition method for the long\|term schednling of reservoirs in series. Water resources research, 1981,17(6).

[4]Heidar M,Chow V T, et al. Disrete differential dynamic programming approach to water resource optimization.Water resources research, 1971,17(2).

[5]Ozden M. A binary state DP algorithm for operation problem of multireservoir system. Water resource resecrch.1984,20(1).

[6]Larson R E. State increment dynamic prorgamming.Management science 19, 1973,1452~1458.

[7]白宪台,多维动态规划.北京:水利电力出版社,1988,43~52.

[8]程吉林,金兆森,大系统模拟试验选优方法及应用.水利学报,1993,(11).

[9]程吉林,孙学华,模拟技术、正交设计、层次分析及其在灌区优化规划中的应用.水利学报,1990,(9).

[10]程吉林.某些特殊路径问题的正交表法.系统工程,1991,(2).

[11]程吉林.介绍一种大系统优化的知识模型.系统工程理论和实践,1992,(4).

[12]Jilin C, et al. Optimal test theory of large scale system and applying in irrigation district scheme.System science and system engineering,(ICCSSE'93)Edited by Zheng Weimin, International Academic Publishers Press, 1993, 348~356.

[13]Jilin C, et al. A dynamic programming medol of mixture system for conveyance canal engineering.Journal of system science and system engineering, 1993,4(2).

[14]高仑彦.正交及回归设计方法.北京:冶金工业出版社,1985.

[15]北京大学力学系概率统计组.关于正交设计的优良性.应用数学学报,1977,(1~2).

篇3

动态规范是算法里一种非常重要的方法,是求解决策过程最优化的数学方法。动态规划自问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其他方法求解更为方便。

本文通过对经典的01背包问题的求解,从动态规划的角度进行阐述,通过案例对该算法的计算过程进行了直观的描述,并对该算法进行了一定的优化,最后指出该算法的优缺点。

[关键词]背包 动态规划 时间复杂度 空间复杂度

[中图分类号]TP31[文献标识码]A[文章编号]1009-5349(2010)05-0121-03

前言

背包问题是一个经典的动态规划模型,很多关于算法的教材都把它作为一道例题,该问题既简单又容易理解,而且在某种程度上还能够揭示动态规划的本质。

将具有不同重量和价值的物体装入一个有固定载重量的背包,以获取最大价值,这类问题被称为背包问题。

背包问题可以扩展出很多种问题,而01背包问题是最常见、最有代表性的背包问题。

一、问题描述

给定一个载重量为M的背包及n个物体,物体i的重量为wi、价值为pi,1≤i≤n,要求把这些物体装入背包,使背包内的物体价值总量最大。此处我们讨论的物体是不可分割的,通常称这种物体不可分割的背包问题为01背包问题。

二、基本思路

01背包问题的特点是:每种物体只有一件,可以选择放或者不放。假设:xi表示物体i被装入背包的情况,xi=0,1。当xi=0时,表示物体没有被装入背包;当xi=1时,表示物体被装入背包。根据问题的要求,有如下的约束方程(1)和目标函数(2):

三、利用动态规划法求解01背包问题

(一)动态规划算法的基本思想

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中,这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。

(二)算法设计

假定背包的载重量范围为0~m。类似于资源分配那样,令optpi(j)表示在前i个物体中,能够装入载重量为j的背包所得的最大价值,j=1,2,……,m。显然,此时在前i个物体中,有些物体可以装入背包,有些物体不能装入背包。于是,可以得到下面的动态规划函数:

(4)式表明:把前面i个物体装入载重量为0的背包,或者把0个物体装入载重量为j的背包,得到的价值都为0。(5)式表明:当第i个物体的重量大于背包的载重量时,装入前i个物体得到的最大价值,与装入前i-1个物体得到的最大价值一样,即第i个物体没有装入背包。(6)式表明:当第i个物体的重量小于背包的载重量时,如果第i个物体装入背包,背包中物体的价值,等于把前i-1个物体装入载重量为j-wi的背包所得到的价值与第i个物体的价值pi之和;如果第i个物体没有装入背包,则背包中物体的价值,等于把前i-1个物体装入载重量为j的背包,却不装入第i个物体所取得的价值。显然,这两种装入方法,在背包中所取得的价值不一定相同,因此,取这两者中的最大值,作为把前面i个物体装入载重量为j的背包所取得的最优价值。

该算法可分为n阶段:

第一阶段,只装入一个物体,计算在不同载重量的背包情况下,所取得的最大价值;

第二阶段,装入前两个物体,按(5)式和(6)式计算在不同载重量的背包情况下,取得的最大价值;

……

第n阶段,装入前n个物体,按(5)式和(6)式计算在不同载重量的背包情况下,取得的最大价值,而在背包载重量为M时,所得结果就是我们想要的结果。

为了确定具体哪个物体装入背包,从optpn(m)的值向前倒推。有如下递推关系式:

(7)式表明:如果optpi(j)大于optpi-1(j),则物体i被装入背包;如果optpi(j)等于optpi-1(j),表明i物体未被装入背包。按照该关系式,i从n到1依次类推,直到确定第一个物体是否被装入背包为止,就能确定装入背包的具体物体。

(三)存储结构

该算法需要将每一个物体的重量和价值分别存储起来,并针对不同载重量的背包对物体分别计算,故考虑使用数组来实现。对于物体i,用weight[i]来表示重量、用p[i]表示价值,解向量用x[i]表示物体i是否被放入,上面提到的optpi(j)则用二维数组相应的optp[i][j]来表示,物体个数n,背包载重量为m。

(四)算法实现

initial knapsack_dynamic(initial optp[][],weight[],p[],x[],n,m)

{

initial i,j,value;

//根据(4)式初始化第0列及解向量X

//解向量初始值设置为false,表示起初所有物体均未放入背包

for(i = 0; i

{

optp[i][0] = 0;

x[i] = FALSE;

}

//根据(4)式初始化第0行

for(i = 0; i

{

optp[0][i] = 0;

}

//利用(5)(6)式计算optp[i][j]

for(i = 1; i

{

for(j = 1; j

{

optp[i][j] = optp[i-1][j];

if((j >= weight[i]) && (optp[i-1][j - weight[i]]+p[i]) > optp[i-1][j])

optp[i][j] = optp[i-1][j-weight[i]] + p[i];

}

}

//确定装入背包的具体物体

j = m;

for(i = n; i > 0; i--)

{

if(optp[i][j] > optp[i-1][j])

{

x[i] = TRUE;

j = j - weight[i];

}

}

//value就是所要求的值

value = optp[n][m];

return value;

}

1.案例分析

现有载重量为10的背包,有四个物体A、B、C、D,其重量分别为4、2、5、3,价值分别为4、3、5、8,要求放入物体使背包所获价值最大。

用optp[i][j]来存储这四个物体在不同载重量的背包下所获的价值,计算过程如下表所示:

2.时间空间复杂度

该算法中,矩阵optp的大小为(m+1)×(n+1),物体的重量、价值和解向量大小都等于物体个数n,故该算法的空间复杂度为O(nm)。对物体重量、价值的初始化(算法实现略)所需时间都为n,解向量和矩阵第0行初始化时间为n,矩阵第0列初始化时间为m,对矩阵optp的计算所需时间为n×m,解向量X的确定时间为n,故整个算法的时间复杂度为O(nm)。

(五)算法优化

在上述算法中,时间复杂度不能再继续优化了,但是空间复杂度是可以继续优化的。

上述算法中,存储optp使用的是二维数组,其大小为(m+1)×(n+1),但是仔细观察发现,optp[i][j]只与optp[i-1][j]和optp[i-1][j - weight[i]]有关,与optp[k][l](k=1,2,……,i-2,i+1,……n,j=1,2,……,m)无关,故可考虑只用一维数组_optp来存储,_optp[j]相当于optp[i][j]。而考虑到optp[i][j]是由optp[i][j]和optp[i-1][j - weight[i]]共同计算得到的,故该算法中的j循环要从后往前计算,_optp[]的计算算法设计如下所示:

for(i = 1; i

{

for(j = m; j >= 1; j--)

{

if((j >= weight[i]) && (_optp[j - weight[i]]+p[i]) > _optp[j])

_optp[j] = optp[j-weight[i]] + p[i];

}

}

上述例子中,相应的_optp[j]计算结果如下表所示:

}

}

上述例子中,相应的_optp[j]计算结果如下表所示:

显然,对于物体i,_optp[j]的计算不会影响到_optp[0,1,……,weight[i]-1],故上述算法可继续优化为:

for(i = 1; i

{

for(j = m; j >= weitht[i]; j--)

{

if((_optp[j - weight[i]]+p[i]) > _optp[j])

_optp[j] = optp[j-weight[i]] + p[i];

}

}

对于01背包问题,常见的要求有两种:一种是恰好装满背包、另一种则没有要求,针对这两种问法,可从初始化上来区分。

当要求恰好装满背包时,初始化时将_optp[0]设为0,其他_optp[1,2,……,m]全部设为-∞,这样就可保证最终得到的_optp[n]是一种恰好装满的最优解,此时可以把初始化理解成没有任何物体可放时,只有容量为0的背包能被价值为0的nothing“恰好装满”;当没有这个限制时,初始化时应将_optp[0,1,……,m]都设为0,此时可以理解为任何一个背包都有一个合法的解“什么都不装”,这个解的价值为0。

当优化后,空间复杂度变为O(m),计算所需时间为:

当weitht[i]较大时,可以节省很多时间。

动态规划的缺点:对于01背包问题,用动态规划方法解很容易理解,但是这种方法有一些弊端,从上述算法可以看出:当物体的重量较大时,所需的物理空间较大;当物体的重量不是整数时,无法利用数组来存储该结构。

四、结束语

在日常生活中,01背包问题有很多应用,比如如何利用有限空间的手提包,装入外出旅行的各种必需品。

篇4

关键词:背包算法;优先策略;动态规划;栈操作

中图分类号:TP274文献标识码:B

文章编号:1004-373X(2010)02-128-03

Design and Analysis of Knapsack Problem

YU Miao

(Anshan Meteorological Bureau of Liaoning Province,Anshan,114004,China)

Abstract:Knapsack problem is typical problem in computer science and its solution is a hot spot in algorithms design and verification.The solutions for the knapsack problems,algorithms design and verification with three different means:preference strategy,dynamic programming and recursion.Correctness of these three algorithms are proved,in the complexity analysis,the complexity of space and time in preference strategy is lowest,while the dynamic programming has obvious superiority.

Keywords:knapsack problem;preference strategy;dynamic programming;stack peration

0 引 言

算法研究是计算机科学的重要组成部分,有观点认为 “计算机科学是一门研究算法的科学”[1,2],无论这种观点是否全面,都足以说明算法研究在计算机科学发展中所具有的重要作用及地位。算法研究是通过程序来实践的。程序=算法+数据结构[3,4],这一大家都熟知的公式更加表明算法研究不是单纯的数学问题,必须通过 “实践”掌握算法的实质。这里对 “背包问题”采用优先策略、动态规划及递归三种不同方法进行求解、算法设计及验证,并通过各种算法予以实现。本文研究、分析了实现 “背包问题”算法的实质。

1 问题描述

一旅行者携带背包去登山,已知所能随身携带的背包重量限度为 b,现有n种物品可供选择装入背包。第i种物品重量为ai,其重要性价值指标为ci,旅行者应如何选择携带各种物品,以使总价值最大[5,6]。

“背包问题”的数学模型为:

max z=∑ni=1cixi

约束条件为:

∑ni=1aixi≤b,ai>0,ci>0,

xi=0或1, 1≤i≤n

2 优先策略的算法设计

按重量a1≥a2≥a3≥a4≥…≥an对xi进行调整,作为待选队列[7,8]。

假设前面已经选择了s个,即jr1,jr2,…,jrs为最优选择的前s件物品,则应满足:

cr1,cr2,…,crs,且∑si=1 ai

对后面等待选择的物品jk来说,与之对应的ak无疑满足:

ak≤ari, i=1,2,…,s

即所选择的物品重量比其所有待选择的物品重量大。因此,对待选择的物品是否被选中将分为:∑si=1ari+ak≤b和∑si=1ari+ak>b 两种情况。

(1) 对于∑si=1ari+ak≤b的情况,将xk插入已选择的J队列中,然后根据ci的大小找到其相应的位置。

(2) 对于∑si=1ari+ak>b的情况,有:

① 若存在ck≥cri,则将xk插入并按ci排序后,将jri从已选择的队列中删除并插入按ci从大到小、重量从小到大地排序到二次筛选队列中。

② 若存在ck

③ 当待选队列为空时,选择队列从s到1与从二次筛选队列中选择的元素进行优化选择。若存在:

∑n-s-mj=1aj+∑s-1i=1ari≤b, ∑n-s-1j=1cj>cri

将组合的各元素Xi插入已选择的J队列中,然后根据 ci的大小找到其相应的位置:jri,jr2,…,jrs。

④ 当③中已完成对首元素组合的筛选后,此时的J队列为最优选择。

3 动态规划法的算法设计

动态规划的基础是最优化原理,其关键问题是建立动态规划的数学模型(状态转移方程)。主要步骤是:划分阶段,确定阶段的状态;确定决策变量、权函数以及指标函数;建立状态转移方程;根据动态规划的最优化原理建立递归方程;自底向上递推逐步求解。

(1) 划分阶段k:将供选择的物品按 1,2,…,n排序,每个阶段可装入一种物品;

(2) 确定决策变量:xk装入第k种物品的件数;背包中允许装入前k种物品的总重量;

(3) 建立状态转移方程:sk=sk-1+akxk;

决策集合为:

D(sk-1)={xk|0≤xk≤[sk/xk],xk∈Z}

(4) 建立递归方程:

fk(sk)=maxxk=0,1,…,\{fk-1(sk-1- xkak+ ck)}

f0(0)=0

(5) 递推求解:逐步计算出f1(s1),f2(s2),…,fn(sn)最后求得,fn(a)即为所求的最大价值。

4 递归的算法设计

递归算法的基本思想是假设用布尔函数 knap(s,n) 表示 n件物品放入可容质量为 s的背包中是否有解,当knap函数的值为真时,说明问题有解,相反当值为假时,无解。这里可以通过输入s和n的值,进行以下几种情况的讨论。

(1) 当s=0时,可知问题有解,即函数knap(s,n)的值为true。

(2) 当s

(3) 当s>0且n0且n≥1 时,才符合实际情况,这时又分为两种情况。即:

篇5

关键词:管网设计;直接及间接优化;设计方法

中图分类号:S276 文献标识号:A 文章编号:2306-1499(2013)06-(页码)-页数

目前,对于城市排水管道系统优化设计问题,已开发了一些水力计算程序和优化算法如直接优化法、动态规划法、遗传算法等,并在设计过程中得到一定应用,并能显著提高设计水平和设计效率。下面就排水管网优化方法及特点做一简要介绍。

1.直接优化设计方法及优缺点

在管线平面布置己定情况下的污水管网各个参数的优化设计,被分为直接优化法和间接优化法。直接优化法是根据排水管道系统性能指标的变化,通过直接对各种方案或可调参数的选择、计算和比较,来得到最优解或满意解,它具有直接、直观和容易验证的优点。直接优化法主要包括电子表格法和两相优化法。电子表格法是利用“电子表格”统计数据和分析数据的功能进行管网优化的。它提供了一种启发式费用估算方法,利用这种方法,用户可寻找最小费用的设计。两相优化法是当设计流量确定后,在满足约束条件的前提下,选取最小流速和最大充满度进而得到最优管径和最小坡度,最大限度的降低管道埋深。其算法与人工计算基本相同,即按污水流动方向,先计算支管后计算干管和主干管,通过从上游至下游依次对各设计管段进行计算,继而完成一条管道及整个管网的计算。

2.间接优化法

间接优化法对其中的某些条件适当取舍,把问题简化、抽象为容易解决的数学模型,通过计算得出最优解线性规划法是优化技术中最常用的一种方法。它对于污水管网设计计算模型中的约束条件和目标函数的非线性,分别用它们的一级泰勒展开式代替,将之化为线性规划问题,用线性规划的解作为问题的近似解,反复迭代,使迭代点序列逼近非线性规划的最优解。它的缺点是把管径当作连续变量来处理,存在计算管径与市售规格管径相矛盾的问题。把非线性函树转为线性函数,前期准备工作量大,且难以保证结果的计算精度。混合整数规划法,作为线性规划法发展形式,克服了线性规划的部分缺点,可以解出离散的标准管径,但由于整形变量过多,往往难以求解,从而应用受到限制。

2.1非线性规划法

非线性规划法是为了适应排水管道系统优化设计计算模型中目标函数和约束条件的非线性特征而提出来的。它可以优化选择排水管道的直径和埋深,以及中途泵站的位置。其假定管径是离散的,易于对目标函数和约束条件进行敏感性分析。但是该方法极大地限制了目标函数和约束条件的形式。

2.2罚函数离散优化法

罚函数离散优化法将排水工程的特点与罚函数离散思想相联系,可以排除不合理的设计方案,以管系末端管底标高为全局控制因素,建立与目标函数的可行解对应关系,并通过同时进行整体控制与局部控制的水力计算方法,遍历目标函数的可行解及局部最优解,从而得到管系的全局最优设计方案。该方法由于对管道系统的各种可行解进行遍历,在解决大型管网问题时,必然存在运行时间长和内存占用量大的缺点。

2.3动态规划法

动态规划法是目前在国内外广泛应用的排水管道优化设计计算方法。它的基本思想是认为排水管道是一个多阶段的决策过程,通过对研究课题划分阶段,寻求最优路线来进行优化设计。它在应用中分为两支:一支是以各节点埋深做为状态变量,通过坡度决策进行全方位搜索,其优点是直接利用标准管径,优化结果与初始解无关,且能控制计算精度,但要求状态点的埋深间隔很小,使存储量和计算时间大为增加。为了节省运算时间,引入了逆差动态规划法。逆差动态规划法是在动态规划法的基础上引入了缩小范围的迭代过程,可以显著地减小计算时间和存储量,但在迭代过程中可能遗漏最优解,而且在复杂地形条件处理跌水,缓坡情况时受到限制。另一支是以管径为状态变量,通过流速和充满度决策进行搜索的动态规划法。由于标准管径的数目有限,较以节点埋深为决策变量方法在计算机存储和计算时间上有显著优势。最初的动态规划对每一管段选取的一组标准管径中并不全是可行管径,因此发展出可行管径法。可行管径法通过数学分析,对每一管段的管径采用满足约束条件的最大和最小管径及其之间的标准管径,构成可行管径集合,进而应用动态规划计算。可行管径法使得优化计算精度得以提高,并显著减少了计算工作量和计算机存储量。尽管动态规划法是解决多阶段决策问题最优化的一种有效方法,但其状态变量均应满足“无后效性”的特点。“无后效性”是指当给定某一阶段的状态时,在以后各阶段的行进要不受当前各阶段状态的影响。从前面的分析可知,在排水管道系统设计计算时,前一管段的设计结果将直接影响到后续管段设计参数的选用,无论是利用节点埋深还是管短管径作为状态变量,都没有充足的证据能够状态变量的“无后效性”。因此利用动态规划法求出的污水管道优化设计方案并不一定是真正的最优方案。

3.优化设计的遗传算法

遗传算法是近几年迅速发展起来的一项优化技术,是一种模拟自然界生物进化过程的全局随机优化算法。遗传算法借助于生物进化机制与遗传学原理,按照自然选择和适者生存的原则,利用简单的编码技术和繁殖机制,模拟自然界生物群体优胜劣汰的进化过程,使待优化问题逐步从初始解进化到问题的最优解。简单易用、灵活方便、通用性强以及隐含并行性等特点使遗传算法比传统优化方法具有更大的优越性,为解决复杂系统优化问题提供了一种通用框架,成为解决函数优化、网络优化、组合优化等许多工程优化问题的重要技术之一。是进化算法的一个重要分枝。利用这一进化理论同样可以作为排水工程实践中的寻优方法。应用遗传算法进行污水管网优化设计的关键在于确定合适的编码方式以及将实际问题的优化目标函数转换为遗传算法的个体适应度函数。

目前,遗传算法与神经网络的结合越来越受到人们的关注,并且己经形成了一种新颖的遗传神经网络研究领域。近年来,该领域的研究非常活跃,并取得了不少成果,这为遗传神经网络更为广泛深入的应用带来了充满希望的前景。目前主要的结合方式是将遗传算法用于神经网络权值的优化和拓扑结构的设计。用遗传算法优化神经网络权值是在网络结构已经确定的前提下进行的,无需计算梯度信息,遗传算法就能够发现神经网络连接权值的一个接近全局最优的权值集,这使得用遗传算法优化神经网络权值对那些大而复杂、误差梯度信息很难获取或根本不可用的问题特别具有吸引力。如果神经网络误差的梯度信息容易获取,则把遗传算法与基于梯度信息的BP算法相结合的方法可以提高权值训练算法的性能。

4.结语

优化设计系统将设计人员计算量大大降低,把设计人员从查阅图表的繁杂过程中解脱出来,加快设计进度,与此同时,整个排水管道系统得到了优化设计。研究标明,优化后的排水工程大约可以降低约10%的工程造价。应用各种优化算法进行排水管网的优化设计在实际工程优化设计中有较大的推广应用潜力,可以为工程设计优化和科学的方案决策提供科学的参考依据,能够达到节省工程投资和提高设计质量的良好效果。当然,排水管网的优化算法要想被广大工程技术广泛接受,一方面需要设计人员勇于尝试和应用新技术、新方法,另一方面也需要开发出能够将合适的优化算法和传统计算方法有效融合在一起的计算机辅助设计软件,以促进新方法在实际工程设计过程中推广应用。

参考文献

篇6

关键词:0-1背包;动态规划

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)17-31378-02

The Dynamic Programming Algorithms of 0-1 Knapsack Problem Based on Visual C++

CHEN Zi-li, PAN Yan-yan

(Fujian Communication Technology College,Fuzhou 350007,China)

Abstract:The 0-1knapsack problem is a classic NP problem.In this paper,the 0-1 knapsack problem and its algorithm is analyzd ,the algorithms is based on Dynamic Programming.And carry out that algorithms in the Visual C++.

Key words:0-1 Knapsack;Dynamic Programming

1 0-1背包问题

0-1背包问题是:已知n个物品的重量及其价值分别为Wi>0和Pi>0,背包的容量假设设为Ci>0,如何选择哪些物品装入背包可以使得在背包的容量约束限制之内所装物品的价值最大?

2 几种解法的比较

2.1 动态规划算法

动态规划可以把困难得多阶段决策变换为一系列相互联系比较容易的单阶段问题。对于背包问题可以对子过程用枚举法求解,而且约束条件越多,决策的搜索范围越小,求解也越容易。

2.2 回溯法

回溯法需要为问题定义一个解空间,这个解空间必须至少包含问题的一个解(可能是最优的)。使用递归回溯法解决背包问题的优点在于它算法思想简单, 而且它能完全遍历搜索空间,肯定能找到问题的最优解;但是由于此问题解的总组合数有2n个,因此,随着物件数 n 的增大,其解的空间将以2n级增长,当 n 大到一定程度上,用此算法解决背包问题将是不现实的。

2.3 贪心算法

使用贪心方法求解时计算的复杂度降低了很多。贪心算法是一种不要求最优解,只希望得到较为满意解的方法。一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心方法常以当前情况为基础作最优选择,而不是考虑各种可能的整体情况,所以贪心算法不需要回溯。但是,对于某些情况,实际上有解,而该算法不能找到解。

2.4 分枝-限界法

分枝界限是另一种系统地搜索解空间的方法,与回溯法的主要区别在于对E节点的扩充方式。每个活节点有且仅有一次会变成E节点。当一个节点变为E节点是,则生成从该节点移动一步即可到达的所有新节点。在生产的节点中,抛弃那些不可能导出可行解的节点,其余节点加入到活节点表,然后从表中选择一个节点作为下一个E节点。从活节点表中取出所选择的节点并进行扩充,直到找到解或活动表为空,扩充才结束。

2.5 遗传算法

遗传算法是一类借鉴生物自然选择和自然遗传机制的随机化的搜索算法。它适用于处理传统搜索方法难于解决的复杂和非线性问题。遗传算法是一种群体型操作,该操作以群体中所有个体为对象。选择、交叉和变异是遗传算法的三个主要算子,它们构成了遗传算法的主要操作。使用遗传算法解决物件数较大的背包问题,它具有收敛快、搜索速度快的特点。然而在一般情况下,使用基本遗传算法解决背包问题时,得到问题的近似解也不能满足逼近最优解的要求。

下面介绍用动态规划算法实现0-1背包问题的求解。

3 动态规划算法

3.1 0-1背包问题的描述

3.2 最优子结构性质

0-1背包问题具有最优子结构性质。设(y1,y2,…,yn)是所给0-1背包问题的一个最优解。则

3.3 递归关系

设所给0-1背包问题的子问题:

的最优解值为m(i.j),即m(i.j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,就可以建立计算m(i.j)的递归式如下:

4 C++实现算法

#include

#include

#include

int min(int w,int c)

{int temp;

if (w

else

temp=c;

return temp;}

int max(int w,int c)

{int temp;

if (w>c)temp=w;

else temp=c;

return temp;}

void knapsack(int v[],int w[],int c,int ,int**m)

//求最优值

{int jmax=min(w[n]-1,c);

for(int j=0;j

m[n][j]=0;

for(int jj=w[n];jj

m[n][jj]=v[n];

for(int i=n-1;i>1;i--){ //递归部分

jmax=min(w[i]-1,c);

for(int j=0;j

m[i][j]=m[i+1][j];

for(int jj=w[i];jj

m[i][jj]=max(m[i+1][jj],m[i+1][jj-w[i]]+v[i]);}

m[1][c]=m[2][c];

if(c>=w[1])

m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);

cout

for(int l=2;l

for(int j=0;j

{cout

cout

int traceback(int **m,int w[],int c,int n,int x[])

//回代,求最优解

{cout

for(int i=1;i

if(m[i][c]==m[i+1][c]) x[i]=0;

else {x[i]=1;

c-=w[i];}

x[n]=(m[n][c])?1:0;

for(int y=1;y

{cout

return x[n];}

void main(){

int n,c;

int**m;

cout

cin>>n>>c;

int *v=new int[n+1];

cout

for(int i=1;i

cin>>v[i];

int *w=new int[n+1];

cout

for(int j=1;j

cin>>w[j];

int *x=new int[n+1];

m=new int*[n+1];//动态的分配二维数组

for(int p=0;p

m[p]=new int[c+1];}

knapsack(v,w,c,n,m);

traceback(m,w,c,n,x);}

5 测试

在Visual C++ 下对该算法进行测试 :例:背包的容量c=10,物品个数n=5,w={2,2,6,5,4},

v={6,3,5,4,6}。

输出结果: 1 1 0 0 1

背包的总重量:8

背包的总价值:15

6 算法分析

上述算法Knapsack需要O (nc)计算时间,traceback需要O(n)计算时间。采用动态规划算法解决0-1背包问题,并通过编程在Visual C++下进行测试得到了较好的结果,证明了算法的正确性。但是,算法还是有缺陷的,当c很大时,算法需要计算的时间较多,还需改进。

参考文献:

[1]王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2004.

[2]刘玉娟,王相海.0-1背包2问题的两种扩展形式及其解法[J].计算机应用研究,2006.

[3]杨晓红.基于Visual C++的0-1背包问题的贪婪算法[J].科技资讯导报,2007.

[4]黄波,蔡之华.0/1背包问题及其解法研究[J].电脑知识与技术,2007.

篇7

随着AlphaGo(围棋人工智能程序)在2016年初击败了世界围棋冠军后,人工智能技术的研发与讨论继续走向一个新的高峰,而语音识别技术则是其核心内容。

本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述。运用解码器进行解码操作,通过搜索算法在解码端寻找最优词串,搭建和训练声学模型,并提高语音识别率。本项目基于一个完整的Android软件作为依托,但由于篇幅有限,本文重点讨论离线语音包、搭建语言模型、以及语音解码模块的设计过程。

1.项目背景

语音识别技术是能够将人的语音信号转换成机器可以识别的指令的一种方法,通过指令来控制机器的正常运转。语音识别的任务主要包括:孤立词识别、关键词识别、连续语音识别等。

市面上的离线语音识别一直不成熟,识别慢、识别率低等问题一直被人诟病。本项目离线语音识别部分是基于Sphinx-4自行训练得到的声学模型和语言模型,在小词汇量识别方面尽量提高其识别率。

2.需求分析

一个成熟的语音识别系统可以划分为特征提取、声学模型训练、语言模型训练和解码器四个重要组成部分;而离线端语音解码模块,包括了对原始语音进行信号处理、特征提取、通过Viterbi动态规划算法搜索最优结果、语义分析及输出文本结果等步骤。

1、 原始信号处理:获取通过麦克风按钮接收到的原始音频数据,过滤非必要信息以及背景噪音对语音前端点和后端点进行截取,对语音信号分割成若干个进行分析;

2、 特征提取:根据sphinxbase语音系统给出的接口,提取出语音信号的关键特征,并将其生成一个序列,以供解码处理时搜索这个隐式序列,得出结果;

3、 算法搜索最优序列:根据Viterbi算法设计出计算序列中出现概率最大的词串的方法,搜索出每一帧语音信号的最优路径,输出结果;

4、 语义分析及输出识别结果:根据孤立的关键词判断搜索出来的语音结果属于哪一个应用场景,如“打电话”、“发短信”、“上一频道”、“下一频道”等等孤立词;

离线语音解码模块流程如下图2-1所示:

3.系统设计

3.1.特征提取

特征提取的主要目的是减少语音噪声静音等无用的杂讯,获取必要的讯号数据,将数据转换成电脑可以识别的数字信号,以便作识别和语义分析。

本语音识别技术模块基于Sphinx4语音识别系统进行开发的,其中声音的预处理是利用MATLAB这一便于算法开发的软件来实现对语音信号进行数字处理与分析,也可称为特征处理。其包括对原语音信号进行预加重处理,然后需要进行分帧和加窗、采样和量化、端点检测等。

其中,包括:预加重处理、分帧、量化处理以及语音端点检测等过程。如下3-1所示:

3.2. 基于动态规划的Viterbi算法

动态规划算法的基本思想是将问题分解成若干个子问题,求解子问题,最后从子问题的解中得到原问题的解。通常利用动态规划算法解决问题的步骤是先找出最优解的性质,刻画最优解的结构特征,然后递归定义出最优解,用自底向上的方法计算出最优路径,最后根据计算出来的最优值信息,构造最优解。图下图3-2所示:

因此,基于动态规划的Viterbi算法的整体设计思路如下:

1、 对于每一个语音状态要设置一个三元组作为记录:(prob,v_path,v_prob),这里声明的prob是从最初状态的到当前状态的所有路径的出现概率相加的结果,其中最优的路径为viterbi路径,v_path代表的就是viterbi路径,而v_prob代表的则是此路径出现的概率;

2、 算法开始后,初始化一个Map集合,把每一种语音状态都映射进三元组中

3、 设置三重for循环,计算从当前语音状态到下一阶段的过渡概率会出现什么变化,所有下一状态判断完之后,从集合中遍历找出最优结果,即出现概率最大的路径;

4、 保留每一帧语音在某个状态的最优路径,输出结果。

4.总结

语音识别技术的核心是HMM技术(隐式马尔科夫模型),而本文主要基于语音识别技术的语音解码模块进行讨论,从其涉及技术、设计、实现进行全面描述,对离线解码模块中的特征提取、以及使用动态规划的Viterbi算法实现搜索最优序列进行了详细介绍。模块基本实现完成,但仍有很多值得提升和完善空间,今后可以使用更先进的算法进行优化。

参考文献

[1] 朱元涛.Android应用开发范例大全[M]. 清华大学出版社.2015.

[2] 郭霖. 第一行代码 Android [M]. 人民邮电出版社. 2014.

[3] 何红辉,关爱民.Android 源码设计模式解析与实战 [M]. 人民邮电出版社. 2015.

[4] Android Studio Applicati [M]. 进口原版图书.

[5] The Definitive Guide to Sqlite [M]. Apress.

[6] 李兴华.Android开发实战经典[M].清华大学出版社.2012.

[7] Android开发实战[M].清华大学出版社.2013.

[8] 赵卓君.Java语言程序设计高级教程[M].北京.清华大学出版社.2010.

[9] 朱少民.软件测试方法和技术(第2版)[M].北京.清华大学出版社.2010.

[10] UML和模式应用[M].机械工业出版社.2006.

篇8

关键词:市政给排水;管道设计;优化设计

引言

城市普遍存在水质污染的问题,致使城市水环境遭受到严重破坏,水质型缺水的区域不断扩大,水资源供需失衡,这一问题已对城市中居民的生活,健康及城市现代化进程构成了危害,严重威胁到城市的水系统以及城市的可持续发展。随着城市化进程的发展,城市市政自来水给排水工程是城市举出设施的重要组成部分之一,如何降低市政自来水管道减少爆管漏水等问题带来的水资源的浪费,有效提高城市自来水供排水管道的效率和输水能力,为城市居民日常生活和城市建设提供经济实惠、安全可靠的水资源保障,如何改善市政自来水给排水管道的设计是必要的。

1.市政给排水工程的结构设计

1.1市政给排水工程的结构设计

在市政给排水工程中,根据工程的埋设深度。工程管道规格、材质以及地下水位和试验压力等综合指标,对管道的强度和刚度进行计算及复核,提供给排水的管道等级、壁厚以及结构配筋图。通常采用的加固措施有混凝土、管廊包管等,对于一些必须要满足刚度和强度要求的管道应该及时采取加固方法来进行加固,而且在施工过程中根据计算采用具体的加强加固措施,加固的具体方法和方式应根据经济指标和实际情况来确定。

1.2市政给排水工程的结构形式

在市政给排水工程中,排水专业确定管道的结构形式,一般来说,结构专业应根据管道的工作环境。结构用途以及水文地质情况等经济指标等从专业角度提出参考意见。特殊地段以及特殊情况的非承压管也采用钢管等形式当污水管道;而对于口径较大时应采用现浇钢筋混凝土箱涵,或采用盾构结构形式。

2.市政给排水管道对于城市的意义

在市政基础设施建设和完善中,给排水管道的铺设和维修护养对城市有着极其重要的影响。给水管道关系整个城市的生活和工业用水的供给,而排水管道则关系城市污水的排出和雨水等可能造成市内积水的多余水量及时排空。在这样一种背景下,市政给排水工程的完善程度和施工质量对城市居民生活将会产生重要的影响。

另外,市政管道的铺设有些是在城市生活区和工业区划定建成后或者建设过程中开始施工,在不破坏原有市政建筑的前提下完成新的给排水管道的铺设,便对施工技术提出了一定的要求。同时,给排水工程质量的要求也必然要求我们加强对施工技术的严格控制。只有在高质量标准要求下完成的工程才能减少使用过程中的一些问题,从而减少给排水工程维修护养的经济成本。

3.市政排水管网优化设计

3.1管线的平面优化布置

排水管网的布置原则是既要使工程量最小,又要使水流畅通、节省能量。正确的定线是合理经济的设计管网的先决条件。定线的基本原则是:干管支管的设计尽量采用直线布局,不要拐弯;定线应尽量利用地势,使污水在重力作用下流入污水厂;设计时应尽量减少管道埋深;在管道的中途尽量减少提升泵站的设置。在早期的研究中,设计方法为假定每一段管径相同,以挖方费用为优选依据,选择一初始布置方案,然后通过算法逐步进行调整。后来又引入了排水线的概念,将排水区域内与最终出水口节点相距同样可行管数的节点用一根排水线连接起来。这样把问题转化为最短路问题,可用动态规划法求解。但此方法把寻优的范围被限制,使人们在设计过程中很容易把最优方案排除。后来,人们把城市排水系统排水布置抽象为由点和线构成的决策图,从图论中寻找方法。1986年发展到利用三种权值来解决问题。三种权值是各管段地面坡度的倒数;各管段的管长;各管段在满足最小覆土条件下,按最小坡度设计时的挖方量。分别对这三种权值运用最短路生成树算法求管线平面布置方案,再进行管径、埋深和提升泵站的优化设计,最后取投资费用最小的平面布置方案作为最优设计方案。

3.2已定平面布置下的管道系统优化设计

排水管道优化设计主要是指:对于某一设计管段,当设计流量确定后,在满足设计规范要求的管径和坡度的多种组合中,取得管材费用与敷设费用的平衡。在排水管线平面布置已定情况下,对于管段管径,埋深的优化设计,国内外做了大量研究工作。

(1)线性规划法和非线性规划法。a线性规划法,是针对排水管网设计计算中的约束条件和目标函数的非线性,分别用其一级泰勒公式展开式代替,用线性规划的解作为问题的近似解,反复迭代,使迭代序列逼近非线性规划的最优解。缺点是把管径当作连续变量来处理,存在计算管径与市售管径不一致的矛盾,且前期准备工作量大,以后发展的整数规划法,虽然在一定程度上解决了线性规划的缺点,但是其整型变量比较多,难以求解。b非线性规划法适应了计算模型中目标函数和变量的非线性特征,可以优化选择管道的直径和埋深,但极大限制了目标函数和约束条件的形式。

(2)动态规划法。动态规划法是目前国内外比较常用的一种方法,基本思想是把排水管道设计看作一个多阶段的过程,通过对设计过程进行阶段划分来对管道进行优化设计。其应用主要分为两方面。a以节点埋深为状态变量,通过坡度决策进行全方位搜索。其优点是直接采用标准管径,结果与初始管径无关,且能控制计算深度,但要求状态点之间的埋深间隔很小,使存储量和时间间隔大为增加。因此在此基础上引入了拟差动态规划法,在动态规划法的基础上引入了缩小范围的迭代过程,但应用有一定的局限性。b以管径为状态变量,通过流速和充满度决策。由于可使用的标准管径数目有限,因此在计算速度和存储量上都有很大优势。以后又发展出了可行管径法。此法使优化计算精度得以提高,并显著减少了计算工作量和计算机存储量。尽管动态规划法是解决多阶段决策问题的一种有效方法,但在排水管道系统设计计算时,前一段的设计结果将直接影响到后续管段设计参数的选用,因此利用动态规划法求出的污水管道优化设计方案也并不一定是真正的最优方案。

(3)直接优化法。直接优化法是直接对各种方案或可调参数的选择设计计算和比较来得到最优解,具有直观和容易验证的优点。主要方法有:a电子表格法是一种启发式的费用估算方法,允许用户寻找最小费用设计,能得出比动态规划法要好的结果而且更符合设计规范的要求。b两相优化法是设计流量确定后,在满足约束条件的前提下,选取最经济流速和最大充满度进而得到最优管径和最小坡度,最大限度地降低管道埋深.直接优化法的算法与人工算法基本相同,但受设计人员的能力所限,所得结果不尽相同,所以所求结果不一定是最优解。

(4)遗传算法。遗传算法是进化算法一个分支,是模拟生物学中的自然遗传变异机制而提出的随机优化算法。遗传算法在解决中小型管道系统优化设计问题时可以求得最优设计方案。但解决大型管道系统问题时,只能求得趋近于最优解的设计方案,在排水管道系统优化设计中,不论采用何种方法,都以设计规范为基本要求,同时使费用达到最小。

4.结束语

在整个市政基础建设工作中,各专业一环扣一环,最重要的是市政排水管道工程是隐蔽工程,维修起来比较麻烦,有的甚至是无法维修,并且维修费用较大,因此,在设计施工过程中,必须有效避免这些常见问题,加强对排水管道工程的质量控制,消除工程质量缺陷,切实保障人民的利益。

参考文献:

[1]韦从胜,蒋全华.市政给排水管道设计[J].技术与市场,2011,(7).

篇9

关键词:0-1背包;回溯

中图分号:TP311 文献标识码:A 文章编号:1009-3044(2016)36-0076-02

The B_tracking Algorithm of 0-1 Knapsack Problem Based on C#

CHEN Zi-li

(Fujian Chuanzheng Communications College, Fuzhou 350007, China)

Abstract: The 0-1knapsack problem is a classic NP problem. In this paper, the 0-1 knapsack problem and its algorithm is analyzed, the algorithms is based on B_tracking algorithm. And carry out the algorithms in the C#.

Key words: 0-1 Knapsack; b_tracking algorithm

1 0-1背包思想

0-1背包问题的思想:如果n个物品的重量和价值分别为[wi>0]和[pi>0],背包的大小设置成[ci>0],应该怎样往背包中放置物品可以达到最大值或者最佳装载方式?[5]

在实际进行装包操作时,规定每种物品只能载入一次,而且每种物品只能执行载入或者不载入操作,则把该问题叫做0-1背包问题。

给定[wi]>0,c>0,[vi]>0,[1≤i≤n],寻求一个n元0-1向量[(x1,x2,...,xn),xi∈{0,1},][1≤i≤n],使得[i=1nwixi≤c],而且[i=1nvixi]是最值。

[maxi=1nvixi] [i=1nwixi≤cxi∈{0.1},1≤i≤n]

2 几种解法的比较

2.1 回溯法

回溯法就是为问题声明一个解集合,这个集合存在一个可能是最优的解。递归回溯法算法思想非常简单,能够对搜索空间进行遍历,必然可以找到背包问题的最优解,缺点是背包问题解集合将随着物品数量n的变大以2的几何级数增长,当n大到一定程度上,要遍历搜索空间需耗费大量的时间和资源,因此当物件数过多的时候,就很难依靠回溯法来求解。

2.2 动态规划算法

动态规划指的是把复杂的多阶段问题分解成相对简单的单阶段问题。对于背包问题可以用穷举法对子过程进行求解,并且决策的搜索范围会因为条件的增多而变小,这样求解也更简单。

2.3 贪心算法

贪心方法的使用可以降低求解时计算的复杂度。贪心算法不是片面追求最优解,因此不理会所有情况,所以不象回溯法那样进行遍历,一般情况下,就以目前情形最为最优的 。

2.4 分枝限界法

分枝界限与回溯法拓展E节点的方法不一样,为另一种全面地遍历解集合的方法,按这种算法,任何活节点只可能一次改变为E节点。当某节点一旦改变成E节点,会同时产生一些新节点(也就是分枝),新产生的节点是从原节点跳转一步实现的。产生的新节点里,只留下有希望得到行得通解的节点,添加到活节点表,剩下的抛弃。接着从活节点表里挑选节点再进行拓展,最后就可以得到最后解,并且活动表清空了。

3 回溯算法

回溯法为一种在问题的结果空间树T上查询问题答案的算法。回溯法在全部解的结果空间树中,依照深度优先的方法,从根节点开始查询结果空间树。算法搜索至结果空间树的每个节点时,先看看是不是不存在结果。假设确定不存在,那么忽略该子树,继续向其父节点进行回溯,反之,使用该子树,仍然以深度优先的方法进行查询。当回溯法来寻找结果时,一定要回溯到顶点,并且,顶点节点的全部子树都查找完才停止。这样,按照深度优先的策略全面查询问题的结果的算法叫做回溯法,可以解决组合数很多的情况。

假设选取回溯法来解决0-1背包问题,可以用在采取子集数表示0-1背包问题的结果集合。执行查找结果空间树时,如果左节点是能用的节点,查找行为转到它的左子树。那什么时候进入右边的子树查找呢?那就是只有在右边子树里有希望找找最优解的时候,才转到右边子树查询。要不然就把右子树删除。此过程由上界函数来完成。假定r是现在还没有使用的剩下物品总价值,cp是现在已有的价值,yestp为目前最优的价值。那么在cp+r

要使上界函数的计算更方便,不妨让物品按照重量价值进行降序排序。执行的时候,由函数fanwei来寻找最新节点的上界。只有在要进入右边子树时,才计算上界函数fanwei,由此判断是不是要将右子树删除。转到左子树时不要查找上界,这时候上界和基类节点的上界是一样的。

4 算法实现

int n;//物品数量

double c;//背包容量

double[] v=new double[100];//各个物品的价值

double[] w=new double[100];//各个物品的重量

double cw = 0.0;//当前背包重量

double cp = 0.0;//当前背包中物品价值

double yestp = 0.0;//当前最优价值

double[] perp=new double[100];//单位物品价值排序后

int[] order=new int[100];//物品编号

int[] put= new int[100];//设置是否装入

//按单位价值排序

public void knapsack()

{ int i,j;

int temporder = 0;

double temp = 0.0;

for(i=1;i

perp[i]=v[i]/w[i];

for(i=1;i

{ for(j=i+1;j

if(perp[i]

{temp = perp[i];

perp[i]=perp[i];

perp[j]=temp;

temporder=order[i];

order[i]=order[j];

order[j]=temporder;

temp = v[i];

v[i]=v[j];

v[j]=temp;

temp=w[i];

w[i]=w[j];

w[j]=temp; }}}

//回溯函

public void b_track(int i)

{ double fanwei(int i);

if(i>n)

{ yestp = cp;

return; }

if(cw+w[i]

{ cw=cw+w[i];

cp= cp+v[i];

put[i]=1;

b_track(i+1);

cw=cw-w[i];

cp=cp-v[i]; }

if(fanwei(i+1)>yestp)//符合条件搜索右子数

b_track(i+1); }

//计算上界函数

public double fanwei(int i)

{double leftw= c-cw;

double b = cp;

while(i

{ leftw-=w[i];

b+=v[i];

i++;}

if(i

b+=v[i]/w[i]*leftw;

return b; }

static void Main(string[] args)

{int i;

Console.WriteLine("请输入物品的数量和容量:");

n=Convert.ToInt32(Console.ReadLine());

c= Convert.ToDouble(Console.ReadLine());

Console.WriteLine ("请输入物品的重量和价值:");

for(i=1;i

{ Console.WriteLine ("第{0}个物品的重量:",i);

w[i]=Convert.ToDouble(Console.ReadLine());

Console.WriteLine ("价值是:");

v[i]=Convert.ToDouble(Console.ReadLine());

order[i]=i; }

knapsack();

b_track(1);

Console.WriteLine ("最有价值为:"+yestp);

Console.WriteLine ("需要装入的物品编号是:");

for(i=1;i

{if(put[i]==1)

printf("%d ",order[i]); }

return 0; }

5 测试

在VS2010下对该算法进行测试 ,例如背包的最大容量c=10,要放入的物品个数n=5,重量w={2,6,2,5,4},价值v={5,6,3,4,6}。

输出结果: 1 0 1 0 1

背包的总价值:15

背包的总重量:8

6 算法分析

因为寻找上界函数fanwei需要O(n)时间,当复杂度最坏时有O(2n)个右边派生节点需要求解上界函数,因此,用回溯法来计算0-1背包问题的时间复杂度是O(n2n)。回溯法能得到0-1背包的最优解。另一方面回溯法是以树当成基础的算法,所以其空间开销很多。

参考文献:

[1] 王晓东. 计算机算法设计与分析[M].北京: 电子工业出版社,2004.

[2] 贺毅朝, 田海燕. 基于动态规划法求解动态0-1背包问题[J].计算机科学,2012 ,39(7):237-241..

[3] 徐颖. 回溯法在0-1背包问题中的应用[J].软件导刊,2008(12).

篇10

关键词:运筹学;规划论;EXCEL软件

中图分类号G642.4 文献标志码:A 文章编号:1674-9324(2014)10-0278-03

一、引言

运筹学是一门应用科学,可以为决策者选择最优决策提供定量依据。运筹学经过多年的发展已经成为体系,包括规划论(线性规划、整数规划、目标规划、动态规划和非线性规划)、图论与网络、排队论、存储论、对策论和决策论等[1]。传统的运筹学主要是以讲授理论为主,尤其是比较枯燥的数学理论。近年来,运筹学改革不断提高其应用性,减少枯燥的理论。此外,随着运筹学计算机支撑技术的迅速发展,运筹学应用得到极大的推动,运筹学实验教学提上日程,因此开设运筹学的实验课程势在必行。秦必瑜[2]和石磊[3]在运筹学的课程改革中都提出要增加软件应用。我院运筹学教学团队多年致力于运筹学的教改研究,在提出应用软件的基础上,进一步开设了除理论课程外的专门实践课程,将理论课上学习到的内容使用软件来进行求解。

国内运筹学的实验教学已经有很大进展,目前运筹学经常使用的软件主要有lingo[4][5]、WinQSB[6]、MATLAB[7]等。近年来,美国高校运筹学(管理科学)的思想、内容、方法和手段发生根本转变,开始使用“电子表格”这一全新的教学方法。在运筹学中使用EXCEL已经成为运筹学教学的一个新潮流。EXCEL软件使用方便,不需要重新安装和学习新软件的使用方法,一般的PC机上都安装有EXCEL软件,因此使用方便、应用广泛。但是目前将EXCEL在运筹学中的应用并不多,李雪虎[8]给出用EXCEL求解运输问题和网络最优化问题的例子;魏杰羽[9]阐述了用EXCEl求解运输问题的过程;而张辉[10]给出了使用EXCEL求解线性规划问题的例子。在运筹学的体系中,内容远远不止这些,即使规划论的内容也不止这些。本文中探讨将EXCEL应用于运筹学规划论的内容中。运筹学规划论包括线性规划、整数规划、目标规划、动态规划和非线性规划,由于非线性规划一般不属于本科教学的范围,因此这里主要用EXCEL求解线性规划、目标规划、整数规划、动态规划模型,其中每个部分的模型均来自清华大学编写的运筹学教材[1],此为我院教学的教材。本文使用EXCEL求解教材中的案例,进行应用分析。

二、EXCEL在规划论教学中的应用

(一)使用EXCEL求解线性规划模型

Maxz=2x11+3x12

对于如下线性规划问题,模型1

s.t.x1+2x2≤84x1≤164x2≤16x1,x2≥0

采用EXCEL求解该问题包括以下步骤:

第一步:模型输入

1.在EXCEL表格中输入数据,输入目标函数的系数和约束条件的系数

2.标识数据,可以用不同颜色标识不同类型的数据

3.计算中间数据,数据、公式分离,显示出完整模型

第二步:模型求解

1.安装“规划求解”工具。在“工具”中选择“加载宏”,选中“规划求解”,确定后,工具菜单中可显示“规划求解”选项,选择工具-规划求解。

2.设置参数,选择目标,输入约束条件;选择选项中的“使用线性函数”和“假定非负”,点击求解(见下图)。

根据以上求解结果,可以知道两个决策变量的取值分别为4和2,目标值最优为14。

3.求解出结果后,选中“敏感性报告”,点击确定。得到线性规划的求解结果以及敏感性报告,可以在此基础上进行灵敏度分析,可与理论教学中的灵敏度分析进行对比,将理论教学与实践教学相结合。

根据上面的敏感性报告可以知道,此问题所需要的三种资源的影子价格分别是1.5,0.125和0,根据这个结果可知当最优情况下,第一和第二种资源已经全部用光。

运输问题是线性规划的一种特殊情况,因此用EXCEL求解运输问题的模型和过程是完全相同的,在此不做赘述。

(二)使用EXCEL求解整数规划模型

这里的整数规划其实指的都是整数线性规划,该模型与线性规划模型唯一的区别就是增加了整数约束,在求解过程中与线性规划模型的区别就在于约束条件上。比如模型1中,如果要求所有的变量均为整数,则在EXCEL中做如下设置:

(三)使用EXCEL求解目标规划模型

这里的目标规划主要是指线性目标规划,即其每个目标都是线性的,其所有约束也是线性的。线性目标规划的求解可以认为是一般线性规划的延伸,但是却与一般线性规划有很大区别。目标规划中的约束条件有优先顺序,而且不一定能够同时满足所有的目标,因此其求解过程需要考虑优先级,首先考虑第一优先级的偏差最小化作为目标函数,求出最优解。在第二步的时候将第二优先级的偏差最小化作为目标函数,并将第一目标的最优偏差作为约束条件放到第二步的模型中,以此类推直到最后一个目标。下面以模型2为例进行说明:

min P■d■■+P■d■■+P■(2d■■+d■■)

模型2

s.t.x1+x2+d■■+d■■=40x1+x2+d■■-d■■=50x1+d■■-d■■=24x2+d■■-d■■=30x1,x2,d■■,d■■≥0,i=1,L 4

在EXCEL求解过程中,首先求解第一优先级,以第一优先级作为目标,形成模型

min p1d■■

s.t.x1+x2+d■■+d■■=40x1+x2+d■■-d■■=50x1+d■■-d■■=24x2+d■■-d■■=30x1,x2,d■■,d■■≥0,i=1,L 4

这是一个典型的线性规划问题,可用EXCEL求解,基本模型如下图:

第一优先级可以获得最优,在此基础上求第二优先级,第二优先级的模型是在原模型基础上,将目标函数变化为第二优先级,并且将第一优先级的结果作为第二优先级计算的约束条件。

min p2d■■

s.t.x1+x2+d■■-d■■=40x1+x2+d■■-d■■=50x1+d■■-d■■=24x2+d■■-d■■=30d■■=0x1,x2,d■■,d■■≥0,i=1,L 4

使用EXDEL求解的过程如图所示:

以此类推,可以求得目标规划的满意解。

三、结论

该文介绍了如何使用EXCEL软件求解线性规划、目标规划、整数规划和动态规划,而运筹学中的内容不止这些,因此下一步工作是要将EXCEL用于求解运筹学中除了规划论外的其他模型。

参考文献:

[1]运筹学教材编写组.运筹学[M].北京:清华大学出版社,2005.

[2]秦必瑜,付海燕.管理类专业运筹学课程教学改革研究[J].中国林业教育,2010,28(3):57-59.

[3]石磊,蔡定教.关于运筹学课程教学改革的几点思考[J].广西教育学院学报,2010,(2):108-110.

[4]梁桂航,王健,李栋,赵万胜,林红旗.Lingo软件在物流工程运筹学教学过程中的应用[J].物流技术,2010,(12):226-228.

[5]万义国,游小青.优化建模软件LINGO在运筹学中的应用[J].山西建筑,2007,33(15):367-368.

[6]许岩.浅谈《管理运筹学》课程教学中WINQSB软件的应用[J].现代计算机,2013,(3)0:28-31.

[7]张明,王文文.Matlab在经管类运筹学教学中的探索与实践[J].大学教育,2012,(7):81-89.

[8]李雪虎.EXCEl软件在物流运筹学教学中应用探索[J].物流科技,2012,(8):108-111.

[9]魏杰羽.EXCEl在物流运筹课程中的应用[J].物流工程与管理,2012,(5):201-203.

[10]张辉如何试用EXEL软件求解运筹学模型[J].现代企业文化,2009,(11):144-145.