是否可以在 CPLEX 中的特定时刻评估累积函数?
Is it possible to evaluate a cumul function at a specific moment in time in CPLEX?
我正在尝试添加整个时间累积容量使用的最小化标准。
使用 cumul 函数对容量使用情况进行建模,该函数由 pulse() 函数的总和组成,其中每个计划间隔都会影响已用容量。 max/min-capacity 边界也会随着时间而变化,所以我想我也会用 cumul 函数对它们进行建模(在指定时间对 step() 函数求和)。
我想加入与使用量超过最大容量的分数成比例的一小部分惩罚(也随时间变化)。我的问题是这些累积函数的评估是使用 height_at_start(interval, function) 或 height_at_end(interval, function) 调用发生的,但是这些 min/max-boundaries 或惩罚值可以有效地改变,也与间隔无关。我在文档中看到提供了一个名为 'get_value()' 的函数,但是,这似乎只能在 CpoStepFunctions 上调用,其中 stepheight 不能由决策变量定义。是否有可能在特定时间评估此类累积函数?
亲切的问候,
碧玉
The max/min-capacity boundaries also vary over time, so i figured i'd
model these with cumul functions as well (summation of step()
functions on specified times).
对于最小-最大容量配置文件,您应该使用一些 always_in 约束。它们的形式是:
always_in(F, StartTime, EndTime, LevelMin, LevelMax)
其中 F 是您的累积函数。
它说在(已知)时间window [StartTime,EndTime),函数的级别必须始终在LevelMin(当然可以为0)和LevelMax之间。所以你可以 post 每次这样的约束之一 - window 其中 LevelMin/LevelMax 是相同的。
Is there a possibility to evaluate such cumul functions at specific
times?
没有直接的表达式来评估这种类型的值。通常的建模方法是使用辅助(技术)累积函数。
设:
F = sum([pulse(A[i],Q[i]) for i in …])
成为您的原始累积函数(您 post 最小和最大水平)。
如果想在某个时刻t_j(j=0,1,2,…,n-1)得到F的水平,可以创建一些固定区间变量TIME[j](开始=t_i, 结束=t_i+1).
然后您将创建一个技术累积函数:
G = F - sum([pulse(TIME[j],0,M) for j in range(n)])
其中M是一个大数(大于F的最大级别)。
思路是,如果你post在区间TIME[j]上约束G=0,那么必然地,TIME[j]对G的贡献高度等于F 在时间 [j]。所以你添加约束:
[ always_in(G,TIME[j],0,0) for j in range(n) ]
F 在时间 t_j 的值由下式给出:
-height_at_start(TIME[j],G)
我正在尝试添加整个时间累积容量使用的最小化标准。 使用 cumul 函数对容量使用情况进行建模,该函数由 pulse() 函数的总和组成,其中每个计划间隔都会影响已用容量。 max/min-capacity 边界也会随着时间而变化,所以我想我也会用 cumul 函数对它们进行建模(在指定时间对 step() 函数求和)。
我想加入与使用量超过最大容量的分数成比例的一小部分惩罚(也随时间变化)。我的问题是这些累积函数的评估是使用 height_at_start(interval, function) 或 height_at_end(interval, function) 调用发生的,但是这些 min/max-boundaries 或惩罚值可以有效地改变,也与间隔无关。我在文档中看到提供了一个名为 'get_value()' 的函数,但是,这似乎只能在 CpoStepFunctions 上调用,其中 stepheight 不能由决策变量定义。是否有可能在特定时间评估此类累积函数?
亲切的问候, 碧玉
The max/min-capacity boundaries also vary over time, so i figured i'd model these with cumul functions as well (summation of step() functions on specified times).
对于最小-最大容量配置文件,您应该使用一些 always_in 约束。它们的形式是:
always_in(F, StartTime, EndTime, LevelMin, LevelMax)
其中 F 是您的累积函数。
它说在(已知)时间window [StartTime,EndTime),函数的级别必须始终在LevelMin(当然可以为0)和LevelMax之间。所以你可以 post 每次这样的约束之一 - window 其中 LevelMin/LevelMax 是相同的。
Is there a possibility to evaluate such cumul functions at specific times?
没有直接的表达式来评估这种类型的值。通常的建模方法是使用辅助(技术)累积函数。
设:
F = sum([pulse(A[i],Q[i]) for i in …])
成为您的原始累积函数(您 post 最小和最大水平)。
如果想在某个时刻t_j(j=0,1,2,…,n-1)得到F的水平,可以创建一些固定区间变量TIME[j](开始=t_i, 结束=t_i+1).
然后您将创建一个技术累积函数:
G = F - sum([pulse(TIME[j],0,M) for j in range(n)])
其中M是一个大数(大于F的最大级别)。
思路是,如果你post在区间TIME[j]上约束G=0,那么必然地,TIME[j]对G的贡献高度等于F 在时间 [j]。所以你添加约束:
[ always_in(G,TIME[j],0,0) for j in range(n) ]
F 在时间 t_j 的值由下式给出:
-height_at_start(TIME[j],G)