我想使用一个大型数据集(3100个需求位置)来解决我的设施选址问题。
约束之一是距离矩阵的大小。如果我使用二维数组来表示位置之间的距离,我会存储大量不必要的数据。(比如我不会在模型中使用的长距离,所以我添加了另一个约束,比如<= maxdist )
我没有使用二维数组,而是尝试使用以下元组,但是如果我不使用完整的距离矩阵(转换为元组),我得不到解决方案?
谢谢你的建议...
{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];发布于 2017-07-04 02:16:39
将解决方案从一个问题移动到另一个答案:
我的新代码作为解决方案:
元组圆弧{ 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 ={ | in Distance :FROM in Supply & TO in Demand & MILES<=maxDist};setof( ARC ) DCD_Arcs ={ < FROM,TO> | 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) XARCp*G2DIST*Ci;
https://stackoverflow.com/questions/44686075
复制相似问题