数学建模社区-数学中国

标题: 请高手帮忙看看为什么会无解? [打印本页]

作者: bei_fang    时间: 2013-9-22 16:24
标题: 请高手帮忙看看为什么会无解?
在一个流域中(流域节点网络见附图),上游有两个水库供水,12个月水库1supply1)的供水量分别为128 125 234 290 350 400 500 440 240 210 181 128,水库2supply 2供水量分别为 39 39  52  121 168 144 105 78  49 44  45 39。节点5simple1)为两个支流的汇流节点,在节点5t个月生活用水divert_domt,工业用水divert_indt,农业用水divert_agrt,其他节点无用水户。divert_dom(t)为第t个月生活最低需水;divert_ind(t)为第t个月工业最低需水;divert_agr(t)为第t个月农业最低需水,假设每个月最低需水量都为20outit为第i个节点第t个月的出流量,intit为第i个节点第t个月的入流量。为了保证下游河道用水,在出流节点(outlet)最小水量不低于为50,目标函数为全年生活、工业、农业的供水量最大值。所列模型见附图
model:
sets:
node /supply,res_1,res_2,simple_1,simple_2,simple_3,simple_4,simple_5,outlet/;
nl (node)/res_1,res_2/;
month /Jan, Feb, Mar,Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec/:sup1,sup2,demand_dom,demand_ind,demand_agr,divert_dom,divert_ind,divert_agr,use,out,int;

endsets
sets: net_flow(node,node)
/supply,res_1
supply,res_2
res_1,simple_1
res_2,simple_1
simple_1,simple_2
simple_2,simple_3
simple_3,simple_4
simple_4,simple_5
simple_5,outlet
outlet,supply/;
endsets
sets:
net_time(net_flow,month):waterflow;
endsets
data:
sup1=128 125 234 290 350 400 500 440 240 210 181 128;!水源1的入流量;
sup2=39 39  52  121 168 144 105 78  49  44  45 39;!水源2的入流量;
demand_dom=20 20 20 20 20 20 20 20 20 20 20 20;
demand_ind=20 20 20 20 20 20 20 20 20 20 20 20;
demand_agr=20 20 20 20 20 20 20 20 20 20 20 20;
enddata


N=@size(node);

@for(net_time(i,j,t)|i#eq#1 #and# j#eq#2:waterflow(i,j,t)=sup1(t));     
@for(net_time(i,j,t)|i#eq#1 #and# j#eq#3:waterflow(i,j,t)=sup2(t));     

max=@sum(month(t):divert_dom(t)+divert_ind(t)+divert_agr(t));

@for(month(t):divert_dom(t)>=demand_dom(t));
@for(month(t):divert_ind(t)>=demand_ind(t));
@for(month(t):divert_agr(t)>=demand_agr(t));
@for(month(t):use(t)=divert_dom(t)+divert_ind(t)+divert_agr(t));
@for(month(t):@sum(net_time(j,i,t)|i#eq#5:waterflow(j,i,t))>=use(t));
@for(month(t):int(t)=@sum(net_time(j,i,t)|i#eq#5:waterflow(j,i,t)));
@for(month(t):out(t)=@sum(net_time(i,j,t)|i#eq#5:waterflow(i,j,t)));
@for(month(t):
    @for(node(i):@sum(net_time(i,j,t):waterflow(i,j,t))=
            @if(i#lt#5,@sum(net_time(j,i,t):waterflow(j,i,t)),
            @if(i#eq#5,@sum(net_time(j,i,t):waterflow(j,i,t))-use(t),@sum(net_time(j,i,t):waterflow(j,i,t))
                  )
                )
                )
      );

@for(month(t):@sum(net_time(j,i,t)|i#eq#10:waterflow(j,i,t))>=50);

data:
@text('result.txt')=divert_agr;
enddata
end

moxing.png (22.59 KB, 下载次数: 125)

moxing.png






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5