然後我開始幫妳解決這個問題:
所有代碼都是原創,我花了大概壹個上午的時間幫妳解決。雖然這個題目不算太難,但是數據有點復雜。有許多不同維度的集合聲明。希望能幫到妳。
程序部分:
型號:
集合:
程序/1..4/;!定義四個項目;
factory/1,2/:total time;!定義兩個車間。註意:在本程序中,我們同意Q開頭代表數量,C開頭代表成本;
倉庫/1,2,3/;!定義三個倉庫;
鋼/A、B、C、D/;!定義四種鋼(集合中第四種鋼是塑鋼門窗);
component/1,2/;!定義兩種組件;
卡琳(鋼鐵,倉庫):qlinka!表2.1=倉庫中的鋼材存儲量;
linkb(構件,鋼):qlinkb!表2.2==單位構件所需鋼材數量;
linkc(工廠,組件):時間,成本,qlinkc!表2.3-2.4 = =車間生產成本(&;耗時);
linkd(程序,組件):cpdemand!表2.5,CP需求代表“組件需求”組件需求;
克林(程序,鋼鐵):stdemand!表2.5,“鋼材需求”的鋼材需求;
linkf(工廠,鋼鐵):qlinkf
deepa(工廠、程序、組件):qdeepa!2*4*2=16工程量;
deepb(倉庫,程序,鋼鐵):qdeepb!3*4*4=48個數量;
deepc(鋼鐵,倉庫,工廠):qdeepc!4*3*2=24;
!deepd(工廠,組件,鋼鐵):qdeepd!2*2*4=16;
transa(工廠,程序):qtransa,ctransa!此集合與以下兩個集合(倉庫、車間和項目)之間的運輸。表2.6;
transb(倉庫,程序):qtransb,ctransb
transc(倉庫,工廠):qtransc,ctransc
端集
數據:
qlinka=
4000 4000 6000
3000 3500 2500
3000 5000 5000
200 250 100;
qlinkb=
15 10 20 0
20 10 15 0;
totaltime = 35000 60000
時間=100 200
200 100;
成本=6600 7800
6500 7300;
cpdemand=
50 100
30 60
100 200
50 80;
標準需求=
100 70 0 100
50 80 0 120
30 90 0 80
70 60 0 200;
ctransa=
100 150 80 70
50 60 80 90;
ctransb=
40 20 30 50
60 40 80 100
50 60 75 85;
ctransc=
40 80
100 20
80 40;
結束數據
MIN = @ sum(linkc:cost * qlinkc)+@ sum(transa:qtransa * ctransa)+@ sum(transb:qtransb * ctransb)+@ sum(transc:qtransc * ctransc);
!1.組件需求約束;
@for(linkd(i,j):@sum(factory(k):qdeepa(k,I,j))=cpdemand(i,j));
!2.鋼鐵需求制約;
@for(克林(I,j):@sum(倉庫(k):qdeepb(k,I,j))=stdemand(i,j));
!3.車間工作時間限制;
@ for(factory(I):@ sum(component(j):time(I,j)*qlinkc(i,j))& lt;= total time(I));
!4.平衡庫存鋼材的數量;
@for(卡琳(I,j):@sum(程序(k):qdeepb(j,k,i))+@sum(工廠(m):qdeepc(i,j,m))& lt;=qlinka(i,j));
!5.生產失衡;
@for(linkc(i,j):@sum(program(k):qdeepa(i,k,j))=qlinkc(i,j));
!6.單位構件需要用鋼量約束;
@for(linkf(i,k):qlinkf(i,k)=@sum(component(j):qlinkc(i,j)*qlinkb(j,k)));
!7.對交通量的限制;
@for(transa(i,j):q transa = @ sum(component(k):qdeepa(I,j,k)));
@for(transb(i,j):qtransb = @ sum(steel(k):qdeepb(I,j,k)));
@for(transc(i,j):qtransc = @ sum(steel(k):qdeepc(k,I,j)));
@for(linkf(i,j):qlinkf(i,j)=@sum(warehouse(k):qdeepc(j,k,I)));
結束
部分結果:
在叠代80時找到全局最優解
客觀值:5770900。
可變價值降低成本
總時間(1) 35000.00 0.000000
總時間(2) 60000.00 0.000000
QLINKA( A,1) 4000.000 0.000000
QLINKA( A,2) 4000.000 0.000000
QLINKA( A,3) 6000.000 0.000000
QLINKA( B,1) 3000.000 0.000000
QLINKA( B,2) 3500.000 0.000000
QLINKA( B,3) 2500.000 0.000000
QLINKA( C,1) 3000.000 0.000000
QLINKA( C,2) 5000.000 0.000000
QLINKA( C,3) 5000.000 0.000000
QLINKA( D,1) 200.0000 0.000000
QLINKA( D,2) 250.0000 0.000000
QLINKA( D,3) 100.0000 0.000000
QLINKB( 1,A) 15.00000 0.000000
QLINKB( 1,B) 10.00000 0.000000
QLINKB( 1,C) 20.00000 0.000000
QLINKB( 1,D) 0.000000 0.000000
QLINKB( 2,A) 20.00000 0.000000
QLINKB( 2,B) 10.00000 0.000000
QLINKB( 2,C) 15.00000 0.000000
QLINKB( 2,D) 0.000000
時間(1,1) 100.0000 0.00000
時間(1,2) 200.0000 0.000000
時間(2,1) 200.0000 0.00000
時間(2,2) 100.0000 0.00000
成本(1,1) 6600.000 0.000000
成本(1,2) 7800.000 0.000000
成本(2,1) 6500.000 0.000000
成本(2,2) 7300.000 0.000000
QLINKC( 1,1) 150.0000 0.000000
QLINKC( 1,2) 0.000000 17.50000
QLINKC( 2,1) 80.00000 0.000000
QLINKC( 2,2) 440.0000 0.000000
CPDEMAND( 1,1) 50.00000 0.000000
CPDEMAND( 1,2) 100.0000
CPDEMAND( 2,1) 30.00000 0.000000
CPDEMAND( 2,2) 60.00000 0.00000
CPDEMAND( 3,1) 100.0000 0.000000
CPDEMAND( 3,2) 200.0000 0.00000
CPDEMAND( 4,1) 50.00000 0.000000
CPDEMAND( 4,2) 80.00000 0.00000
STDEMAND( 1,A) 100.0000 0.000000
STDEMAND( 1,B) 70.00000 0.000000
STDEMAND( 1,C) 0.000000 0.000000
STDEMAND( 1,D) 100.0000 0.000000
標準需求(2,A) 50.00000 0.000000
標準需求(2,B) 80.00000 0.000000
標準需求(2,C)0.00000 0.000000
STDEMAND( 2,D) 120.0000 0.000000
標準需求(3,A) 30.00000 0.000000
標準需求(3,B) 90.00000 0.000000
標準需求(3,C)0.00000 0.000000
STDEMAND( 3,D) 80.00000 0.000000
標準需求(4,A) 70.00000 0.000000
標準需求(4,B) 60.00000 0.000000
標準需求(4,C)
標準需求(4,D) 200.0000 0.000000
QLINKF( 1,A) 2250.000 0.000000
QLINKF( 1,B) 1500.000 0.000000
QLINKF( 1,C) 3000.000 0.000000
QLINKF( 1,D) 0.000000 0.000000
QLINKF( 2,A) 10000.00 0.000000
QLINKF( 2,B) 5200.000 0.000000
QLINKF( 2,C) 8200.000 0.000000
QLINKF( 2,D) 0.000000
QDEEPA( 1,1,1)
QDEEPA( 1,1,2) 0.000000 70.00000
QDEEPA( 1,2,1) 0.000000 40.00000
QDEEPA( 1,2,2) 0.000000 110.0000
QDEEPA( 1,3,1) 100.0000 0.000000
QDEEPA( 1,3,2) 0.000000 20.00000
QDEEPA( 1,4,1) 50.00000 0.000000
QDEEPA( 1,4,2) 0.000000 0.000000
QDEEPA( 2,1,1) 50.00000 0.000000
QDEEPA( 2,1,2) 100.0000 0.000000
QDEEPA( 2,2,1) 30.00000 0.000000
QDEEPA( 2,2,2) 60.00000 0.000000
QDEEPA( 2,3,1) 0.000000 50.00000
QDEEPA( 2,3,2) 200.0000 0.000000
QDEEPA( 2,4,1) 0.000000 70.00000
QDEEPA( 2,4,2) 80.00000 0.000000
QDEEPB( 1,1,A) 100.0000 0.000000
QDEEPB( 1,1,B) 70.00000 0.000000
QDEEPB( 1,1,C) 0.000000 62.50000
QDEEPB( 1,1,D) 0.000000 25.00000
QDEEPB( 1,2,A) 50.00000 0.000000
QDEEPB( 1,2,B) 80.00000 0.000000
QDEEPB( 1,2,C) 0.000000 42.50000
QDEEPB( 1,2,D) 0.000000 25.00000
QDEEPB( 1,3,A) 30.00000 0.000000
QDEEPB( 1,3,B) 90.00000 0.000000
QDEEPB( 1,3,C) 0.000000 52.50000
QDEEPB( 1,3,D) 80.00000 0.000000
QDEEPB( 1,4,A) 70.00000 0.000000
QDEEPB( 1,4,B) 60.00000 0.000000
QDEEPB( 1,4,C) 0.000000 72.50000
QDEEPB( 1,4,D) 120.0000
QDEEPB( 2,1,A) 0.000000 80.00000
QDEEPB( 2,1,B) 0.000000 40.00000
QDEEPB( 2,1,C) 0.000000 80.00000
QDEEPB(2 1,D) 80.00000 0.000000
QDEEPB( 2,2,A) 0.000000 80.00000
QDEEPB( 2,2,B) 0.000000 40.00000
QDEEPB( 2,2,C) 0.000000 60.00000
QDEEPB( 2,2,D) 120.0000 0.000000
QDEEPB( 2,3,A) 0.000000 110.0000
QDEEPB( 2,3,B) 0.000000 70.00000
QDEEPB( 2,3,C) 0.000000 100.0000
QDEEPB( 2,3,D) 0.000000 5.000000
QDEEPB( 2,4,A) 0.000000 110.0000
QDEEPB( 2,4,B) 0.000000 70.00000
QDEEPB( 2,4,C) 0.000000 120.0000
QDEEPB( 2,4,D) 0.000000 5.000000
QDEEPB( 3,1,A) 0.000000 50.00000
QDEEPB( 3,1,B) 0.000000 10.00000
QDEEPB( 3,1,C) 0.000000 50.00000
QDEEPB( 3,1,D) 20.00000 0.000000
QDEEPB( 3,2,A) 0.000000 80.00000
QDEEPB( 3,2,B) 0.000000 40.00000
QDEEPB( 3,2,C) 0.000000 60.00000
QDEEPB( 3,2,D) 0.000000 30.00000
QDEEPB( 3,3,A) 0.000000 85.00000
QDEEPB( 3,3,B) 0.000000 45.00000
QDEEPB( 3,3,C) 0.000000 75.00000
QDEEPB( 3,3,D) 0.000000 10.00000
QDEEPB( 3,4,A) 0.000000 75.00000
QDEEPB( 3,4,B) 0.000000 35.00000
QDEEPB( 3,4,C) 0.000000 85.00000
QDEEPB( 3,4,D) 80.00000 0.000000
QDEEPC( A,1,1) 2250.000 0.000000
QDEEPC( A,1,2) 0.000000 0.000000
QDEEPC( A,2,1) 0.000000 120.0000
QDEEPC( A,2,2) 4000.000 0.000000
QDEEPC( A,3,1) 0.000000 80.00000
QDEEPC( A,3,2) 6000.000
QDEEPC( B,1,1) 1500.000 0.000000
QDEEPC( B,1,2) 0.000000 40.00000
QDEEPC( B,2,1) 0.000000 80.00000
QDEEPC( B,2,2) 3500.000 0.000000
QDEEPC( B,3,1) 0.000000 40.00000
QDEEPC( B,3,2) 1700.000 0.000000
QDEEPC( C,1,1) 3000.000 0.000000
QDEEPC( C,1,2) 0.000000 62.50000
QDEEPC( C,2,1) 0.000000 57.50000
QDEEPC( C,2,2) 5000.000 0.000000
QDEEPC( C,3,1) 0.000000 17.50000
QDEEPC( C,3,2) 3200.000 0.000000
QDEEPC( D,1,1) 0.000000 85.00000
QDEEPC( D,1,2) 0.000000 125.0000
QDEEPC( D,2,1) 0.000000 100.0000
QDEEPC( D,2,2) 0.000000 20.00000
QDEEPC( D,3,1) 0.000000 90.00000
QDEEPC( D,3,2) 0.000000 50.00000
QTRANSA( 1,1)
QTRANSA( 1,2)0.00000 0.000000
QTRANSA( 1,3) 100.0000
QTRANSA( 1,4) 50.00000 0.00000
QTRANSA( 2,1) 150.0000 0.000000
QTRANSA( 2,2) 90.00000 0.000000
QTRANSA( 2,3) 200.0000 0.00000
QTRANSA( 2,4) 80.00000 0.00000
CTRANSA( 1,1) 100.0000 0.000000
CTRANSA( 1,2) 150.0000 0.000000
CTRANSA( 1,3) 80.00000 0.000000
CTRANSA( 1,4) 70.00000 0.000000
CTRANSA( 2,1) 50.00000 0.000000
CTRANSA( 2,2) 60.00000 0.000000
CTRANSA( 2,3) 80.00000 0.000000
CTRANSA( 2,4) 90.00000 0.000000
QTRANSB( 1,1) 170.0000 0.000000
QTRANSB( 1,2) 130.0000 0.000000
QTRANSB( 1,3) 200.0000 0.000000
QTRANSB( 1,4) 250.0000 0.000000
QTRANSB( 2,1) 80.00000 0.000000
QTRANSB( 2,2) 120.0000 0.000000
QTRANSB( 2,3) 0.000000 0.000000
QTRANSB( 2,4) 0.000000 0.000000
QTRANSB( 3,1) 20.00000 0.000000
QTRANSB( 3,2) 0.000000 0.000000
QTRANSB( 3,3) 0.000000 0.000000
QTRANSB( 3,4) 80.00000 0.000000
CTRANSB( 1,1) 40.00000 0.000000
CTRANSB( 1,2) 20.00000 0.000000
CTRANSB( 1,3) 30.00000 0.000000
CTRANSB( 1,4) 50.00000 0.000000
CTRANSB( 2,1) 60.00000 0.000000
CTRANSB( 2,2) 40.00000 0.000000
CTRANSB( 2,3) 80.00000 0.000000
CTRANSB( 2,4) 100.0000 0.000000
CTRANSB( 3,1) 50.00000 0.000000
CTRANSB( 3,2) 60.00000 0.000000
CTRANSB( 3,3) 75.00000 0.000000
CTRANSB( 3,4) 85.00000 0.000000
QTRANSC( 1,1) 6750.000 0.000000
QTRANSC( 1,2) 0.000000 0.000000
QTRANSC( 2,1) 0.000000 0.000000
QTRANSC( 2,2) 12500.00 0.000000
QTRANSC( 3,1) 0.000000 0.000000
QTRANSC( 3,2) 10900.00 0.000000
CTRANSC( 1,1) 40.00000 0.000000
CTRANSC( 1,2) 80.00000 0.000000
CTRANSC(2 1)100.0000 0.000000
CTRANSC( 2,2) 20.00000 0.000000
CTRANSC( 3,1) 80.00000 0.000000
CTRANSC( 3,2) 40.00000 0.000000
最後:剛剛查了壹下對結果的需求,覺得還算滿意。如果妳發現有什麽不對的地方,妳可以告訴我,我會調整的。另外,我的催收聲明裏有些東西,妳覺得繁瑣可以修改。聯系511757449@qq.com,或者直接在百度嗨上留言。