【发布时间】:2019-04-04 15:14:06
【问题描述】:
我被扔进了一个 Cplex 并且完全没有使用它的经验。我可能遗漏了一些明显的信息。
我们正在尝试建立一个关于港口火车处理能力的简单优化模型。每个处理过的产品都有自己的路径,使用几个铁路段。我正在寻找一种方法来获取我的段数组中的当前索引以求和。
简而言之,我正在 Cplex 中寻找相当于“.getindex()”的内容。我环顾四周无济于事。
这里是相关参数的简化版。
int amountSegments=6;
int products=1..2;
int time=15;
int path[products][segments]=[[2,1,4,5],[2,1,3,6,4,5]];
这是相关的限制之一
forall(l in products)
forall(i in path)
sum(t in XXXX)
x[i][l][t]==d[l];
我在这里尝试做什么,如果 x 是 [time] 包含 [product] 的每个 [segment] 上的货车数量:对于两种产品中的每一种以及该产品路径中的每个段,我想在 i.getindex() 中求和 .. time-amountSegments+i.getindex()。
提前谢谢你,我希望这有点可以理解。
编辑:我会尝试澄清我的问题。 我们有两个产品,1 和 2。产品 1 路径由路径 2、1、4、5 组成,产品 2 由路径 2、1、3、6、4、5 组成。对于该特定约束,对于产品一,模型需要为段 2、1、4 和 5 生成总和。顺序对于模型的其余部分很重要。
对于第 2 段,我需要 t 上从 1 到 12 的总和(路径上的第一段,所以 15-4+1)
对于第 1 段,我需要 t 上从 2 到 13 的总和(路径上的第二段,所以 15-4+2)
对于第 4 段,我需要 t 上从 3 到 14 的总和(路径上的第三段,所以 15-4+3)
对于第 5 段,我需要 t 上从 4 到 15 的总和(路径上的第四段,因此 15-4+4)
对于第二个产品: 对于第 2 段,我需要 t 上从 1 到 10 的总和(路径上的第一段,所以 15-6+1)
对于第 1 段,我需要 t 上从 2 到 11 的总和(路径上的第二段,所以 15-6+2)
对于第 3 段,我需要 t 上从 2 到 12 的总和(路径上的第三段,所以 15-6+3)
对于第 6 段,我需要 t 上从 3 到 13 的总和(路径上的第四段,所以 15-6+4)
对于第 4 段,我需要 t 上从 4 到 14 的总和(路径上的第五段,因此 15-6+5)
对于第 5 段,我需要 t 上从 2 到 15 的总和(路径上的第六段,因此 15-6+6)
简而言之,对于 [i],我需要模型来读取正确产品的路径数组。 对于 [l],我认为这很简单。 对于 [t] 上的总和,我需要从路径数组中的位置(索引 + 1)到(路径中段的总时间量 + 路径数组中的位置)
我希望这能更好地解释我的问题!
【问题讨论】:
-
当您提到
i.getindex()时,我不清楚i是什么。如果您能解释如何定义x,可能会更容易理解您的问题,因为您似乎混淆了x的前两个维度。 -
我将 X 定义为 x[segment][product][time]。对于产品一,我想求和: x[2][1][from 1 to (15-4+1)] 因为这是数组中的第一段。 x[1][1][from 2 to 15-4+2)] 因为这是数组中的第二段。以此类推。