返回 Skill 列表
extension
分类: 开发与工程无需 API Key

conference-scheduler

使用Google OR-Tools CP-SAT求解器生成优化的会议日程。当用户需要根据CSV数据创建会议日程,并且存在如演讲者冲突、主题分布、房间分配、教育流程以及演讲者可用性等约束条件时,请使用此工具。支持单日和多日会议。处理来自Google Sheets CSV导出的输入,包括演讲(ID、标题、摘要、主题、级别、演讲者、可用性)和日程时间段(日期、时间、房间)。输出CSV和Markdown格式的日程表。

person作者: jakexiaohubgithub

Conference Scheduler Skill

Generate optimized conference schedules using Google OR-Tools CP-SAT constraint solver. Supports single-day and multi-day conferences.

Quick Start

pip install ortools --break-system-packages
python assets/scheduler.py schedule.csv talks.csv output.csv --time-limit 30

Input Formats

Single-Day Schedule CSV

"from hour";"to hour";"session type";"room name"
"10:35";"11:20";Conference;Room 2
"10:35";"11:20";Conference;Room 8
"11:30";"12:15";Conference;Room 3

Multi-Day Schedule CSV

Add a "day" column as the first column:

"day";"from hour";"to hour";"session type";"room name"
"Wednesday";"09:30";"10:15";Conference;Room 1
"Wednesday";"10:35";"11:20";Conference;Room 2
"Thursday";"09:30";"10:15";Conference;Room 1

Day values can be: day names (Monday, Tuesday), dates (2024-03-15), or labels (Day 1, Day 2).

Talks CSV

"Talk ID";"Talk Title";"Audience Level";"Talk Summary";"Track Name";"Speaker Availability days";"Available from";"Available to";"Speaker names"
1411;Unit Test Your Architecture;BEGINNER;ArchUnit is...;Development Practices;Wednesday,Thursday;;;Roland Weisleder
3872;Full-stack development;INTERMEDIATE;Java developers...;UI & UX;;;;Simon Martinelli

Speaker Availability formats (column 6):

  • Day names: Wednesday,Thursday
  • Day numbers: 1,2,3
  • Empty = available all days

Constraints

Hard Constraints (Must satisfy)

| Constraint | Description | |------------|-------------| | Speaker conflict | Same speaker can't be in two rooms at same time | | Room conflict | Two talks can't be in same room at same time | | Track conflict | Same track can't have talks in different rooms simultaneously | | Speaker availability | Speaker must be available on scheduled day |

Soft Constraints (Optimization)

| Constraint | Description | |------------|-------------| | Educational flow | Beginner → Intermediate → Advanced within track |

Output

CSV Output

Single-day:

"Talk ID";"From";"To";"Room";"Title";"Speakers";"Level";"Track"

Multi-day:

"Day";"Talk ID";"From";"To";"Room";"Title";"Speakers";"Level";"Track"

Markdown Output

Generated alongside CSV with .md extension, includes tables grouped by timeslot (and day for multi-day).

Programmatic Usage

from pathlib import Path
from scheduler import (
    read_schedule_csv, read_talks_csv, solve_schedule,
    write_csv_output, write_markdown_output, print_schedule
)

# Read input
timeslots, rooms, day_names = read_schedule_csv(Path("schedule.csv"))
talks = read_talks_csv(Path("talks.csv"), day_names)

# Solve (30 second time limit)
talks, status = solve_schedule(timeslots, rooms, talks, time_limit_seconds=30)

# Output
print_schedule(talks, multi_day=len(day_names) > 1)
write_csv_output(talks, Path("output.csv"), multi_day=len(day_names) > 1)

Time Limits

  • Small conferences (< 30 talks): 10-30 seconds
  • Medium conferences (30-100 talks): 30-120 seconds
  • Large conferences (100+ talks): 2-10 minutes

Troubleshooting

INFEASIBLE status

The constraints cannot all be satisfied. Check for:

  • More talks than available slots
  • Speaker with more talks than available timeslots
  • Too many talks in same track for parallel slots

Missing ortools

pip install ortools --break-system-packages