# EVA 值班排班工具使用手册 - v1.1.0
## 前言
这是浙江大学学生 E 志者协会“排班工具软件”的使用手册,将简要地介绍该软件的使用方法和注意事项。请注意,这是面向使用者而非开发者的手册,如果想了解该工具的开发流程和所使用的技术,请移步至[此仓库](https://git.zjueva.net/happywind/EVA_duty_arrange_tool)的说明手册。
## 软件运行环境&基本情况
- 本软件只能在 windows 系统上运行。
- 本软件在部分版本的 win10 和 win11 系统上均测试过,能够正常运行。但是不排除可能出现缺少相关 dll 文件而无法运行的情况,如果出现请联系开发者解决。
- 本软件将排班问题建模为组合优化问题,以“尽可能让各个班次的人数平均”作为优化目标。在指定的限制条件下,若有解,则得到的一定是最优解。
## 软件使用方法
双击运行可执行文件,会看到如下软件界面:
进行以下三个步骤:
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”的文件,以作为正确输入格式的参考。**
**本软件可以自动处理同一名同学多次填写问卷的情况**,只要保证多次填写中“姓名”保持一致即可,软件将会自动选择最后一次填写的结果作为最终意愿。由于“姓名”是每位同学的唯一标识符,如果出现了某位同学“姓名”填错的情况,需要手动删除该姓名的记录。
如果出现了**两位同学撞名的情况**,需要在填表时“姓名”后加上后缀以作区分,比如“王五1”和“王五2”,否则就会当作一个人来看待。
2. 输入想要的限制条件。(**若勾选“自动模式”则跳过这一步**)
本软件是在“限制条件必须满足”的条件下,以“每班次人数尽可能平均”作为最终目的来求解的。设置的限制条件太紧的话,最后可能导致无解(比如要求每班有4人,但实际上有一班选的人数就只有3人),这时候就需要手动宽松下限制参数。
本软件提供了自动模式来帮你尝试不同的参数并选择一个局部最优解。在自动模式下,用户无法自主设置参数。
3. 开始排班
点击“开始排班!”按钮以开始排班,输出结果会以 excel 表格的形式输出,输出的文件名称是“result_<当前时间戳>.xlsx”
**在输出结果中,组长会被标黄。**