簡體   English   中英

如何創建在 CPLEX 和 C++ 中索引的表達式

[英]how to create an expression indexed in CPLEX and C++

在這里輸入圖片描述我有一個工人之旅的表達方式,我試圖對其進行編碼,但我不知道它是否正確,因為我有很多錯誤所以有人可以幫助我,X[w][w][ i][j]是決策變量,p[i][j]是從i到j的處理弧的權重,d[i][j]是距離

這是我的代碼提議


compteur = 0;
        IloFloatVarArray2 CW(env, W);
        for (w = 0; w < W; w++)
        {
        CW[w] = IloFloatVarArray(env, W, 0.0, INFINITY);
            model.add(CW[w]);
#ifdef DEBUG
            for (w = 0; w < W; w++)
            {
                sprintf(varname, "CW_%d_%d", w, w);
                CW[w][w].setName(varname);
                compteur++;
            }
        }
#endif
#ifdef DEBUG
        printf("compteur cw =%d\n", compteur);
#endif

        IloExpr CW[w][w](env);

        for (i = 0; i < A; i++)
            for (j = 0; j < A; j++)
                CW[w][w] += d[i][j] * xW[w][i][j][w];
        for (i = 0; i < A; i++)
            for (j = 0; j < A; j++)
                CW[w][w] += Parc[i][j] * xW[w][i][j][w];
        for (i = 0; i < A; i++)
            for (j = 0; j < A; j++)
                CW[w][w] += 1 * xW[w][i][j][w];
        model.add(env, CW[w][w]);
                CW[w][w].end();


你必須創建一個二維表達式數組,填充它,然后用一些約束來約束表達式。 例如:

#include <ilcp/cp.h>

int main() {   
  typedef IloArray<IloNumExprArray> IloNumExprArray2;
  IloEnv env;
  IloInt n = 4;
  IloNumExprArray2 c(env, n);
  IloIntVarArray var(env, n, 0, n-1); 
  for (IloInt x = 0; x < n; x++) {
      c[x] = IloNumExprArray(env, n); 
      for (IloInt y = 0; y < n; y++) {
          c[x][y] = IloNumExpr(env, 0); 
          c[x][y] += var[x] * var[y];
      }
  }
  IloModel mdl(env);

  for (IloInt x = 0; x < n; x++) {
      for (IloInt y = 0; y < n; y++) {
          mdl.add(c[x][y] ==1);
      }
  }
  IloCP cp(mdl);
  cp.startNewSearch();
  while (cp.next()) {
      cp.out() << cp.domain(var) << std::endl;
  }
  cp.end();
  env.end();
  return 0;
}

暫無
暫無

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

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