【优化调度】基于改进遗传算法求解农业水资源调度问题(Matlab代码实现)

目录

1 概述

2 Matlab代码实现

3 运行结果

4 参考文献

5 写在最后


1 概述

科学的渠系配水决策可以减少渠系输水过程中的渗水损失和无效弃水,提高灌溉水利用率。国内外学者对渠系优化配水决策方法进行了许多研究,Suryavanshi等(1986)最早在假定上级配水渠道是由一组等流量流管组成,流管流量等于下级渠道流量的基础上,以减小渠道工程投资为目标,确定上级渠道流管数的1992)将其用于渠系优化配水研究中,提出了基于0一线性规划配水模型及算法["。基于上述思想﹐王智等(l规划法的下级渠道等流量时优化配水模型并编制了计算机程序2。Reddy等(1999) [3'、Anwar等(2001)对文献[1]、[2]的配水模型进行了改进,加入了各下级渠道在用户预定的配水时间窗内配水的要求,解决了轮期内下级渠道配水时间与实际需求配水时间差异而造成的作物减产问题。而吕宏兴等(2000)改进了文献[2]模型的目标函数,提出了各下级渠道配水时间均一化处理方法,使上级渠道可在同一时间关闭.减少了配水闸门调节次数IS'。骆莉等(2000)、宋松柏等(2004)分别研究了文献[2]、[5]模型的遗传算法求解方法,显著提高了模型的求解速度﹐解决了在下级渠道较多时模型求解困难的问题5.1。马孝义等(2005)以渠系输水损失最小为目标,提出了以灌水组数最大和最长灌水组配水时问最小的二级目标优化配水模型及遗传算法求解方法,并在对复杂渠系抽象概化的基础上﹐研制了一种易于快速搭建、通用性强的渠系配水软件[3]。但上述研究都是基于流管假定下的改进,只能解决下级渠道流量相等条件下的渠系优化配水编组问题。而在大多数情况下﹐由于地形、作物种植类型的变化等,下级渠道设计流量变化较大,现有方法存在明显缺陷。为此,需进一步研究下级渠道流量不等时的渠系优化配水模型及其求解算法。

2 Matlab代码实现

function offspring=Mutate(population,state)
% 本函数完成变异操作
global T Qmax Qmin
N=length(population);

if state<0.5
    
    offspring1 = population;
    for i=1:N
        pop1 = population(i);
        pop2 = population(randperm(N,1));
        
        % 随机挑选1-2个位置进行交叉操作
        pos = randperm(11,randi([1,3],1));
        pop1.tstart(pos) =  pop2.tstart(pos);
        pop1.tend(pos) =  pop2.tend(pos);
        pop1.q(pos) =  pop2.q(pos);
        
        offspring1(i) = pop1;
    end
    
    
    offspring2 = population;
    for i=1:N
        pop1 = population(i);
        % 开始时间
        pos = randperm(11,randi([1,2],1));
        pop1.tstart(pos) = pop1.tstart(pos) + randi([-2,2],size(pos));
        pop1.tstart(pos) = max(pop1.tstart(pos),1);
        pop1.tstart(pos) = min(pop1.tstart(pos),T*24/4-1); %修复上下界
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        
        offspring2(i) = pop1;
    end
    
    offspring3 = population;
    for i=1:N
        pop1 = population(i);
        
        % 结束时间
        pos = randperm(11,randi([1,2],1));
        pop1.tend(pos) = pop1.tend(pos) + randi([-2,2],size(pos));
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        pop1.tend(pos) = min(pop1.tstart(pos),T*24/4); %修复上下界
        offspring3(i) = pop1;
    end
    
    offspring = CalObj([offspring1,offspring2,offspring3]);
else
    
    offspring4 = population;
    for i=1:N
        pop1 = population(i);
        
        % 供水量
        pos = randperm(11,randi([1,2],1));
        pop1.q(pos) = pop1.q(pos) + 0.2.*rands(1,length(pos));
        pop1.q = max(Qmin,pop1.q);
        pop1.q = min(Qmax,pop1.q); %修复上下界
        offspring4(i) = pop1;
    end
    offspring = CalObj(offspring4);
end

function offspring=Mutate(population,state)
% 本函数完成变异操作
global T Qmax Qmin
N=length(population);

if state<0.5
    
    offspring1 = population;
    for i=1:N
        pop1 = population(i);
        pop2 = population(randperm(N,1));
        
        % 随机挑选1-2个位置进行交叉操作
        pos = randperm(11,randi([1,3],1));
        pop1.tstart(pos) =  pop2.tstart(pos);
        pop1.tend(pos) =  pop2.tend(pos);
        pop1.q(pos) =  pop2.q(pos);
        
        offspring1(i) = pop1;
    end
    
    
    offspring2 = population;
    for i=1:N
        pop1 = population(i);
        % 开始时间
        pos = randperm(11,randi([1,2],1));
        pop1.tstart(pos) = pop1.tstart(pos) + randi([-2,2],size(pos));
        pop1.tstart(pos) = max(pop1.tstart(pos),1);
        pop1.tstart(pos) = min(pop1.tstart(pos),T*24/4-1); %修复上下界
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        
        offspring2(i) = pop1;
    end
    
    offspring3 = population;
    for i=1:N
        pop1 = population(i);
        
        % 结束时间
        pos = randperm(11,randi([1,2],1));
        pop1.tend(pos) = pop1.tend(pos) + randi([-2,2],size(pos));
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        pop1.tend(pos) = min(pop1.tstart(pos),T*24/4); %修复上下界
        offspring3(i) = pop1;
    end
    
    offspring = CalObj([offspring1,offspring2,offspring3]);
else
    
    offspring4 = population;
    for i=1:N
        pop1 = population(i);
        
        % 供水量
        pos = randperm(11,randi([1,2],1));
        pop1.q(pos) = pop1.q(pos) + 0.2.*rands(1,length(pos));
        pop1.q = max(Qmin,pop1.q);
        pop1.q = min(Qmax,pop1.q); %修复上下界
        offspring4(i) = pop1;
    end
    offspring = CalObj(offspring4);
end

function offspring=Mutate(population,state)
% 本函数完成变异操作
global T Qmax Qmin
N=length(population);

if state<0.5
    
    offspring1 = population;
    for i=1:N
        pop1 = population(i);
        pop2 = population(randperm(N,1));
        
        % 随机挑选1-2个位置进行交叉操作
        pos = randperm(11,randi([1,3],1));
        pop1.tstart(pos) =  pop2.tstart(pos);
        pop1.tend(pos) =  pop2.tend(pos);
        pop1.q(pos) =  pop2.q(pos);
        
        offspring1(i) = pop1;
    end
    
    
    offspring2 = population;
    for i=1:N
        pop1 = population(i);
        % 开始时间
        pos = randperm(11,randi([1,2],1));
        pop1.tstart(pos) = pop1.tstart(pos) + randi([-2,2],size(pos));
        pop1.tstart(pos) = max(pop1.tstart(pos),1);
        pop1.tstart(pos) = min(pop1.tstart(pos),T*24/4-1); %修复上下界
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        
        offspring2(i) = pop1;
    end
    
    offspring3 = population;
    for i=1:N
        pop1 = population(i);
        
        % 结束时间
        pos = randperm(11,randi([1,2],1));
        pop1.tend(pos) = pop1.tend(pos) + randi([-2,2],size(pos));
        pop1.tend(pos) = max(pop1.tstart(pos),pop1.tend(pos));
        pop1.tend(pos) = min(pop1.tstart(pos),T*24/4); %修复上下界
        offspring3(i) = pop1;
    end
    
    offspring = CalObj([offspring1,offspring2,offspring3]);
else
    
    offspring4 = population;
    for i=1:N
        pop1 = population(i);
        
        % 供水量
        pos = randperm(11,randi([1,2],1));
        pop1.q(pos) = pop1.q(pos) + 0.2.*rands(1,length(pos));
        pop1.q = max(Qmin,pop1.q);
        pop1.q = min(Qmax,pop1.q); %修复上下界
        offspring4(i) = pop1;
    end
    offspring = CalObj(offspring4);
end

3 运行结果

 

 

完整代码:基于改进遗传算法求解农业水资源调度问题(Matlab代码实现)

4 参考文献

参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]赵小强,何智娥.基于改进混沌遗传算法的水资源优化调度[J].兰州理工大学学报. 2015,41(04)
 

5 写在最后

部分理论引用网络文献,如有侵权请联系删除。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 灌区农业水价系统是一个基于Axure原型的软件应用,旨在为灌区农业提供水价管理的解决方案。该系统的主要功能是对灌区内的农业用水进行定价和监控。 首先,灌区农业水价系统可以根据农作物的需水量、用水周期和地区水资源状况等因素进行水价定价。通过该系统,农民可以根据自身的农田面积和农作物种植情况,在系统中输入相关数据,系统会根据预设的定价规则计算出对应的农业水价。这样,农民在用水前就可以得知所需支付的水费,并且可以根据水价的变化调整种植策略,以节约用水成本。 其次,灌区农业水价系统可以实时监控农田的用水情况。通过水表和传感器等设备的安装,系统可以实时获取农田的用水量和用水效率等信息。农民可以通过系统随时查看自己田地的用水情况,并根据系统的分析结果来优化农田的用水管理。同时,系统也可以通过统计和分析农田用水数据,为农业管理部门提供决策支持,以合理配置水资源,提高水资源利用效率。 最后,灌区农业水价系统还可以提供一些额外的功能,例如用水许可证的申请和审批、用水费用的缴纳和结算等。这些功能的实现可以进一步规范和管理农业用水行为,提高用水效率,维护水资源的可持续利用。 总之,灌区农业水价系统通过使用Axure原型开发,为农民和农业管理部门提供了一种科学、智能的农业用水管理解决方案。它可以帮助农民优化用水策略,提高用水效率,同时也可以为农业管理部门提供决策支持,实现合理利用水资源的目标。 ### 回答2: 灌区农业水价系统是一个基于axure原型设计的应用程序,旨在为农业灌溉项目提供一个可靠的水价管理工具。 该系统的主要功能包括: 1. 灌溉计划管理:农民可以输入灌溉计划,包括作物类型、灌溉时间和面积等信息。系统会根据这些信息计算出所需的水量,并自动进行水价计算。 2. 水价计算:系统根据不同的地区、灌溉季节和作物类型等因素,自动生成水价计算公式。用户可以根据需要自定义水价标准,在输入相关参数后,系统会自动计算出灌溉所需的水价。 3. 收费管理:系统可以根据灌溉计划和水价计算结果,生成相应的水价账单。农民可以在系统中查看并支付账单,同时系统还提供收费记录和统计功能,方便农民了解自己的用水情况。 4. 报表生成:系统可以根据灌溉计划和收费记录,生成各种报表,如用水量统计、收费情况分析等,帮助相关部门对农业水资源的使用情况进行监管和决策。 灌区农业水价系统的优势在于: 1. 自动化计算:系统可以根据用户输入的参数,自动进行水价计算和账单生成,大大减少了人工操作的繁琐程度和错误率。 2. 定制化管理:用户可以根据实际需求,自定义水价标准和灌溉计划,系统会根据这些参数进行相应计算和管理,使管理更加灵活和个性化。 3. 数据分析功能:系统可以生成各种报表和统计分析结果,帮助相关部门对农业水资源的使用情况进行全面监控和分析,为水资源管理提供科学依据。 总之,灌区农业水价系统通过利用axure原型设计,提供了一个高效、方便和可靠的水价管理工具,为农业灌溉项目提供了准确的水价计算、账单管理和数据分析等功能,目的是为了促进农业的可持续发展和水资源的有效利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值