tommy0507 发表于 2015-3-1 15:31

請問在lingo8.0程式語法可以跑 但轉換到lingo12卻無法跑 請問哪裡要修正

本帖最后由 tommy0507 于 2015-3-1 16:22 编辑

程式語法如下    不知道lingo8升級到lingo12怎麼會跑不出來
在lingo8可以跑出結果    但lingo12一直顯示錯誤
因為已經使用win8如果灌lingo8  所以只能使用lingo12
請各位大神們    幫忙一下



!================================================;
Model:
Sets:                                                           !設定巨集開始;
people/1..28/:i;                                            !輪班人員(i=1~28);
job/1..3/:j;                                                  !勤務模式(j=1~3);
timezone/1..3/:k;                                          !出勤時段(k=1~3);
day/1..7/:d;                                                 !每周有7天(d=1~7);
PP(Job,Timezone):p;                                    !勤務需求人力pjk;
XX(People,Job,Day,Timezone):x;                    !決策變數x(i,j,d,k);
YY(People,Day):y;                                        !決策變數y(i,d);                        
Endsets
!================================================;
Data:
                 !設定常數;
p=@OLE('d:\Excel.xlsx','pjk');   
                 !引入需求人數;
    @OLE('d:\Excel.xlsx','xijdk')=x;
                 !引出執行結果;   
                                      
W1=1;         !k=1 早班加權*1;
W2=2;         !k=2 晚班加權*2;
W3=3;         !k=3 大夜班加權*3;

Enddata            
            !設定資料結束;      
!================================================;
Min=Z-W;
            !每位輪班人員出勤次數之最大平均數(3-1);     
@for(people(i):                                                                                               <===這裡一直顯示錯誤
  @sum(XX(i,j,d,k)|k#eq#1:x(i,j,d,k))*W1+
    @sum(XX(i,j,d,k)|k#eq#2:x(i,j,d,k))*W2+                                                      
      @sum(XX(i,j,d,k)|k#eq#3:x(i,j,d,k))*W3<=Z);
               !最大排班次數小於等於Z(3-2);

@for(people(i):                                                                                                <===如果忽略前面  這裡也會
  @sum(XX(i,j,d,k)|k#eq#1:x(i,j,d,k))*W1+                                                                 基本上以下都會
    @sum(XX(i,j,d,k)|k#eq#2:x(i,j,d,k))*W2+                                                              但lingo8卻可以出來
      @sum(XX(i,j,d,k)|k#eq#3:x(i,j,d,k))*W3>=W);
               !最大排班次數小於等於Z(3-2);

@for (people(i):
  @for(day(d):
     @sum(XX(i,j,d,k):x(i,j,d,k))<=1));  
              !每天每人僅能一種勤務模式(3-3);
  
@for(people(i):
    @for(day(d)|d#le#6:
       @sum(Job(j):x(i,j,d,3)+x(i,j,d+1,1))<=1));  
              !每日大夜班之次日不得排列早班(3-4);

@for(people(i):
    @sum(Job(j):x(i,j,7,3)+x(i,j,1,1))<=1);
              !每周最後一日大夜班次日不得排列早班(3-5);

@for(people(i)|i#le#14:
    @for(day(d):                          
        @sum(Timezone(k):x(i,3,d,k))=0));
              !正職人員可任職之限制(3-6);
@for(people(i)|i#ge#15:
    @for(day(d):                          
        @sum(Timezone(k):x(i,1,d,k))=0));
               !約僱人員可任職之限制(3-7);

@for(job(j):
@for(day(d):
  @for(Timezone(k):
   @sum(XX(i,j,d,k):x(i,j,d,k))>=p(j,k))));
             !各時段人力需求限制(3-8);

@for(people(i):
    @sum(XX(i,j,d,k):x(i,j,d,k))<=5);                                                            
             !每人排程內不超過五天班 (3-9);  

!================================================;
!決策變數Xijdk,屬於0或1的限制;
@for(people(i):
    @for(job(j):
        @for(Timezone(k):
            @for(day(d):
                @bin(x(i,j,d,k))))));   

@for(people(i):
    @for(day(d):
        @bin(y(i,d))));   
!================================================;
END


liwenhui 发表于 2015-3-20 09:12

没有发现明显的问题。你的@OLE中读入的excel文件如果能提供的话,我可以尝试帮你运行一下。
页: [1]
查看完整版本: 請問在lingo8.0程式語法可以跑 但轉換到lingo12卻無法跑 請問哪裡要修正