【问题标题】:i don't understand why no value for x我不明白为什么 x 没有价值
【发布时间】:2020-08-18 20:36:16
【问题描述】:

我正在尝试仅使用 CPLEX 优化线性规划问题。这个问题的目标是给出每篇文章的最低成本。我不明白为什么 x 没有价值。

我不明白问题出在哪里。截图:

这是我的代码:

{string} N=...;
 {string} F=...;
 string FO[F]=...;
 string FD[F]=...;
 {string} P=...;
 string PO[P]=...;
 string PD[P]=...;
 float C[P][F]=...;
 float b=...;
 dvar boolean x[P][F][N][N];
 dexpr float w=sum(p in P)(sum(f in F,i in N,j in N)x[p][f][i][j]*C[p][f]+(1-sum(f in F, i in N,j in N)x[p][f][i][j])*b);
 minimize w;
 subject to { 
 contrainte_1:
    forall(p in P,f in F,i in N,j in N )
    x[p][f][i][j]==1;
 constarinte_2:
    forall(p in P,f in F, i in N, j in N)
    x[p][f][i][PD[p]] == x[p][f][PO[p]][j];
 constraint_3:
   forall(p in P,f in F  )
     x[p][f][FD[f]][FO[f]]==0;    
 constraint_4:
   forall(p in P,f in F )
     x[p][f][PD[p]][PD[p]]==0; 
 constraint_7:
   forall(p in P,f in F  )
     x[p][f][PO[p]][PO[p]]==0; 
}
 main 
 {
 thisOplModel.generate();
 cplex.exportModel("programmeopl.lp");
  cplex.solve()
 }
//data:  N={"M1","M2","Paris"};
 P={"P1","P2"};
 F={"V1","V2","V3"}; 
 FO=["M1","M2","M1"];
 FD=["Paris","Paris","Paris"];
 PO=["M1","M2"];
 PD=["Paris","Paris"];
 C=[[2500,3000,2800], [2000,2500,3000]];
 b=10000;

【问题讨论】:

    标签: mathematical-optimization cplex opl


    【解决方案1】:

    如果注释掉流控制部分(main),把约束名移到forall后面:

    {string} N=...;
     {string} F=...;
     string FO[F]=...;
     string FD[F]=...;
     {string} P=...;
     string PO[P]=...;
     string PD[P]=...;
     float C[P][F]=...;
     float b=...;
     dvar boolean x[P][F][N][N];
     dexpr float w=sum(p in P)(sum(f in F,i in N,j in N)x[p][f][i][j]*C[p][f]+(1-sum(f in F, i in N,j in N)x[p][f][i][j])*b);
     minimize w;
     subject to { 
     
        forall(p in P,f in F,i in N,j in N )
        contrainte_1:x[p][f][i][j]==1;
     
        forall(p in P,f in F, i in N, j in N)
        constarinte_2:x[p][f][i][PD[p]] == x[p][f][PO[p]][j];
     constraint_3:
       forall(p in P,f in F  )
         x[p][f][FD[f]][FO[f]]==0;    
     
       forall(p in P,f in F )
         constraint_4:x[p][f][PD[p]][PD[p]]==0; 
     
       forall(p in P,f in F  )
         constraint_7:x[p][f][PO[p]][PO[p]]==0; 
    }
    // main 
    // {
    // thisOplModel.generate();
    // cplex.exportModel("programmeopl.lp");
    //  cplex.solve()
    // }
    

    然后你会在 IDE 中得到一些放松:

    15  [1,1]   [0,1]   contrainte_1["P1"]["V1"]["Paris"]["M1"]
    15  [1,1]   [0,1]   contrainte_1["P1"]["V2"]["Paris"]["M2"]
    15  [1,1]   [0,1]   contrainte_1["P1"]["V3"]["Paris"]["M1"]
    15  [1,1]   [0,1]   contrainte_1["P2"]["V1"]["Paris"]["M1"]
    15  [1,1]   [0,1]   contrainte_1["P2"]["V2"]["Paris"]["M2"]
    15  [1,1]   [0,1]   contrainte_1["P2"]["V3"]["Paris"]["M1"]
    24  [0,0]   [0,1]   constraint_4["P1"]["V1"]
    24  [0,0]   [0,1]   constraint_4["P1"]["V2"]
    24  [0,0]   [0,1]   constraint_4["P1"]["V3"]
    24  [0,0]   [0,1]   constraint_4["P2"]["V1"]
    24  [0,0]   [0,1]   constraint_4["P2"]["V2"]
    24  [0,0]   [0,1]   constraint_4["P2"]["V3"]
    27  [0,0]   [0,1]   constraint_7["P1"]["V1"]
    27  [0,0]   [0,1]   constraint_7["P1"]["V2"]
    27  [0,0]   [0,1]   constraint_7["P1"]["V3"]
    27  [0,0]   [0,1]   constraint_7["P2"]["V1"]
    27  [0,0]   [0,1]   constraint_7["P2"]["V2"]
    27  [0,0]   [0,1]   constraint_7["P2"]["V3"]
    

    这可以帮助您调试。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2021-01-21
      • 2013-01-25
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多