0

我正在尝试制定一个线性程序,该程序将分配不同数量的员工在不同的日子开始。从一天开始的每组员工将在一周内休假两天。但是,时间表未知。例如,从星期一开始的员工可以在一周中的任何两天休假。由于从第 (i) 天开始的人数是未知的,而且他们是否会休假也是未知的,所以我将得到两个决策变量的乘积 - 一个是整数 xi(从第 i 天开始的员工)和一个二进制变量 yij(从第 i 天开始的员工是否在第 j 天休息)。

我完成了配方,这里是:

决策变量 1:xi(从第 i 天开始的员工) 决策变量 2:yij(如果从第 i 天开始的员工在第 j 天工作,则为 1,如果从第 i 天开始的员工在第 j 天休息,则为 0)

目标函数:最小化员工总数-- sum (i in 1..7) xi

服从:xi*yij >=Requiredj(第 j 天可用工人的数量必须满足第 j 天的需求)

我正在尝试在 CPLEX 上对此进行编码,但我不知道如何使 xi*yij 线性化并编写代码....有人可以帮我吗?

谢谢你。

4

1 回答 1

0

如何使用 OPL 如何将决策变量乘以 CPLEX 中的布尔决策变量

// suppose we want b * x <= 7 

dvar int x in 2..10;
dvar boolean b;

dvar int bx;

maximize x;
subject to
{
  
// Linearization  
bx<=7;

 

2*b<=bx;
bx<=10*b;

bx<=x-2*(1-b);
bx>=x-10*(1-b);

// if we use CP we could write directly
// b*x<=7

// or rely on logical constraints within CPLEX
// (b==1) => (bx==x);
// (b==0) => (bx==0);
}
于 2021-11-06T18:21:04.160 回答