任务含有时间窗与资源含有上下班时间的时间冲突约束构建思路
任务信息
符号 | 含义 |
---|---|
i , ∀ i ∈ N i, \forall i\in N i,∀i∈N | 任务编号 |
S T i ST_i STi | 任务 i i i最早开始时刻 |
E T i ET_i ETi | 任务 i i i最晚结束时刻 |
W i W_i Wi | 任务 i i i工作时长 |
资源信息
符号 | 含义 |
---|---|
j , ∀ j ∈ R j, \forall j\in R j,∀j∈R | 资源编号 |
U j U_j Uj | 资源 j j j的上班开始时间 |
D j D_j Dj | 资源 j j j的开始下班时间 |
变量:
x i j x_{ij} xij:01变量。1表示资源 j j j被指派给任务 i i i,0表示其他;
t i t_i ti:整数变量。任务 i i i的实际开始时刻。
约束描述
- 当任务i的实际开始时刻小于资源j的上班开始时间时,任务i不能被分配给资源j
- 当任务i的实际开始时刻大于资源j的上班开始时间时,任务i不能被分配给资源j
也就是
i f : t i ≤ U j , t h e n x i j = 0 e l s e : x i j = 0 o r 1 if: \ t_i \le U_j \ , \ then \ \ x_{ij} = 0 \\ else: \ \ x_{ij} = 0 \ or \ 1 if: ti≤Uj , then xij=0else: xij=0 or 1i f : t i ≥ D j , t h e n x i j = 0 e l s e : x i j = 0 o r 1 if: \ t_i \ge D_j \ , \ then \ \ x_{ij}=0 \\ else: \ \ x_{ij} = 0 \ or \ 1 if: ti≥Dj , then xij=0else: xij=0 or 1
怎么用数学表达式构建这个约束呢?
联想到一条比较常用的约束:
∑
i
∈
N
x
i
j
≤
y
j
∗
M
,
∀
j
∈
R
\sum_{i\in N}x_{ij} \le y_j*M , \forall j\in R
i∈N∑xij≤yj∗M,∀j∈R
其中M是一个极大值,这条约束表示当
x
i
j
对
i
求
和
大
于
0
时
y
i
=
1
x_{ij}对i求和大于0时y_i=1
xij对i求和大于0时yi=1,当
x
i
j
对
i
求
和
等
于
0
时
y
i
=
{
0
,
1
}
x_{ij}对i求和等于0时y_i=\{0,1\}
xij对i求和等于0时yi={0,1}。可以看到这条约束与我们的需求十分相似。不同的是这条约束满足条件时
y
i
=
1
y_i=1
yi=1,我们的是等于0,既然这样我们只需要引入一个辅助变量使得我们满足条件时也为0就好啦。
约束构建
变量:
x i j x_{ij} xij:01变量。1表示资源 j j j被指派给任务 i i i,0表示其他;
y i j y_{ij} yij:01变量。1表示资源 j j j不被指派给任务 i i i,0表示其他;
t i t_i ti:整数变量。任务 i i i的实际开始时刻。
约束:
x
i
j
+
y
i
j
=
1
,
∀
i
∈
N
,
j
∈
R
x_{ij} + y_{ij} = 1 , \forall i\in N,j\in R
xij+yij=1,∀i∈N,j∈R
U j − t i ≤ y i j ∗ M , ∀ i ∈ N , j ∈ R U_j - t_i \le y_{ij}*M , \forall i\in N,j\in R Uj−ti≤yij∗M,∀i∈N,j∈R
t i − D j ≤ y i j ∗ M , ∀ i ∈ N , j ∈ R t_i - D_j \le y_{ij}*M,\forall i\in N,j\in R ti−Dj≤yij∗M,∀i∈N,j∈R
以上就是最终的约束表达式,希望这篇文章对你有帮助。