- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB在水资源动态规划中运用与改进
MATLAB在水资源动态规划中运用与改进
【摘 要】水资源是人类赖以生存的宝贵资源,搞好水资源优化配置对实现水资源的可持续利用尤为重要。本文结合一个实例,详细介绍了用MATLAB解决水资源动态规划的思路与方法,同时与传统的逆序法对比,突出了MATLAB的优越性。并且,参照了之前学者所编写的程序,给出了自己的程序优化方案,使程序运行速度、可读性等方面得到了提高。
【关键词】动态规划;水资源优化配置;MATLAB
0.引言
动态规划是解决多阶段决策过程最优化问题的一种方法,该方法是由美国数学家贝尔曼(R.Bellman)等人在20世纪50年代提出。他们针对多阶段决策问题的特点,提出了解决这类问题的最优化原理,并成功解决了生产管理、资源分配等方面的许多实际问题,从而建立了运筹学的分支——动态规划[1]。MATLAB是一个功能强大的用于矩阵运算的数值计算软件,是决策系统优化计算和设计的有力工具,将MATLAB运用到动态规划中可以达到计算简便的目的[2]。现在利用MATLAB解决动态规划问题的程序不少,但是,如何充分利用MATLAB的特点来优化程序确实一个值得深思的问题。
1.MATLAB程序设计
MATLAB有2种工作方式:一是交互式的命令工作方式,直接在Command Window中输入指令求解。另一种是M脚本文件的工作方式,这种工作方式用来解决指令较多和所用指令结构较为复杂的问题[3]。
由于动态规划问题的特殊性,其涉及的实际问题均需要反复的计算求解,所以在使用MATLAB语言编程中采用最多的是循环结构。MATLAB提供了2种实现循环结构的语句——for语句和while语句[4]。
2.应用实例
有一引水渠,其设计最大流量为6m3/s,为甲、乙、丙、丁4个地区供水。据统计,在给四个地区供水时,不同的供水量产生的效益见表1(效益单位为万元)。那么,如何分配供水量可以使产生的总效益最大。(本实例取自文献[5])
表1 供水量与增产效益的关系
2.1逆序法计算
采用逆序法表格计算,可以得到最优分配方案有3个,分别是(1,2,1,2),(1,2,2,1),(2,2,1,1),最大效益为19万元。
2.2 MATLAB编程计算
2.2.1思路分析
由于本例较???简单,所以不采用M脚本文件的工作方式,直接在Command Window中输入指令即可。
Step1.输入参数
建立A、B、C、D 4个数组,分别来储存供给甲、乙、丙、丁4个地区不同水量时产生的效益。考虑到在动态规划时,某个城市的供水量可以为0,对应的效益也为0,所以A、B、C、D四个数组都应该加入一个元素0。这里采用单下标表示法,分别用i、j、k、
l表示数组A、B、C、D中元素的下标。A(3)=2,表示当i=3时,A中元素为2,即向A供水2m3/s。Step2.找出所有可行解,储存其分配方法和对应的效益,要找出所有的可行解,最简便的的方法是采用循环结构枚举。
①确定循环条件:
循环的限制条件应该是最大设计流量。由于最大设计流量是6 m3/s,现在任意假设一例分配方法以确定循环条件。假设所有的水量全部供给了丁,即l=7,那么此时可有i=j=k=1,得i+j+k+l=10。由于无论是那种分配方法都要满足最大设计流量的限制,所以i+j+k+l=10即为循环条件。由于循环次数是已知的,所以采用for语句循环。
②储存分配方法:
建立一个二维数组E,采用全下标的方法将分配方法存入其中,每一行为一种分配方式。
③储存效益:
建立一个数组d,常用单下标的方式将所有分配方法对应的效益存入其中。
Step3.确定最大效益的值
所有方案的效益都存储在数组d中,所以传统的方法就是采用循环结构遍历数组d中的所有元素以找到最大值。但是在编程中应该尽量避免使用循环结构。因为在循环结构中,要反复进行存储变量间的“存放”操作和算符调用操作,消耗计算时间。MATLAB中为用户提供了大量的现成函数,尽可能多的采用现成函数编程可以使所编程序更可靠、更快速、可读性更好[6]。
①采用循环结构确定最大效益
程序如下:
MAX=d(1);
for n=1:length(d)
if d(n)MAX
MAX=d(n);
end
end
②采用max函数确定最大效益
由于max(X)求的是数组X中各列的最大值,所以应该先对数组d转置。
程序如下:
MAX=max(d)
可以清楚的看到,采用matlab中现成的max函数比用循环结构更好,不仅使程序的输入得到了简化,同时也使程序的可读性更好。
您可能关注的文档
最近下载
- 腹透腹膜炎的护理.pptx VIP
- 肌电图设备可行性报告.docx
- 网络短剧推广方案策划.pptx VIP
- 2020年中央空调市场报告-艾肯网.pdf VIP
- 人工智能赋能中学化学教学的探索.pptx VIP
- 高中化学新人教版必修一离子方程式正误判断及离子共存课件.ppt VIP
- 解放上海红色戏剧小品《我记得你,你就活着》台词剧本手稿.doc VIP
- 生成式人工智能应用实战课件 第7章 AIGC信息获取与数据分析.pptx VIP
- 2024—2025学年河南省开封高级中学高一上学期第一次月考物理试卷.doc VIP
- 2025下半年全国房地产经纪人考试(房地产交易制度政策)综合试题及答案.docx VIP
文档评论(0)