供水管网PDD模型源程序matlab

function [pop5,leak1,bestobj,H,dtemp]=PDDmoni(J,QL) 
    nmaxnum=100;  %进化代数
    popsize=100;  %种群大小
    chromlength=18;%染色体数组长度
    pc=0.8;    %交叉概率
    pm=0.05;   %变异概率
    node_count=17; %节点数
    pressure = zeros(popsize,node_count); %节点压力
    eddemand=zeros(1,node_count);%额定流量
    usewater = zeros(popsize,node_count); %实际用水量
    leak = zeros(popsize,node_count); %节点漏失水量
    flow= zeros(popsize,node_count); %节点流量
    newpop=zeros(popsize,chromlength);%新种群初始化
    pop=initpop(popsize,chromlength,J,QL); %种群初始化
    ZG=0;%最优个体
  %  test = round(rand(1,10));


    loadlibrary('D:\Program Files\EPA\epanet2.dll','D:\Program Files\EPA\epanet2.h');%调用epanet2
    calllib('epanet2','ENopen','E:\matlab\suanli\1yuanqi.inp','E:\matlab\suanli\1yuanqi.rpt','');%调用ENopen函数,打开suanli.inp文件
    pressurePtr = libpointer('singlePtr',node_count);%将节点压力设置成指针
    demandPtr = libpointer('singlePtr',node_count);
    for i=1:node_count
    calllib('epanet2','ENgetnodevalue',i,1,demandPtr);
    eddemand(1,i)= double(get(demandPtr,'value')) ;
    eddemand(1,i)=eddemand(1,i)-2;
    end
    eddemand(1,J)=eddemand(1,J)+QL;
for nindex=1:nmaxnum
    pressure = zeros(popsize,node_count);   %节点压力初始化
    popsize=size(pop,1);

    for i=1:popsize

        for j=1:node_count
            pop2=pop(i,j)/100;
            calllib('epanet2','ENsetnodevalue',j,1,pop2);%设置节点流量值
        end

        calllib('epanet2','ENsaveinpfile','E:\matlab\suanli\1yuanqi.inp');%保存给定节点流量后的inp文件
        calllib('epanet2','ENsolveH');%计算节点压力
        calllib('epanet2','ENsolveQ');%计算流量
        for k=1:node_count
            calllib('epanet2','ENgetnodevalue',k,11,pressurePtr);%调用获取节点压力函数指针
            pressure(i,k)= double(get(pressurePtr,'value')) ;%获取节点压力
            maxpressure=12;  %临界压力
            minpressure=2;   %最小压力
            chapressure=maxpressure-minpressure; %临界压力与最小压力的差值
                  if pressure(i,k)>=maxpressure  %节点压力大于等于临界压力
                     usewater(i,k) = eddemand(1,k); %节点实际用水量等于节点需水量
                  elseif pressure(i,k)<=minpressure %节点压力小于等于最小压力
                     usewater(i,k) =0; %节点实际用水量等于0
                  else   %节点压力在最小压力和临界压力之间
                      usewater(i,k) = eddemand(1,k)*((pressure(i,k)-minpressure)/chapressure)^0.5; %节点实际用水量
                  end 

              dtemp =( pop(i,node_count+1) / 31 )*0.05+ 0.05; %漏失系数控制在0.05-0.1之间
              leak(i,k) = dtemp * pressure(i,k)^1.18;  %节点漏失水量
            %   leak1 = leak1+leak(i,k); 
              flow(i,k) = usewater(i,k)+leak(i,k); %实际节点流量
        end 
    end

    calllib('epanet2','ENreport'); %EPANET报告
   % calllib('epanet2','ENclose'); %EPANET关闭
    %else 
     %   eval = -100000000; 
      %  end 
    objvalue=calobjvalue(pop,flow); %计算目标函数
   % fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
    newpop=selection(pop,objvalue); %复制
    
    newpop=crossover(newpop,pc); %交叉
    
    newpop=mutation(newpop,pm,J,QL); %变异
    pop=newpop;
    
end 
popsize=size(pop,1);
for i=1:popsize

        for j=1:node_count
            calllib('epanet2','ENsetnodevalue',j,1,pop(i,j));%设置节点流量值
        end

        calllib('epanet2','ENsaveinpfile','E:\matlab\suanli\1yuanqi.inp');%保存给定节点流量后的inp文件
        calllib('epanet2','ENsolveH');%计算节点压力
        calllib('epanet2','ENsolveQ');%计算流量
        for k=1:node_count
            calllib('epanet2','ENgetnodevalue',k,11,pressurePtr);%调用获取节点压力函数指针
            pressure(i,k)= double(get(pressurePtr,'value')) ;%获取节点压力
            maxpressure=12;  %临界压力
            minpressure=2;   %最小压力
            chapressure=maxpressure-minpressure; %临界压力与最小压力的差值
                  if pressure(i,k)>=maxpressure  %节点压力大于等于临界压力
                     usewater(i,k) = eddemand(1,k); %节点实际用水量等于节点需水量
                  elseif pressure(i,k)<=minpressure %节点压力小于等于最小压力
                     usewater(i,k) =0; %节点实际用水量等于0
                  else   %节点压力在最小压力和临界压力之间
                      usewater(i,k) = eddemand(1,k)*((pressure(i,k)-minpressure)/chapressure)^0.5; %节点实际用水量
                  end 

              dtemp =( pop(i,node_count+1) / 31 )*0.05+ 0.05; %漏失系数控制在0.05-0.1之间
              leak(i,k) = dtemp * pressure(i,k)^1.18;  %节点漏失水量
            %   leak1 = leak1+leak(i,k); 
              flow(i,k) = usewater(i,k)+leak(i,k); %实际节点流量
        end 
end
 calllib('epanet2','ENreport'); %EPANET报告
 calllib('epanet2','ENclose'); %EPANET关闭
    objvalue=calobjvalue(pop,flow); %计算目标函数
    [bestindividual,bestobj]=best(pop,objvalue); %求出群体中适应值最大的个体及其适应值
    leak1=zeros(1,node_count);
    i=1;
   
while (i<=popsize)
    if bestindividual(1,:)==pop(i,:);
        leak1=leak(i,:);ZG=i;
    end
        i=i+1;
end
dtemp =( pop(ZG,node_count+1) / 31 )*0.05+ 0.05;
H=pressure(ZG,:);
pop5=bestindividual; %种群中适应值最大的个体
    
%end
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea使用问题(idea相关)快捷键及窗口没有service

idea快捷键 •万能键&#xff1a;ALTENTER •运行当前文件&#xff1a;CTRLSHIFTF10 •运行上次&#xff1a;SHIFTF10 •以DEBUG模式运行上次&#xff1a;SHIFTF9 •选择运行&#xff1a;ALTSHIFTF10 •选择以DEBUG模式运行&#xff1a;ALTSHIFTF9 •搜索全部&#xff1…

SASE:网络与安全的未来之路

随着数字化时代的到来&#xff0c;企业和个人对网络连接和安全性的需求日益增长。传统的网络架构已经无法满足这些需求&#xff0c;因此&#xff0c;新兴的网络和安全框架SASE&#xff08;Secure Access Service Edge&#xff09;应运而生。本文将介绍什么是SASE&#xff0c;并…

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…

【华为OD题库-060】增强的strstr-java

题目 c语言有一个库函数: char* strstr(const char * haystack,const char *needle)&#xff0c;实现在字符串 haystack 中查找第一次出现字符串needle的位置&#xff0c;如果未找到则返回null。 现要求实现一个strstr的增强函数&#xff0c;可以使用带可选段的字符串来模糊查询…

1. 了解继承的概念,掌握派生类的定义。2. 掌握派生类构造方法的执行过程。3. 掌握方法的重载与覆盖。4. 掌握抽象类的概念及上转型对象的使用

1、定义一个抽象类Shape&#xff0c;类中封装属性name指定图形名称&#xff0c;定义用于求面积的抽象方法。定义3个子类&#xff1a;圆形类Circle、梯形类Trapezoid和三角形类Triangle&#xff0c;都继承Shape类&#xff0c;子类中各自新增属性&#xff0c;定义构造方法、设置属…

无人机语音中继电台 U-ATC118

简介 甚高频无线电中继通讯系统使用经过适航认证的机载电台连接数字网络传输模块&#xff0c;通过网络远程控制无缝实现无人机操作员与塔台直接语音通话。无人机操作员可以从地面控制站远程操作机载电台进行频率切换、静噪开关、PTT按钮&#xff0c;电台虚拟面板与真实面板布局…

网络可信空间|探讨现有网络安全中可信空间建设问题,以及建设可信空间的关键要素

网络可信空间的构建能力&#xff0c;基于不同的等级或程度统一面临的一个共同的挑战&#xff0c;即是成本和管理的压力的问题。因此&#xff0c;根据业务用户环境的不同情况&#xff0c;构建适合的等级可信空间&#xff0c;同时保障在不同等级可信空间的安全互通是关键策略。在…

重塑生成式AI时代数据战略,亚马逊云科技re:Invent大会Swami主题演讲

re:lnvent 2023 Swami Sivasubramanian主题演讲&#xff0c;数据、AI和人类共进共生&#xff0c;重塑生成式AI时代的数据战略。 赋能人才加持生成式AI必备能 生成式AI创新中心&#xff1a;解决生成式AI工程化挑战。 Amazon Bedrock平台PartyRock&#xff1a;生成式AI应用程序实…

【Filament】Filament环境搭建

1 前言 Filament 是一个实时物理渲染引擎&#xff0c;用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染&#xff0c;并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染&#xff08;PBR&#xff09;&…

AtCoder Beginner Contest 331

感觉和cf div3差不多。 A - Tomorrow 签到&#xff0c;D和M是一年有D月M天&#xff0c;输入ymd输出ym[d1]&#xff0c;如果d1>D了显然要m&#xff0c;模拟即可。 #include <bits/stdc.h> //#define int long long #define fr first #define se second #define endl …

前端知识笔记(三十)———前端需要掌握的技术有哪些方面

上一篇文章说了些前端这个岗位在整个项目开发过程中的重要性&#xff0c;那么&#xff0c;下面我们来谈谈前端在做项目时需要掌握的技术有哪些方面&#xff1f; 前端开发需要掌握的技术包括以下几个方面&#xff1a; 1.HTML&#xff1a;HTML是网页的基础骨架&#xff0c;是网…

拼多多电商平台API接口,获取拼多多实时准确数据,获取产品销量、价格,sku图片及sku库存数据演示

拼多多商品详情API接口的作用是让开发者可以获取拼多多平台上特定商品的详细信息&#xff0c;包括商品的标题、价格、图片、规格、参数以及店铺信息等。通过这个接口&#xff0c;开发者可以轻松地获取商品的原始数据&#xff0c;便于进行数据分析、价格比较、爬取等操作。这为电…

大数据之HBase(二)

Master详细架构 位置&#xff1a;namenode实现类&#xff1a;HMaster组成 负载均衡器&#xff1a;通过meta了解region的分配&#xff0c;通过zk了解rs的启动情况&#xff0c;5分钟调控一次分配平衡元数据表管理器&#xff1a;管理自己的预写日志&#xff0c;如果宕机&#xff…

JavaWeb(六)

一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包&#xff0c;在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…

寻找两个有序数组的中位数算法(leetcode第4题)

题目描述&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&…

【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】

​ 文章目录 一、近似表达方式1. 插值&#xff08;Interpolation&#xff09;2. 拟合&#xff08;Fitting&#xff09;3. 投影&#xff08;Projection&#xff09; 二、Lagrange插值1. 拉格朗日插值方法2. Lagrange插值公式a. 线性插值&#xff08;n1&#xff09;b. 抛物插值&…

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

Rust语言项目实战(九 - 完结) - 胜利与失败

回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…

glibc下的tpmalloc

文章目录 1、内存布局2、操作系统内存分配的相关函数2.1 Heap 操作相关函数2.2 Mmap 映射区域操作相关函数 3、ptmalloc的实现原理3.1 Main_arena 与 non_main_arena3.2 chunk 结构3.3 空闲 chunk 容器的组织形式3.3.1 small bin3.3.2 Large bins3.3.3 Unsorted bin3.3.4 Fast …

如何使用Cloudreve搭建本地云盘系统并实现随时远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…