一 (1)问题的提出 某公司的营业时间是上午8点到21点,服务人员中途需要1小时的吃饭和休息时间。每人的工作时间为8小时,上午8点到17点的工作人员月工资为800元,中午12点到21点工作的人员的工资为900元。为保证营业时间内部有人值班,公司安排四个班次,其班次休息私见安排都有所安排。问如何安排服务人员既满足需求又使公司所付工资总数最少。怎么用lingo18软件求解代码
时间: 2024-02-11 14:09:13 浏览: 30
首先,我们需要定义一些变量:
x[i][j]: 表示第i个班次中,第j个服务人员是否工作,如果工作则为1,否则为0。
y[i]: 表示第i个班次是否有服务人员在工作,如果有则为1,否则为0。
其中,i ∈ {1,2,3,4},j ∈ {1,2,...,n},n为服务人员总数。
我们需要最小化公司所付工资总数,即:
minimize z = 800 * sum(x[i][j] * (i<=2) + 900 * sum(x[i][j] * (i>2)), i=1..4, j=1..n)
同时,我们需要满足以下约束条件:
1. 每个服务人员每天只能工作8个小时:
sum(x[i][j], i=1..4) = 2, j=1..n
2. 每个班次中至少需要有一个服务人员在工作:
sum(x[i][j], j=1..n) >= y[i], i=1..4
3. 每个班次中服务人员的数量不超过规定的最大值:
sum(x[i][j], j=1..n) <= 5, i=1..4
4. 服务人员的休息时间需要被考虑:
x[i][j] = 0, i=1..4, j=1..n,当i=2且t=5时,其中t表示班次中的时间,即从8点开始算的小时数。
5. 每个服务人员只能在一个班次中工作:
sum(x[i][j], i=1..4) <= 1, j=1..n
将以上约束条件和目标函数转化为lingo18的代码如下:
```
model:
n = 20
x(i,j) binary
y(i) binary
min = 800*sum(x(i,j)*(i<=2)+900*sum(x(i,j)*(i>2)), i=1..4, j=1..n)
con1(j) = sum(x(i,j), i=1..4) = 2
con2(i) = sum(x(i,j), j=1..n) >= y(i)
con3(i) = sum(x(i,j), j=1..n) <= 5
con4(j) = x(2,j) = 0, j=1..n, t=5
con5(j) = sum(x(i,j), i=1..4) <= 1
solve
display x, y
end
```
其中,n=20表示有20个服务人员。运行结果会显示出每个班次中每个服务人员是否工作,以及每个班次是否有服务人员在工作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)