在大型综合医院,手术室是资源最紧张、时间最宝贵的核心业务单元。一台手术结束到下一台开始之间的「连台间隔」,往往不是由医生决定,而是被消毒包周转慢、护士排班冲突、麻醉师调度不及时、器械包数量不足等多重现实约束反复挤压的结果。传统人工排程依赖经验与Excel表格,难以兼顾数十台手术、多间手术室、十几类资源间的动态耦合关系,导致手术室日均利用率偏低、加班频发、急诊响应滞后。为应对这一典型临床运营痛点,手术室连台排程优化系统(OR Schedule Optimizer) 应运而生,它不是又一个可视化看板,而是一套基于严谨数学建模与工业级求解能力的可落地、可验证、可集成的开源医疗软件。
项目概述:用约束规划解决真实手术调度难题
该项目是一个端到端的手术室智能排程工具,核心目标明确:在保障患者安全与医护合规的前提下,最小化手术室空闲时间、最大化资源协同效率、确保高优先级手术准时启动。其设计逻辑直指临床一线瓶颈:
将手术室、护士、麻醉师、器械包等实体资源全部转化为可量化的约束条件 利用 Google 开源的 OR-Tools CP-SAT 求解器 进行全局最优搜索,而非启发式规则拼凑 输出结果不仅包含排程表,还同步生成护士站大屏所需结构化数据、资源利用率分析报告、冲突预警清单
整个系统采用 Python + TypeScript 双栈架构,既保证核心算法层的稳定性与可调试性,又通过 Web 界面提供直观交互体验。所有功能模块均围绕「数据驱动排程」展开,从 CSV/JSON 数据加载、多维约束建模、求解计算,到 HTML 甘特图渲染、JSON 大屏推送、Excel 报告导出,形成完整闭环。
技术亮点:不只是调用求解器,更是面向医疗场景的工程化实现
该项目的技术价值,远超“用 OR-Tools 做了个排程 demo”。它在算法应用、系统架构与临床适配三方面展现出扎实的工程能力。
深度建模真实医疗约束
系统并非简单将手术时长相加,而是对医院运行中关键制约因素进行了精细化建模: - 消毒包循环时间:精确计算「手术完成→器械回收→消毒→运输→再次可用」全链路耗时,支持 sterilization_duration 与 transport_time 分离配置- 医护连续工作限制:护士 max_continuous_hours 与 rest_interval_minutes、麻醉师按周可用日 available_days,均作为硬约束参与求解- 多目标协同优化:支持按需加权组合「最小化总排程时长」「最大化资源利用率」「最小化医护加班时间」「最高优先级手术零延误」等目标
分层清晰、职责分明的架构设计
技术架构采用经典分层模式,各模块边界清晰、低耦合: - 用户交互层:提供 Python CLI(适合运维批量调度)、TypeScript CLI(支持彩色交互与 JSON 流式输出)、Web 服务(HTTP API + 甘特图页面)三种接入方式- 核心求解引擎层:constraint_solver.py 封装 CP-SAT 模型构建逻辑,data_loader.py 统一抽象 CSV/JSON 数据源,屏蔽底层格式差异- 输出层:甘特图渲染器、大屏 JSON 生成器、利用率分析器、冲突检测器、历史对比分析器等模块并行输出,满足不同角色需求
面向生产环境的健壮性设计
项目充分考虑医院信息科实际部署场景: - 完备的数据校验机制:自动检查必填字段缺失、时间格式错误、ID 引用失效、数值越界等常见问题,并给出明确修复提示- 分级冲突预警体系:区分「硬冲突(无法求解)」与「软警告(可能影响质量)」,如器械包数量不足触发红色高亮,而某手术 late_start 接近当前时间仅作橙色提示- 敏感性与回溯分析能力:内置 sensitivity_analyzer.py 评估关键资源变动影响;historical_analyzer.py 支持导入历史排程进行效果对比,为持续优化提供依据
应用场景:可用于提升手术中心运营效率的关键环节
本系统并非通用排程平台,而是深度聚焦于中国医院手术室日常管理的具体场景,适用于以下典型需求:
- 日间手术排程优化
在固定手术室数量与医护排班前提下,提升单日手术台次,缩短患者平均等待时间 - 急诊绿色通道保障
当突发急诊手术插入时,系统可自动重排后续非急诊手术,确保「1级优先级」手术即刻启动 - 手术室资源效能评估
通过 utilization_report.txt量化各手术室、护士组、麻醉师、器械包的使用率与空闲分布,识别资源瓶颈 - 护士站数字化升级
直接输出标准 JSON 格式的大屏数据,无缝对接现有医院大屏系统,实时展示「当前手术」「待上台手术」「资源冲突预警」 - 排程策略沙盒测试
利用 CLI 工具快速尝试不同权重配置(如侧重利用率 vs 侧重准时率),辅助管理者制定排程KPI
使用指南:三步上手,从本地运行到集成部署
项目开箱即用,无需复杂配置即可体验核心能力。以下是推荐的入门路径:
第一步:环境准备与依赖安装
# 安装 Python 依赖(需 Python 3.8+)pip install -r requirements.txt# 安装 Node.js 依赖(需 Node.js 16+)npm install第二步:运行示例排程(CLI 模式)
# 使用内置示例数据,生成排程结果并输出至 ./output/python -m src.cli --input data/sample_surgeries.csv# 同时生成交互式甘特图 HTML 文件python -m src.cli --input data/sample_surgeries.csv --visualize# 指定更长求解时间以获得更优解(默认60秒)python -m src.cli --input data/sample_surgeries.csv --timeout 120第三步:启动 Web 服务查看可视化效果
# 编译 TypeScript 并启动 Web 服务器npm run buildnpm run start# 访问 http://localhost:3000 查看甘特图# 调用 API 获取结构化数据curl http://localhost:3000/api/schedulecurl http://localhost:3000/api/dashboard进阶集成建议
- 对接医院HIS系统
通过自定义 --nurses、--anesthesiologists等参数,加载医院现有台账 JSON,避免数据重复维护 - 嵌入大屏系统
直接读取 dashboard_output.json,或调用/api/dashboard接口,按需解析upcoming_surgeries与resource_conflicts字段 - 自动化调度任务
在 Linux 系统中配置 crontab,每日凌晨定时执行 CLI 命令生成次日排程,并推送至指定目录
总结:让手术室运转更高效,是技术该有的温度
手术室连台排程优化系统不是一个炫技的算法玩具,它把约束规划(CP)这一前沿运筹学方法,真正下沉到了消毒包的分钟级周转、护士的连续工作时限、麻醉师的周排班颗粒度等具体细节中。项目代码结构清晰、文档详实、数据格式开放、CLI 工具友好,既满足开发者二次开发需求,也便于医院信息科技术人员快速部署验证。它不承诺替代医生决策,而是成为医护团队手中一把精准的「手术室运营尺子」,衡量资源是否被充分利用,预警潜在调度风险,释放更多时间回归临床本质。
项目当前免费开源,若您对项目有疑问、使用上的困惑或想深入交流,欢迎私信我们,或加入社群讨论。
项目地址:https://github.com/nexorin9/or-schedule-optimizer
夜雨聆风