101 lines
5.6 KiB
Markdown
101 lines
5.6 KiB
Markdown
# EVA 值班排班工具使用手册 - v2.0.0
|
||
|
||
## 前言
|
||
这是浙江大学学生E志者协会“排班工具软件”的使用手册,将简要地介绍该软件的使用方法和注意事项。请注意,这是面向使用者而非开发者的手册,如果想了解该工具的开发流程和所使用的技术,请移步至[此仓库](https://git.zjueva.net/happywind/EVA_duty_arrange_tool)的说明手册。
|
||
|
||
## 软件运行环境 & 基本情况
|
||
- 本软件只能在 Windows 系统上运行。
|
||
- 本软件在部分版本的 Win10 和 Win11 系统上均测试过,能够正常运行。但是不排除可能出现缺少相关 dll 文件而无法运行的情况,如果出现请联系开发者解决。
|
||
- 本软件将排班问题建模为**多目标组合优化问题**,使用 Google OR-Tools 的 SCIP 求解器求解。
|
||
- 优化目标包括:
|
||
1. 各班次人数尽可能平均
|
||
2. 每班技术部老人数量接近期望值(3人)
|
||
3. 每班技术部小朋友数量接近期望值(4人)
|
||
4. 每班人资部小朋友数量接近期望值(1人)
|
||
5. 每班各部门人数尽可能均衡
|
||
- 在指定的限制条件下,若有解,则得到的一定是**全局最优解**。
|
||
|
||
## 软件使用方法
|
||
|
||
双击运行可执行文件,会看到如下软件界面:
|
||
|
||
<div style="text-align: center;">
|
||
<img src="./pics/screen.jpg" style="width:50%;">
|
||
</div>
|
||
|
||
进行以下三个步骤:
|
||
|
||
1. 选择待输入的问卷星结果 Excel 表格。对于选择的 Excel 表格,有以下**格式要求**:
|
||
- 第 1 行,即表头的名称不会影响软件运行,但需要保证每一列的数据的格式和含义正确
|
||
- 第 1 列为序号,不会用到,但需要有
|
||
- 第 2 列为提交答卷时间,格式为 "year/month/day hour:min:sec"
|
||
- 第 3 列为填表所用时间,不会用到,但需要有
|
||
- 第 4 列为来源,不会用到,但需要有
|
||
- 第 5 列为来源详情,不会用到,但需要有
|
||
- 第 6 列为 IP,不会用到,但需要有
|
||
- 第 7 列为姓名,这是每一位同学的唯一标识
|
||
- 第 8 列为部门序号,用一个数字表示,映射关系如下:
|
||
```python
|
||
index_to_departments = { # 部门编号和部门名称的对应关系
|
||
1: "电脑部",
|
||
2: "电器部",
|
||
3: "人资部",
|
||
4: "财外部",
|
||
5: "文宣部"
|
||
}
|
||
```
|
||
- 第 9 列标识老人还是小朋友,用一个数字表示,映射关系如下:
|
||
```python
|
||
index_to_type = { # 老人/小朋友和对应的编号
|
||
1: "老人",
|
||
2: "小朋友"
|
||
}
|
||
```
|
||
- 第 10 ~ 29 列,表示对于每个班次的意愿(1 代表有时间,0 代表没时间)。因为从周一第一班到周日第二班一共有 20 班,所以总共有 20 列。
|
||
- 第 30 列,表示愿意排几班,用一个数字表示。
|
||
|
||
**我们提供了一个名为“问卷星结果_样例输入.xlsx”的文件,以作为正确输入格式的参考,以及一个名为“问卷星结果_较极端案例.xlsx”的文件,以作为程序运行的测试。**
|
||
|
||
**本软件可以自动处理同一名同学多次填写问卷的情况**,只要保证多次填写中“姓名”保持一致即可,软件将会自动选择最后一次填写的结果作为最终意愿。由于“姓名”是每位同学的唯一标识符,如果出现了某位同学“姓名”填错的情况,需要手动删除该姓名的记录。
|
||
|
||
如果出现了**两位同学撞名的情况**,需要在填表时“姓名”后加上后缀以作区分,比如“王五1”和“王五2”,否则就会当作一个人来看待。
|
||
|
||
2. 设置优化参数
|
||
|
||
软件界面的 Step 2 部分包含两类参数:
|
||
|
||
### 2.1 权重参数(始终可设置)
|
||
|
||
软件提供了 5 个优化目标的权重设置,用于调整各个目标的重要程度:
|
||
- **目标 1 权重**:每班人数平均程度(默认 1.0)
|
||
- **目标 2 权重**:每班技术部老人数量(默认 1.0)
|
||
- **目标 3 权重**:每班技术部小朋友数量(默认 1.0)
|
||
- **目标 4 权重**:每班人资部小朋友数量(默认 0.5)
|
||
- **目标 5 权重**:每班部门平均程度(默认 0.5)
|
||
|
||
权重值范围建议为 0.0 - 5.0,权重越大表示该目标越重要。所有权重参数均已归一化处理。
|
||
|
||
### 2.2 约束条件(自动/手动模式)
|
||
|
||
**自动调参模式(推荐):**
|
||
- 勾选"自动调参模式"复选框
|
||
- 软件会自动尝试不同的约束参数组合,实时显示尝试过程
|
||
- 从严格到宽松逐步调整参数,找到第一个可行解
|
||
- 无需手动设置约束条件,约束输入框会被禁用
|
||
|
||
**手动模式:**
|
||
- 取消勾选"自动调参模式"
|
||
- 可手动设置以下约束条件:
|
||
- **每班次人数**:最少和最多人数(建议 5-8 人)
|
||
- **每班次电脑或电器的老人数**:技术部老人数量范围(建议最多 2 人)
|
||
- **每班次老人数**:所有老人数量范围(建议最少 1 人)
|
||
- **每班次小朋友数**:所有小朋友数量范围(建议最少 2 人)
|
||
- 留空表示该项无限制
|
||
- **注意**:约束条件设置过严可能导致无解,需要适当放宽限制
|
||
|
||
3. 开始排班并查看进度
|
||
|
||
点击"开始排班!"按钮开始计算:
|
||
- 输出结果以 Excel 表格形式保存,文件名为 `result_<当前时间戳>.xlsx`
|
||
- **在输出结果中,组长会被标黄**
|