本帖最后由 lauda1109 于 2009-7-21 20:28 编辑
建了模式 需要做驗證 自己假設了三種問題規模 第三種12個人21天的求解結果相當奇怪 卻不知道問題在哪 請高手幫幫我 以下是部分限制式
member/1..12/:M;
!有12位員工;
day/1..21/:D;
!週期有21天 假設第6 7 13 14 20 21天為星期六 日;
job/1..5/:J;
!3種班別+休假+緊急支援人力;
links1(member,job,day):L;
min=z1+z2+z3+z4+z5;
@for(member(M)|M#EQ#1:@for(job(J)|J#EQ#4:@for(day(D)|D#LE#19:z1=L(M,J-3,D)+L(M,J-1,D+1)+L(M,J,D+2))));
@for(member(M)|M#EQ#1:@for(job(J)|J#EQ#4:@for(day(D)|D#LE#19:z2=L(M,J-2,D)+L(M,J-1,D+1)+L(M,J,D+2))));
@for(member(M)|M#EQ#1:@for(job(J)|J#EQ#4:@for(day(D)|D#LE#19:z3=L(M,J-1,D)+L(M,J,D+1)+L(M,J-1,D+2))));
@for(member(M)|M#EQ#1:@for(job(J)|J#EQ#2:@for(day(D)|D#LE#18:z4=L(M,J,D)+L(M,J-1,D+1)+L(M,J,D+2)+L(M,J-1,D+3))));
@for(member(M)|M#EQ#1:@for(job(J)|J#EQ#4:@for(day(D)|D#EQ#1:z5=(L(M,J,D+5)*L(M,J,D+5)+L(M,J,D+6)*L(M,J,D+6)+L(M,J,D+12)*L(M,J,D+12)+L(M,J,D+13)*L(M,J,D+13)+L(M,J,D+19)*L(M,J,D+19)+L(M,J,D+20)*L(M,J,D+20))/12-(((L(M,J,D+5)+L(M,J,D+6)+L(M,J,D+12)+L(M,J,D+13)+L(M,J,D+19)+L(M,J,D+20))/12)*((L(M,J,D+5)+L(M,J,D+6)+L(M,J,D+12)+L(M,J,D+13)+L(M,J,D+19)+L(M,J,D+20))/12)))));
目標函數 用來求解班表產生時候 計算違背了上述目標式子發生的次數
@for(job(J)|J#EQ#1:@for(day(D)|D#EQ#1:@for(member(M)|M#EQ#1:L(M,J,D)+L(M+1,J,D)+L(M+2,J,D)+L(M+3,J,D)+L(M+4,J,D)+L(M+5,J,D)+L(M+6,J,D)+L(M+7,J,D)+L(M+8,J,D)+L(M+9,J,D)+L(M+10,J,D)+L(M+11,J,D)>=4)));滿足基本人力需求 需求都自己假設
@for(member(M)|M#EQ#1:@for(day(D)|D#EQ#1:@for(job(J)|J#EQ#1:L(M,J,D)+L(M,J+1,D)+L(M,J+2,D)+L(M,J+3,D)+L(M,J+4,D)=1)));限制每人每天只能上一種班別
@for(member(M)|M#EQ#1:@for(day(D)|D#LE#20:@for(job(J)|J#EQ#3:L(M,J,D)+L(M,J-2,D+1)<=1)));
@for(member(M)|M#EQ#1:@for(day(D)|D#LE#20:@for(job(J)|J#EQ#3:L(M,J,D)+L(M,J-1,D+1)<=1)));
@for(member(M)|M#EQ#1:@for(day(D)|D#LE#20:@for(job(J)|J#EQ#2:L(M,J,D)+L(M,J-1,D+1)<=1)));
@for(member(M)|M#EQ#1:@for(day(D)|D#LE#19:@for(job(J)|J#EQ#4:L(M,J,D)+L(M,J,D+1)+L(M,J,D+2)<=2)));相關排班和休假限制
@for(member(M)|M#EQ#1:@for(day(D)|D#LE#15:@for(job(J)|J#LE#4:L(M,J,D)+L(M,J,D+1)+L(M,J,D+2)+L(M,J,D+3)+L(M,J,D+4)+L(M,J,D+5)+L(M,J,D+6)<=6)));連續工作與休假天數限制 組合很多 因為我用比較土法煉鋼的方法寫 所以只取一條
發生的問題在於 程式執行後 solver status沒有顯示任何結果 只有infeasible 而在extend solver status裡 obj bound的值與產生的班表自己手算驗證相差很多 不知從何改起 lingo的option設定也不太會調 所以來這發問 幫幫我吧 謝謝 |