簡體   English   中英

有沒有辦法將 CPLEX 中的 3 維數組寫入 Excel?

[英]Is there a way to write 3 dimensional array from CPLEX to Excel?

我有一個 X[k][i][j] 的結果數組(k 在 Day 范圍從 1 到 365,i 在 Task 范圍從 1 到 200,j 在 Repetition 范圍從 0 到 365)。

我知道如何將二維數組從 cplex 寫入 excel 但 3 維數組到 excel 似乎是個問題。

有沒有辦法將 3 維數組從 cplex 寫入 excel? 我嘗試使用此鏈接中的方法,但后來它說約束是沖突的(可能是因為我的 j 范圍從 0 到 365?)

有人可以幫我嗎? 非常感謝您!

using CP;
int scale=1000;

int NumbDay =...;
int NumbTask =...;

range Day = 1 .. NumbDay;
range Task = 1 .. NumbTask;

int maxRepetition = NumbDay;
dvar int F [Task] in 1..maxRepetition;
range Repetition = 0 .. maxRepetition;

int h [Day]=...;
int R [Task]=...;
int c [Day]=...;
int E [Task]=...;
int d [Day]=...;
int O [Task]=...;
int P [Task] =...;
float t [Task]=...;

dvar int+ r [Task][Repetition];
dvar int+ e [Task][Repetition];
dvar int+ o [Task][Repetition];
dvar int+ q [Task][Repetition];
dvar int+ n [Task][Repetition];
dvar int+ m [Task][Repetition];
dvar int scalenW[Day] in 0..100;
dexpr float W [k in Day]=scalenW[k]/scale;
dvar boolean X [Day][Task][Repetition];


dexpr float e1 = sum(k in Day)(((sum(k in Day, i in Task, j in Repetition) t [i]*X[k][i][j])/365) - W [k])^2;

dexpr float e2 = sum(i in Task, j in Repetition)(q[i][j]*n[i][j]*m[i][j]);

minimize staticLex(e1, e2);
subject to 
{   constraint_1:
        forall (i in Task){
            F [i] >= P [i] && F[i] <= NumbDay;
    }
    constraint_2:
        forall (k in Day){
            abs(sum(i in Task) (sum(j in Repetition)(t [i]*X [k][i][j]*(j<=F[i]-1))) - W [k])<=1;
    }
    constraint_3:
        forall (i in Task, j in Repetition){
            sum(k in Day) X [k][i][j] == 1 * (j<=F[i]-1);
    }
    constraint_4:
        forall (k in Day, i in Task, j in Repetition){
            X [k][i][j] == 0 || X [k][i][j] == 1;
    }
    constraint_5:
        forall (i in Task, j in Repetition){
          (r[i][j]!=0) => sum(k in Day)(X [k][i][j] * h [k]) <= r [i][j];
    }
    constraint_6:
        forall (i in Task, j in Repetition){
           q [i][j] == r [i][j] - sum(k in Day)( X [k][i][j] * h [k]);
    }
    constraint_7:
        forall (i in Task, j in Repetition){
           r [i][j] <= 10 * NumbDay;
    }
    constraint_8:
        forall (i in Task){
            r [i][0] == R [i];
    }
    constraint_9:
        forall (i in Task, j in 1..NumbDay){
          r [i][j] == (R [i] + sum(k in Day) (X [k][i][j-1] * h [k])) * (j<=F[i]-1);
    }
    constraint_10:
        forall (i in Task, j in Repetition){
           (e[i][j]!=0) => sum(k in Day)(X [k][i][j] * c [k]) <= e [i][j];
    }
    constraint_11:
        forall (i in Task, j in Repetition){
           n [i][j] == e [i][j] - sum(k in Day)( X [k][i][j] * c [k]);
    }
    constraint_12:
        forall (i in Task, j in Repetition){
           e [i][j] <= 10 * NumbDay;
    }
    constraint_13:
        forall (i in Task){
            e [i][0] == E [i];
    }
    constraint_14:
        forall (i in Task, j in 1..NumbDay){
            e [i][j] == (E [i] + sum(k in Day) (X [k][i][j-1] * c [k])) * (j<=F[i]-1);
    }
     constraint_15:
        forall (i in Task, j in Repetition){
           (o[i][j]!=0) => sum(k in Day)(X [k][i][j] * d [k]) <= o [i][j];
    }
   constraint_16:
        forall (i in Task, j in Repetition){
           m [i][j] == o [i][j] - sum(k in Day)( X [k][i][j] * d [k]);
    }
    constraint_17:
        forall (i in Task, j in Repetition){
           o [i][j] <= 10 * NumbDay;
    }
    constraint_18:
        forall (i in Task){
            o [i][0] == O [i];
    }
    constraint_19:
        forall (i in Task, j in 1..NumbDay){
            o [i][j] == (O [i] + sum(k in Day) (X [k][i][j-1] * d [k])) * (j<=F[i]-1);
    }
}

對於 3D 你可以把你的數組變成一個元組集然后Sheetwrite你的元組集

參見 Excel 和 opl https://www.linkedin.com/pulse/excel-rocket-science-optimization-alex-fleischer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM