I've just gotten an assignment to improve a Lingo model. The model is about dynamic optimization when producing. My assignment is to improve the model so it's still solvable when demand is greater then producing ability. However, I encounter some problem.
The first is when I try to increase period, the model report out of range error which is some problem with the excel file. I'm working on this right now.
The second is when I try to add some branching to the model to solve the assignment, Lingo reports error code 188 which is saying I'm try to redefine defined set. Please help me fix it.
Here is the old model:and here is my improved modelCode:SETS: ky: cpcd,cpbd1,cplk,mucsx1,kysx,dt,lkdk,lkck,mucsx2,cpbd2,nlsx2,nlk,nlsx1; luukho:chay; ENDSETS Min=@Sum(ky(I): cpcd(I)*kysx(I)+cpbd1(I)*mucsx1(I)+cplk(I)*lkck(I)+mucsx2(I)*cpbd2(I)); tongcp=@Sum(ky(I): cpcd(I)*kysx(I)+cpbd1(I)*mucsx1(I)+cplk(I)*lkck(I)+mucsx2(I)*cpbd2(I)); @For(ky:@Bin(kysx)); lkdk(1)=dau;lkck(soky)=cuoi; @for(ky(I):lkck(I)=lkdk(I)+mucsx1(I)+mucsx2(I)-dt(I)); @for(luukho(J):lkdk(chay(J))=lkck(chay(J)-1)); @for(ky(I):@gin(mucsx1(I))); @for(ky(I):mucsx1(I)<=nlsx1(I)*kysx); @for(ky(I):lkck(I)<=nlk(I)); @for(ky(I):lkck(I)>=0); @for(ky(I):mucsx2(I)<=nlsx2(I)*kysx); DATA: ky,dt,cpbd1,cpcd,cplk,dau,cuoi,soky,chay,nlsx2,cpbd2,nlk,nlsx1 = @OLE ('IO.xlsx'); @OLE ('IO.xlsx','mucsx1','lkck','lkdk','tongcp','mucsx2')= mucsx1,lkck,lkdk,tongcp,mucsx2; ENDDATAIt's basically the same, just adding calc section.Code:SETS: ky: cpcd,cpbd1,cplk,mucsx1,kysx,dt,lkdk,lkck,mucsx2,cpbd2,nlsx2,nlk,nlsx1; luukho:chay; ENDSETS Min=@Sum(ky(I): cpcd(I)*kysx(I)+cpbd1(I)*mucsx1(I)+cplk(I)*lkck(I)+mucsx2(I)*cpbd2(I)); tongcp=@Sum(ky(I): cpcd(I)*kysx(I)+cpbd1(I)*mucsx1(I)+cplk(I)*lkck(I)+mucsx2(I)*cpbd2(I)); @For(ky:@Bin(kysx)); lkdk(1)=dau;lkck(soky)=cuoi; @for(ky(I):lkck(I)=lkdk(I)+mucsx1(I)+mucsx2(I)-dt(I)); @for(luukho(J):lkdk(chay(J))=lkck(chay(J)-1)); @for(ky(I):@gin(mucsx1(I))); @for(ky(I):mucsx1(I)<=nlsx1(I)*kysx); @for(ky(I):lkck(I)<=nlk(I)); !@sum(ky(I):sx(I))+lkdk(1)=@sum(ky(I):dt(I))+lkck(cuoi); @for(ky(I):lkck(I)>=0); @for(ky(I):mucsx2(I)<=nlsx2(I)*kysx); calc: @ifc(@sum(ky(I):nlsx1(I)+nlsx2(I))#LT#@sum(ky(I):dt(I)): @for(ky(I): @ifc((lkdk(I)+nlsx1(I)+nlsx2(I))#LE#(dt(I)+nlk(I)): mucsx1(I)=nlsx1(I); mucsx2(I)=nlsx2(I); @else @ifc(cpbd1(I)#GE#cpbd2(I): mucsx2(I)=@if((nlsx2(I)+lkdk(I))#LE#(dt(I)+nlk(I)),nlsx2(I),nlk(I)+dt(I)-lkdk(I)); mucsx1(I)=@if((nlsx2(I)+lkdk(I))#LE#(dt(I)+nlk(I)),nlk(I)+dt(I)-lkdk(I)-nlsx2(I),0); @else mucsx1(I)=@if((nlsx1(I)+lkdk(I))#LE#(dt(I)+nlk(I)),nlsx1(I),nlk(I)+dt(I)-lkdk(I)); mucsx2(I)=@if((nlsx1(I)+lkdk(I))#LE#(dt(I)+nlk(I)),nlk(I)+dt(I)-lkdk(I)-nlsx1(I),0);); ); ); ); endcalc DATA: ky,dt,cpbd1,cpcd,cplk,dau, cuoi,soky,ch,nlsx2,cpbd2,nlk,nlsx1 = @OLE ('IO.xlsx'); @OLE ('IO.xlsx','mucsx1','lkck','lkdk','tongcp','mucsx2')= mucsx1,lkck,lkdk,tongcp,mucsx2; ENDDATA
And here is the Excel file
http://www.mediafire.com/view/?yq48l4h9b12yh51


Reply With Quote