如何在 CPLEX 中将多维数组模型转换为元组结构



我想使用一个大型数据集(3100 个需求位置(来解决我的设施位置问题。

其中一个约束是距离矩阵的大小。如果我使用 2D 数组作为位置之间的距离,我会存储大量不必要的数据。(就像我不会在我的模型中使用的长距离一样,所以我添加了另一个约束,如 <= maxdist (

我没有使用 2D 数组,而是尝试使用以下元组,但是如果我不使用完整的距离矩阵(转换为元组(,我没有得到解决方案?

感谢您的建议...

    {string} Supply = ...;      // Supply locations
    {string} DC = ...;          // Candidate facility locations
    {string} Demand = ...;      // Demand locations
    tuple Dist_Tup{
    string FROM;
    string TO;
    float MILES;
    };
    setof(Dist_Tup) DistanceTmp=...;
    setof(Dist_Tup) Distance = { <FROM,TO,MILES> | <FROM,TO,MILES> in DistanceTmp : FROM in Supply || FROM in DC};
    dexpr float TransportCost1 = sum(i in Supply , a in Alt , j in DC , p in Period, BB in Distance : BB.TO==j && BB.FROM==i) X[i][a][j][p]*Dist[BB]*C[i][j];
    //dexpr float TransportCost1 = sum(i in Supply , a in Alt , j in DC , p in Period) X[i][a][j][p]*G[i][a][j]*C[i][j];

将解决方案从问题移动到答案:

我的新代码作为解决方案:

tuple Arc { 
 string FROM;
 string TO;
} 
tuple Dist_Tup{
 string FROM;
 string TO;
 float MILES;
};
setof(Dist_Tup) Distance=...;
setof(Arc) SDC_Arcs = { <FROM,TO> | <FROM,TO,MILES> in Distance : FROM in Supply && TO in DC};
setof(Arc) SD_Arcs =  { <FROM,TO> | <FROM,TO,MILES> in Distance : FROM in Supply && TO in Demand && MILES<=maxDist};
setof(Arc) DCD_Arcs = { <FROM,TO> | <FROM,TO,MILES> in Distance : FROM in DC && TO in Demand && MILES<=maxDist};
dexpr float TransportCost1 = sum(i in Supply , a in Alt , j in DC , p in Period, DIST in Distance : DIST.FROM==i && DIST.TO==j, ARC in SDC_Arcs : ARC.FROM==i && ARC.TO==j) X[ARC][a][p]*G2[DIST]*C[i][j];

最新更新