EVA_duty_arrange_tool/使用手册.md

117 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# EVA 值班排班工具使用手册 - v2.1.0
## 前言
这是浙江大学学生E志者协会“排班工具软件”的使用手册将简要地介绍该软件的使用方法和注意事项。请注意这是面向使用者而非开发者的手册如果想了解该工具的开发流程和所使用的技术请移步至[此仓库](https://git.zjueva.net/happywind/EVA_duty_arrange_tool)的说明手册。
## 软件运行环境 & 基本情况
- 本软件只能在 Windows 系统上运行。
- 本软件将排班问题建模为**多目标组合优化问题**,使用 Google OR-Tools 的 SCIP 求解器求解。
- 优化目标包括:
1. 各班次人数尽可能平均
2. 每班技术部老人数量接近期望值3人
3. 每班技术部小朋友数量接近期望值4人
4. 每班人资部小朋友数量接近期望值1人
5. 每班各部门人数尽可能均衡
- 在指定的限制条件下,若有解,则得到的一定是**全局最优解**。
## 软件使用方法
双击运行可执行文件,会看到如下软件界面:
<div style="text-align: center;">
<img src="./pics/screen.png" style="width:45%;">
</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”和”问卷星结果_缺班样例.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`
- **在输出结果中,组长会被标黄**
- **无人值班的班次在输出结果中对应格为空**
## 异常数据处理
软件在排班前会自动对输入数据进行两项检查,遇到异常时会弹出对话框提示用户选择处理方式。
### 情况一:某班次无人选择
若某个(或某几个)班次没有任何同学选择,软件会弹出警告,列出所有无人选择的班次名称,并提供两个选项:
- **确定**:将这些班次视为无人值班,继续进行其余班次的排班。输出结果中这些班次对应格为空。
- **取消**:放弃本次排班,返回主界面。
### 情况二:某同学的可用班次数少于期望值班次数
若某位同学填写的期望值班次数多于其实际选择的可用班次数(例如希望值 2 班但只选了 1 个有空的时间段),软件会弹出警告,列出受影响的同学姓名及具体数据,并提供两个选项:
- **确定**:自动将这些同学的期望值班次数调整为其实际可用班次数,继续排班。调整详情会在日志中显示。
- **取消**:放弃本次排班,返回主界面,以便手动核查问卷数据。