lingo 整数规划编程 improper use of attribute name,求高手指点!!
model:!配送中心选址问题;!集合域;sets:!customers-客户集合,demand-客户年需求;customers/c1..c8/:demand;!rdc-...
model:
!配送中心选址问题;
!集合域;
sets:
!customers-客户集合,demand-客户年需求;
customers/c1..c8/:demand;
!rdc-配送中心备选地集合,volume-配送中心年配送量,selection-是否被选为新建配送中心,operatingcosts-配送中心年运营费用,buildingcosts-配送中心建设费用;
rdc/dc1..dc8/:volume,selection,transportcosts,operatingcosts,buildingcosts;
!cost-配送中心候选地向客户配送货物运输费率,send-配送中心候选地时候向客户配送货物;
links(rdc,customers):cost,send,distance;
endsets
!目标函数总费用最小;
mintotal=@sum(rdc(i):transportcosts(i)+operatingcosts(i)+buildingcosts(i));
min=mintotal;
!计算各配送中心年配货量;@for(rdc(i):
volume(i)=@sum(customers(j):demand*@sum(links(i,j):send)));
!计算配送中心年运输费用;@for(rdc(i):
transportcosts(i)=@sum(links(i,j):demand(j)*cost(i,j)*send(i,j)));
!计算配送中心年运营费用;@for(rdc(i):
operatingcosts(i)=volume(i)*0.2+800000*selection(i));
!计算配送中心年建设费用;@for(rdc(i):
buildingcosts(i)=volume(i)*0.1+1200000*selection(i));
!0-1变量约束,表示配送中心i是否被选中;
@for(rdc(i):@bin(selection(i)));
!0-1变量约束,表示配送中心i是否对客户j配货;
@for(links(i,j):@bin(send(i,j)));
!配送中心路线限制,只有被选中的候选地才能向客户配货;
@for(links(i,j):send(i,j)<=selection(i));
!对于一个用户有且只有一个配送中心配货;
@for(customers(j):@sum(links(i,j):send(i,j))=1);
!数据域;
data:
!data中导入原始数据;
cost=@file('C:\Users\v\Desktop\data.txt');
demand=@file('C:\Users\v\Desktop\data.txt');
!将计算结果导入到data表中;
send=@file('C:\Users\v\Desktop\data.txt');
enddata
end
data.txt内容:
!单位物资运输费用表C
0 5 13 24 21 19 16 25
5 0 8 29 26 24 21 30
13 8 0 37 34 32 29 38
24 29 37 0 3 7 8 8
21 26 34 3 0 4 5 5
19 24 32 7 4 0 3 5
16 21 29 8 5 3 0 9
25 30 38 8 5 5 9 0~
!客户年需求量D
7500 7928 11206 25133 17813 17813 16021 16180~
出现问题:
34] cost=0 5 13 24 21 19 16 25 5 0 展开
!配送中心选址问题;
!集合域;
sets:
!customers-客户集合,demand-客户年需求;
customers/c1..c8/:demand;
!rdc-配送中心备选地集合,volume-配送中心年配送量,selection-是否被选为新建配送中心,operatingcosts-配送中心年运营费用,buildingcosts-配送中心建设费用;
rdc/dc1..dc8/:volume,selection,transportcosts,operatingcosts,buildingcosts;
!cost-配送中心候选地向客户配送货物运输费率,send-配送中心候选地时候向客户配送货物;
links(rdc,customers):cost,send,distance;
endsets
!目标函数总费用最小;
mintotal=@sum(rdc(i):transportcosts(i)+operatingcosts(i)+buildingcosts(i));
min=mintotal;
!计算各配送中心年配货量;@for(rdc(i):
volume(i)=@sum(customers(j):demand*@sum(links(i,j):send)));
!计算配送中心年运输费用;@for(rdc(i):
transportcosts(i)=@sum(links(i,j):demand(j)*cost(i,j)*send(i,j)));
!计算配送中心年运营费用;@for(rdc(i):
operatingcosts(i)=volume(i)*0.2+800000*selection(i));
!计算配送中心年建设费用;@for(rdc(i):
buildingcosts(i)=volume(i)*0.1+1200000*selection(i));
!0-1变量约束,表示配送中心i是否被选中;
@for(rdc(i):@bin(selection(i)));
!0-1变量约束,表示配送中心i是否对客户j配货;
@for(links(i,j):@bin(send(i,j)));
!配送中心路线限制,只有被选中的候选地才能向客户配货;
@for(links(i,j):send(i,j)<=selection(i));
!对于一个用户有且只有一个配送中心配货;
@for(customers(j):@sum(links(i,j):send(i,j))=1);
!数据域;
data:
!data中导入原始数据;
cost=@file('C:\Users\v\Desktop\data.txt');
demand=@file('C:\Users\v\Desktop\data.txt');
!将计算结果导入到data表中;
send=@file('C:\Users\v\Desktop\data.txt');
enddata
end
data.txt内容:
!单位物资运输费用表C
0 5 13 24 21 19 16 25
5 0 8 29 26 24 21 30
13 8 0 37 34 32 29 38
24 29 37 0 3 7 8 8
21 26 34 3 0 4 5 5
19 24 32 7 4 0 3 5
16 21 29 8 5 3 0 9
25 30 38 8 5 5 9 0~
!客户年需求量D
7500 7928 11206 25133 17813 17813 16021 16180~
出现问题:
34] cost=0 5 13 24 21 19 16 25 5 0 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询