遗传算法建模课件.ppt
遗传算法建模 遗传算法建模 问题描述应用实例遗传算法求解有待改进的地方 水电站水库优化调度是水电站长期经济运行水电站长期经济运行的中心内容,是管理和控制水库安全可靠性,合理利用水资源、发挥水库综合效益的重要措施,是水电站及其水库长期运行计划的制定和实施的核心问题。它是在难以准确预知未来径流的情况下,避免工作上的差错,制定水库调度图或优化调度软件作为指导水电站水库运行的工具,以满足水电站可靠性和经济性的要求,达到最大效益。由于在较长时期内气象和水文条件的剧烈变化,水电站水库的天然来水在时间上分布极不均匀,借助水库对流量进行调节,蓄丰补枯,以适应发电等用水的需求,提高水资源利用程度,增加发电及其它用水的经济效益。从这个意义上说,水库调度计划即为水库蓄、供水计划。另一方面,水库蓄水可以抬高上游水位,提高水头,增发电能,因此可以说水库调度在提高水量利用程度和增加发电效益方面具有重要作用。问题描述 问题描述目标函数水位约束水电站出力限制发电流量限制水量平衡 应用实例 龙滩水电站是红水河梯级开发的骨干工程、巨型电站和大型水库,坝址位于广西天峨县境内,是红水河综合利用规划的第四个梯级电站,其装机容量占红水河可开发容量的35-40%,其死水位为330m,正常高水位为375m,校核洪水位为381.84m,装机容量4900MW。龙滩水电站的建成,有利于推进华中与华南电网联网,实现更大范围内的资源优化配置,有利于全国电网的安全经济稳定运行。应用实例 应用实例1月2月3月4月5月6月7月8月9月10月11月12月起始水位/m370.00 期末水位/m370.00 入库流量/m3/s6375325906881381297728212831184911941171767发电流量限制上限497049704970497049704970497049704970497049704970下限000000000000库水位限制上限375375375375375359.3359.3369.2375375375780下限330330330330330330330330330330375375出库流量约束上限100001000010000100001000010000100001000010000100001000010000下限000000000000出力约束上限490049004900490049004900490049004900490049004900下限000000000000遗传算法求解大体步骤:1以时段为序(月),将水位作为基因值编码。(浮点数编码)2 通过水量平衡方程,用时段初、末水位所对应的库容及时段来水计算出水库的下泄流量。3 通过下泄流量计算出相应的下游水位,并根据时段初末的上游水位计算出时段的平均水头。4 计算N=KQH 5 记录下截止到当前代最好的个体及其对应的出力、水位、库容等情况。6 选择、交叉、变异 新群体 7 重复2-6,直到代数T(将2-6放入一个方法中,并使用while(tT)循环)遗传算法求解初始化种群:1以水位作为控制变量,离散成m份,精度N=0.1 m=(int)(zmax-zmin)/N);2生成0到m之间的随机数n,Z=Zmin+n*N;Z即为该时段基因值.3对每个时段生成1个n,并将每个时段的Z顺序放入一个数组,即为一条染色体。4 初始种群是一个二维数组 fatherGroupMq_in.length+1 M:种群规模,q_in是入库流量的数组。5 考虑水量平衡方程,不符合流量约束的舍弃。遗传算法求解求适应度:1由于本例中目标函数为正,所以可作为适应度函数(发电量)。2采用惩罚函数:适应度函数值=发电量-惩罚项 adapt=ChuLiij*30*24*Math.pow(10,4)-a*Math.pow(t,b)*Math.pow(N_Maxzhji-ChuLiij,(double)2);a,b调整惩罚的参数 3确定边界条件:若出力大于装机容量,则出力等于装机容量;若出力小于保证出力,则出力等于保证出力。遗传算法求解选择算子:采用轮盘赌选择。for(int i=0;i q_in.length;i+)Sum=Sum+E_SYZhii;/当前代种群所有个体适应度之和 qujian0=E_SYZhi0/Sum;for(int i=1;i q_in.length;i+)qujiani=qujiani-1+E_SYZhii/Sum;/截止到第i个个体,累积适应度 的和占总适应度的分数,并存入一个数组 int child_xiabiao=new intmyga.M;for(int i=0;i myga.M;i+)double rand=Math.random();/随机生成0-1的数,看落入哪两个数组元素之间,以确定进入下一部的下标,进行M次 if(rand=qujian0)child_xiabiaoi=0;for(int j=1;j qujianj-1&rand=qujianj)child_xiabiaoi=j;遗传算法求解交叉算子:采用单点交叉。for(int i=0;i myga.M-1;i+)int Location=0;Location=new Random().nextInt(q_in.length);/随机数确定交叉位置 if(Math.random()myga.Pc)for(int j=0;j=Location)double Mjie_change=new doublemyga.Mq_in.length+1;Mjie_changeij=childGroupij;childGroupij=childGroupi+1j;childGroupi+1j=Mjie_changeij;变异算子:采用非均匀变异。1 遍历染色体,生成01的随机数,若该数小于变异概率Pm,则该基因变异。2确定变异范围,进行变异。3确保不越界。循环迭代,判断是否满足停止准则,若满足则输出结果,不满足重复计算。遗传算法求解遗传算法求解约束条件的处理:水位上下限:产生随机数在1,m+1范围内流量上下限:初始化种群时不符合要求的将舍弃,交叉和变异之后都设有判断条件。出力上下限:适应度函数加惩罚函数。遗传算法求解生成初始种群计算适应度选择-复制交叉变异生成新一代种群终止?终止?生成初始种群计算适应度选择-复制交叉变异生成初始种群计算适应度结束结束程序基本框图遗传算法求解 有待改进的地方 1 未考虑各月天数不相等,每个月都按30天机算;2选择算子采用了轮盘赌,结果震荡较大。3 基础概念掌握的不够扎实,以致出现数组越界。谢谢观看!