# 智能机器维修分配系统 **Repository Path**: qi-zuilan/machine-maintenance-allocation ## Basic Information - **Project Name**: 智能机器维修分配系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-06 - **Last Updated**: 2025-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 机器维修智能分配系统 ## 项目概述 本项目是一个基于Python实现的智能机器维修分配系统。系统旨在模拟一个工厂或数据中心的环境,当机器发生故障时,能够根据预设的规则或利用大型语言模型(LLM)的决策能力,从一组维修员工中分配合适的人员进行维修,以期达到最高的维修效率和最低的宕机时间。 ## 主要特性 - **多种分配策略**: - **传统规则化策略**: 基于预定义的规则(如时间阈值、下次故障时间预测)进行员工分配。 - **LLM智能决策**: 集成通义千问(Qwen)大型语言模型,通过自然语言描述的规则进行更智能、更灵活的员工分配。 - **异步任务处理**: 使用消息队列(MQ)来管理维修任务的生命周期,如维修完成后的状态更新、等待队列的处理等,实现了非阻塞的异步操作。 - **状态管理**: 实时跟踪和管理每位员工的可用状态(空闲/忙碌)。 - **多种运行模式**: - **演示模式**: 提供单机器维修、多机器维修等多种场景的命令行演示。 - **服务模式 (待启用)**: 可作为后台服务持续运行,通过命令行接收实时维修请求。 - **全面测试**: 内置测试套件,用于验证系统在不同负载下的稳定性和正确性。 - **可配置性**: 关键参数(如API密钥)可通过配置文件进行管理。 ## 如何运行 1. **安装依赖**: ```bash pip install -r requirements.txt ``` *(注意: `requirements.txt` 文件需要您根据 `imports` 手动创建)* 2. **配置API Key**: 在 `config.py` 文件中填入您的DashScope API密钥: ```python DASHSCOPE_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx" ``` 3. **启动主程序**: ```bash python main.py ``` 4. **选择运行模式**: 程序启动后,会提示您选择运行模式: - `1. 单机器维修演示 (传统逻辑)` - `2. 单机器维修演示 (LLM决策)` - `3. 多机器维修演示` - `4. 全面测试` - `5. 退出` 输入对应的数字并按回车即可进入相应模式。 ## 模块说明 - **`main.py`**: 项目主入口,负责启动程序和用户交互。 - **`repair_service.py`**: 核心模块,实现了维修任务的分配逻辑,包括传统规则和LLM决策两种方式。 - **`employee_manager.py`**: 员工管理模块,负责维护和更新所有员工的状态。 - **`queue_manager.py`**: 消息队列管理模块,用于处理异步的维修任务和状态更新。 - **`generate_data.py`**: 数据生成模块,用于模拟生成维修时间、下次故障时间等测试数据。 - **`stats_manager.py`**: 统计模块,用于记录系统运行过程中的各项指标(如总维修次数)。 - **`utils.py`**: 工具函数模块,提供打印、格式化输出等辅助功能。 - **`config.py`**: 配置文件,用于存储API密钥等敏感信息。 - **`test_comprehensive.py`**: 全面测试模块,提供对系统功能的综合性测试。 ## 依赖 - `langchain` - `langchain_community` - `dashscope` 请确保在运行前已安装所有必要的库。 ## 业务核心 三个队列 ### 维修完成优先队列:按完成时间排序 repair_completion_queue = PriorityQueue() 一个任务,维修200秒,则在这个队列里待200秒 待完之后,将机器(高铁)扔到机器故障队列里,等到4000秒后再次被调用 空出来的人力师傅去对接waiting_queue ### 机器故障队列:处理机器故障事件(改为优先队列) machine_failure_queue = PriorityQueue() 一个任务,在里面待了4000秒后,被取出,执行assign_single_repair,进行单次分配。如果无人力,则放入waiting_queue ### 等待队列:存储无法立即分配的维修任务 waiting_queue = Queue() 已经坏了,但是没人修