0

我想对一组覆盖问题(关于危险品等)进行建模,为此,我一直在使用 ILOG CPLEX。我已经定义了我需要的所有变量和集合,除了 2。

int nodes=...;
int hazmats=...;
int vehicles=...;
int arcs=...;
range ii=1..nodes;
range mm=1..hazmats;
range kk=1..vehicles;
range aa=1..arcs;

int fixed_install_cost[ii]=...;
int oper_cost[kk]=...;
int D[mm][kk]=...;
int cover_table[aa][ii]=...;


dvar int+ vehs[ii][kk];
dvar boolean located[ii];
dvar boolean cov[mm][kk];
dvar int+ vehs_per_hazmat[mm];

之后我尝试设置我的模型,但我的问题是我希望以下内容总结“这种危险材料(m)所需的车辆(k)”的变量。为此,从表 D[mm][kk] 开始,该表在每个地方都显示需要多少类型 k 的车辆来响应涉及 m 类型危险品的事件,我制作了 cov[mm][kk] ,这是一个二进制表,在每个地方显示是否需要车辆 k 来处理危险品 m。之后,我为该表的每一行总结了“1”的数量以及必须检查的“k”的数量。但是,例如,对于一个危险品,需要 3 种(可能的 5 种)车辆类型,根据我如何解决这个问题,我可能正确地求和 k=1 到 3,但我想要正确的求和(索引将不正确)。但,

forall (a in aa, m in mm, k in vehs_per_hazmat[mm])  {
    sum((cover_table[a][i]>0) in ii) vehs[i][k]>=D[m][k];
}

有人可以帮我解决这个问题吗?我在想一些比需要更复杂的事情吗

4

0 回答 0