【问题标题】:How do I formulate these ConVRP constraints in CPLEX?如何在 CPLEX 中制定这些 ConVRP 约束?
【发布时间】:2020-07-14 09:23:40
【问题描述】:

我正在尝试构建具有硬时间窗口约束的 conVRP 模型。但是,我被流入和流出限制所困扰。

我有四套:

range N = 1..20 // set of Nodes

range P = 1..19 // set of customers

range D = 1..5 // set of Days

range K = 1..2 // set of Vehicles

那我还有一些其他的输入参数

int q[D][N] = ...; //demand matrix of 5*20

int cap = ...; // capacity of a truck

三个决策变量:

dvar boolean x[N][N][D][K]; //= one if node i visits node j on day d with vehicle k

dvar float+ y[N][D][K]; // arrival time 

dvar boolean z[N][K]; // = one if node n is visisted by vehicle k

//目标

minimize sum(i,j in N, d in D, k in K) x[i][j][d][k] * c[i][j]; 

我遇到的限制是:

forall(d in D, i in N: q[i][d]>=1)
   sum (j in N, k in K) x[i][j][k][d] == 1; //outflow 

forall(d in D, j in N : q[j][d]>=1)
  sum(i in N, k in K) x[j][i][k][d] == 1; //inflow

我收到以下错误消息:

Image

我很想知道如何解决这个问题。我们将不胜感激!

【问题讨论】:

  • 我还有一个问题。
  • 我还需要定义一组弧,它们将是 i,j 的所有可能组合,其中 i 不是 j 并且 q[i][d]>=1。我如何创建这个集合?你能帮我解决这个问题吗?

标签: integer cplex opl vehicle-routing


【解决方案1】:

您得到一个索引超出范围的错误。这是因为你有这个定义

int q[D][N] = ...; //demand matrix of 5*20

然后做

forall(d in D, i in N: q[i][d]>=1)

看起来你在这里交换了q 的索引。根据您的定义,d 应该是第一个索引,i 应该是第二个索引。请注意,x 的最后两个索引似乎存在同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多