AI驱动的项目管理与协作优化:智能化团队效率提升系统

摘要

项目管理是软件开发成功的关键因素,传统的项目管理往往依赖人工经验和静态工具。本文将探讨如何利用AI技术优化项目管理与团队协作,从智能任务分配到进度预测,从风险识别到资源优化,全面提升团队效率和项目成功率。

目录

  1. AI项目管理概述
  2. 智能任务分配与调度
  3. 项目进度预测与监控
  4. 团队协作优化
  5. 风险识别与预警
  6. 资源配置优化
  7. 绩效分析与改进
  8. 智能报告生成
  9. 实战案例分析
  10. 最佳实践与总结

AI项目管理概述

智能项目管理系统架构

AI核心模块
机器学习模型
自然语言处理
预测算法
优化算法
项目数据输入
数据分析引擎
任务智能分配
进度预测模型
风险识别系统
协作优化器
资源调度器
绩效分析器
报告生成器
任务执行监控
团队效率分析
智能决策支持

核心项目管理框架

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from typing import Dict, List, Any, Optional, Tuple, Union
from dataclasses import dataclass, asdict, field
from abc import ABC, abstractmethod
from enum import Enum
import json
import time
from collections import defaultdict
import warnings
warnings.filterwarnings('ignore')

class TaskStatus(Enum):
    """任务状态枚举"""
    TODO = "todo"
    IN_PROGRESS = "in_progress"
    REVIEW = "review"
    DONE = "done"
    BLOCKED = "blocked"
    CANCELLED = "cancelled"

class Priority(Enum):
    """优先级枚举"""
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"

class SkillLevel(Enum):
    """技能水平枚举"""
    BEGINNER = "beginner"
    INTERMEDIATE = "intermediate"
    ADVANCED = "advanced"
    EXPERT = "expert"

@dataclass
class TeamMember:
    """团队成员数据结构"""
    id: str
    name: str
    role: str
    skills: Dict[str, SkillLevel]
    availability: float  # 0.0 - 1.0
    hourly_rate: float
    current_workload: float  # 0.0 - 1.0
    performance_score: float  # 0.0 - 1.0
    preferred_tasks: List[str]
    timezone: str
    experience_years: int

@dataclass
class Task:
    """任务数据结构"""
    id: str
    title: str
    description: str
    status: TaskStatus
    priority: Priority
    estimated_hours: float
    actual_hours: float
    required_skills: Dict[str, SkillLevel]
    dependencies: List[str]
    assigned_to: Optional[str]
    created_date: datetime
    due_date: datetime
    completed_date: Optional[datetime]
    complexity_score: float  # 0.0 - 1.0
    risk_level: float  # 0.0 - 1.0
    tags: List[str]

@dataclass
class Project:
    """项目数据结构"""
    id: str
    name: str
    description: str
    start_date: datetime
    end_date: datetime
    budget: float
    team_members: List[TeamMember]
    tasks: List[Task]
    milestones: List[Dict[str, Any]]
    status: str
    completion_percentage: float
    risk_factors: List[str]

class TaskAnalyzer:
    """任务分析器"""
    
    def __init__(self):
        self.complexity_factors = self._load_complexity_factors()
        self.skill_requirements = self._load_skill_requirements()
    
    def analyze_task_complexity(self, task: Task) -> float:
        """分析任务复杂度"""
        complexity_score = 0.0
        
        # 基于描述长度
        desc_complexity = min(len(task.description) / 500, 1.0) * 0.2
        complexity_score += desc_complexity
        
        # 基于技能要求
        skill_complexity = len(task.required_skills) / 5 * 0.3
        complexity_score += skill_complexity
        
        # 基于依赖关系
        dependency_complexity = len(task.dependencies) / 10 * 0.2
        complexity_score += dependency_complexity
        
        # 基于估算时间
        time_complexity = min(task.estimated_hours / 40, 1.0) * 0.3
        complexity_score += time_complexity
        
        return min(complexity_score, 1.0)
    
    def estimate_task_duration(self, task: Task, assignee: TeamMember) -> float:
        """估算任务持续时间"""
        base_hours = task.estimated_hours
        
        # 技能匹配度调整
        skill_factor = self._calculate_skill_match(task, assignee)
        
        # 经验调整
        experience_factor = min(assignee.experience_years / 10, 1.0)
        
        # 工作负载调整
        workload_factor = 1 + assignee.current_workload * 0.5
        
        # 复杂度调整
        complexity_factor = 1 + task.complexity_score * 0.3
        
        adjusted_hours = base_hours * complexity_factor * workload_factor / (skill_factor * experience_factor)
        
        return max(adjusted_hours, base_hours * 0.5)  # 最少为原估算的50%
    
    def _calculate_skill_match(self, task: Task, member: TeamMember) -> float:
        """计算技能匹配度"""
        if not task.required_skills:
            return 1.0
        
        total_match = 0.0
        skill_count = len(task.required_skills)
        
        for skill, required_level in task.required_skills.items():
            if skill in member.skills:
                member_level = member.skills[skill]
                level_values = {
                    SkillLevel.BEGINNER: 1,
                    SkillLevel.INTERMEDIATE: 2,
                    SkillLevel.ADVANCED: 3,
                    SkillLevel.EXPERT: 4
                }
                
                required_val = level_values[required_level]
                member_val = level_values[member_level]
                
                if member_val >= required_val:
                    match_score = 1.0 + (member_val - required_val) * 0.1
                else:
                    match_score = member_val / required_val * 0.8
                
                total_match += match_score
            else:
                total_match += 0.3  # 没有该技能的惩罚
        
        return total_match / skill_count
    
    def _load_complexity_factors(self) -> Dict[str, float]:
        """加载复杂度因子"""
        return {
            'ui_design': 0.6,
            'backend_api': 0.7,
            'database_design': 0.8,
            'integration': 0.9,
            'testing': 0.5,
            'documentation': 0.3,
            'research': 0.8,
            'optimization': 0.9
        }
    
    def _load_skill_requirements(self) -> Dict[str, Dict[str, SkillLevel]]:
        """加载技能要求映射"""
        return {
            'frontend': {
                'javascript': SkillLevel.INTERMEDIATE,
                'react': SkillLevel.INTERMEDIATE,
                'css': SkillLevel.INTERMEDIATE
            },
            'backend': {
                'python': SkillLevel.ADVANCED,
                'database': SkillLevel.INTERMEDIATE,
                'api_design': SkillLevel.ADVANCED
            },
            'devops': {
                'docker': SkillLevel.ADVANCED,
                'kubernetes': SkillLevel.INTERMEDIATE,
                'ci_cd': SkillLevel.ADVANCED
            }
        }

class IntelligentTaskAssigner:
    """智能任务分配器"""
    
    def __init__(self):
        self.analyzer = TaskAnalyzer()
        self.assignment_history = []
        self.performance_tracker = PerformanceTracker()
    
    def assign_tasks(self, tasks: List[Task], team_members: List[TeamMember]) -> Dict[str, List[str]]:
        """智能分配任务"""
        assignments = defaultdict(list)
        unassigned_tasks = []
        
        # 按优先级和依赖关系排序任务
        sorted_tasks = self._sort_tasks_by_priority(tasks)
        
        for task in sorted_tasks:
            best_assignee = self._find_best_assignee(task, team_members)
            
            if best_assignee:
                assignments[best_assignee.id].append(task.id)
                task.assigned_to = best_assignee.id
                
                # 更新成员工作负载
                estimated_duration = self.analyzer.estimate_task_duration(task, best_assignee)
                self._update_workload(best_assignee, estimated_duration)
            else:
                unassigned_tasks.append(task)
        
        # 记录分配历史
        self._record_assignment(assignments, unassigned_tasks)
        
        return dict(assignments)
    
    def _sort_tasks_by_priority(self, tasks: List[Task]) -> List[Task]:
        """按优先级和依赖关系排序任务"""
        priority_weights = {
            Priority.CRITICAL: 4,
            Priority.HIGH: 3,
            Priority.MEDIUM: 2,
            Priority.LOW: 1
        }
        
        # 构建依赖图
        dependency_graph = self._build_dependency_graph(tasks)
        
        # 拓扑排序
        sorted_by_deps = self._topological_sort(tasks, dependency_graph)
        
        # 在拓扑排序的基础上按优先级排序
        return sorted(sorted_by_deps, key=lambda t: (
            -priority_weights[t.priority],  # 优先级(降序)
            t.due_date,  # 截止日期(升序)
            -t.complexity_score  # 复杂度(降序)
        ))
    
    def _find_best_assignee(self, task: Task, team_members: List[TeamMember]) -> Optional[TeamMember]:
        """找到最佳任务分配对象"""
        candidates = []
        
        for member in team_members:
            if member.availability < 0.1:  # 可用性太低
                continue
            
            if member.current_workload > 0.9:  # 工作负载过高
                continue
            
            # 计算分配分数
            score = self._calculate_assignment_score(task, member)
            candidates.append((member, score))
        
        if not candidates:
            return None
        
        # 选择分数最高的候选人
        candidates.sort(key=lambda x: x[1], reverse=True)
        return candidates[0][0]
    
    def _calculate_assignment_score(self, task: Task, member: TeamMember) -> float:
        """计算任务分配分数"""
        score = 0.0
        
        # 技能匹配度 (40%)
        skill_match = self.analyzer._calculate_skill_match(task, member)
        score += skill_match * 0.4
        
        # 可用性 (20%)
        availability_score = member.availability
        score += availability_score * 0.2
        
        # 当前工作负载 (20%) - 负载越低分数越高
        workload_score = 1.0 - member.current_workload
        score += workload_score * 0.2
        
        # 历史绩效 (10%)
        performance_score = member.performance_score
        score += performance_score * 0.1
        
        # 任务偏好匹配 (10%)
        preference_score = self._calculate_preference_match(task, member)
        score += preference_score * 0.1
        
        return score
    
    def _calculate_preference_match(self, task: Task, member: TeamMember) -> float:
        """计算任务偏好匹配度"""
        if not member.preferred_tasks:
            return 0.5  # 中性分数
        
        task_tags = set(task.tags)
        preferred_tags = set(member.preferred_tasks)
        
        if not task_tags:
            return 0.5
        
        intersection = task_tags.intersection(preferred_tags)
        return len(intersection) / len(task_tags)
    
    def _build_dependency_graph(self, tasks: List[Task]) -> Dict[str, List[str]]:
        """构建任务依赖图"""
        graph = defaultdict(list)
        
        for task in tasks:
            for dep in task.dependencies:
                graph[dep].append(task.id)
        
        return dict(graph)
    
    def _topological_sort(self, tasks: List[Task], graph: Dict[str, List[str]]) -> List[Task]:
        """拓扑排序"""
        # 简化的拓扑排序实现
        task_dict = {task.id: task for task in tasks}
        in_degree = defaultdict(int)
        
        # 计算入度
        for task in tasks:
            for dep in task.dependencies:
                in_degree[task.id] += 1
        
        # 找到入度为0的任务
        queue = [task for task in tasks if in_degree[task.id] == 0]
        result = []
        
        while queue:
            current = queue.pop(0)
            result.append(current)
            
            # 更新依赖任务的入度
            for dependent_id in graph.get(current.id, []):
                in_degree[dependent_id] -= 1
                if in_degree[dependent_id] == 0:
                    queue.append(task_dict[dependent_id])
        
        return result
    
    def _update_workload(self, member: TeamMember, additional_hours: float):
        """更新成员工作负载"""
        # 假设每周工作40小时
        weekly_capacity = 40 * member.availability
        workload_increase = additional_hours / weekly_capacity
        member.current_workload = min(1.0, member.current_workload + workload_increase)
    
    def _record_assignment(self, assignments: Dict[str, List[str]], unassigned: List[Task]):
        """记录分配历史"""
        record = {
            'timestamp': datetime.now(),
            'assignments': assignments,
            'unassigned_count': len(unassigned),
            'total_tasks': sum(len(tasks) for tasks in assignments.values()) + len(unassigned)
        }
        self.assignment_history.append(record)

class ProgressPredictor:
    """进度预测器"""
    
    def __init__(self):
        self.historical_data = []
        self.velocity_tracker = VelocityTracker()
        self.risk_assessor = RiskAssessor()
    
    def predict_project_completion(self, project: Project) -> Dict[str, Any]:
        """预测项目完成情况"""
        
        # 计算当前进度
        current_progress = self._calculate_current_progress(project)
        
        # 预测剩余工作量
        remaining_work = self._estimate_remaining_work(project)
        
        # 计算团队速度
        team_velocity = self._calculate_team_velocity(project)
        
        # 预测完成日期
        predicted_completion = self._predict_completion_date(remaining_work, team_velocity)
        
        # 风险评估
        risks = self.risk_assessor.assess_project_risks(project)
        
        # 置信区间
        confidence_interval = self._calculate_confidence_interval(predicted_completion, risks)
        
        return {
            'current_progress': current_progress,
            'predicted_completion_date': predicted_completion,
            'confidence_interval': confidence_interval,
            'remaining_work_hours': remaining_work,
            'team_velocity': team_velocity,
            'risks': risks,
            'recommendations': self._generate_recommendations(project, predicted_completion)
        }
    
    def _calculate_current_progress(self, project: Project) -> float:
        """计算当前进度"""
        if not project.tasks:
            return 0.0
        
        total_estimated_hours = sum(task.estimated_hours for task in project.tasks)
        completed_hours = sum(task.actual_hours for task in project.tasks 
                            if task.status == TaskStatus.DONE)
        
        if total_estimated_hours == 0:
            return 0.0
        
        return completed_hours / total_estimated_hours
    
    def _estimate_remaining_work(self, project: Project) -> float:
        """估算剩余工作量"""
        remaining_hours = 0.0
        
        for task in project.tasks:
            if task.status in [TaskStatus.TODO, TaskStatus.IN_PROGRESS, TaskStatus.REVIEW]:
                if task.status == TaskStatus.IN_PROGRESS:
                    # 对于进行中的任务,估算剩余时间
                    progress_ratio = task.actual_hours / max(task.estimated_hours, 1)
                    remaining_hours += task.estimated_hours * (1 - progress_ratio)
                else:
                    remaining_hours += task.estimated_hours
        
        return remaining_hours
    
    def _calculate_team_velocity(self, project: Project) -> float:
        """计算团队速度(每周完成的工作小时数)"""
        completed_tasks = [task for task in project.tasks if task.status == TaskStatus.DONE]
        
        if not completed_tasks:
            # 如果没有完成的任务,基于团队能力估算
            total_capacity = sum(member.availability * 40 for member in project.team_members)
            return total_capacity * 0.8  # 假设80%的效率
        
        # 计算已完成任务的平均完成速度
        total_completed_hours = sum(task.actual_hours for task in completed_tasks)
        
        # 计算项目进行的周数
        project_start = project.start_date
        current_date = datetime.now()
        weeks_elapsed = max((current_date - project_start).days / 7, 1)
        
        return total_completed_hours / weeks_elapsed
    
    def _predict_completion_date(self, remaining_work: float, team_velocity: float) -> datetime:
        """预测完成日期"""
        if team_velocity <= 0:
            return datetime.now() + timedelta(weeks=52)  # 默认一年后
        
        weeks_needed = remaining_work / team_velocity
        return datetime.now() + timedelta(weeks=weeks_needed)
    
    def _calculate_confidence_interval(self, predicted_date: datetime, risks: List[Dict[str, Any]]) -> Dict[str, datetime]:
        """计算置信区间"""
        # 基于风险调整预测
        risk_factor = sum(risk['impact'] * risk['probability'] for risk in risks) / len(risks) if risks else 0.5
        
        # 计算变动范围(以周为单位)
        base_variance = 2  # 基础变动2周
        risk_variance = risk_factor * 4  # 风险增加的变动
        
        total_variance = base_variance + risk_variance
        
        return {
            'optimistic': predicted_date - timedelta(weeks=total_variance * 0.5),
            'pessimistic': predicted_date + timedelta(weeks=total_variance),
            'most_likely': predicted_date
        }
    
    def _generate_recommendations(self, project: Project, predicted_completion: datetime) -> List[str]:
        """生成改进建议"""
        recommendations = []
        
        # 检查是否会延期
        if predicted_completion > project.end_date:
            delay_days = (predicted_completion - project.end_date).days
            recommendations.append(f"项目预计延期 {delay_days} 天,建议采取措施加速进度")
        
        # 检查团队工作负载
        overloaded_members = [member for member in project.team_members 
                            if member.current_workload > 0.8]
        if overloaded_members:
            recommendations.append(f"有 {len(overloaded_members)} 名成员工作负载过高,建议重新分配任务")
        
        # 检查阻塞任务
        blocked_tasks = [task for task in project.tasks if task.status == TaskStatus.BLOCKED]
        if blocked_tasks:
            recommendations.append(f"有 {len(blocked_tasks)} 个任务被阻塞,需要优先解决")
        
        # 检查高风险任务
        high_risk_tasks = [task for task in project.tasks if task.risk_level > 0.7]
        if high_risk_tasks:
            recommendations.append(f"有 {len(high_risk_tasks)} 个高风险任务,建议加强监控")
        
        return recommendations

class VelocityTracker:
    """速度跟踪器"""
    
    def __init__(self):
        self.velocity_history = []
    
    def track_sprint_velocity(self, sprint_data: Dict[str, Any]) -> float:
        """跟踪冲刺速度"""
        completed_story_points = sprint_data.get('completed_story_points', 0)
        sprint_duration = sprint_data.get('duration_weeks', 2)
        
        velocity = completed_story_points / sprint_duration
        
        self.velocity_history.append({
            'sprint_id': sprint_data.get('sprint_id'),
            'velocity': velocity,
            'date': datetime.now()
        })
        
        return velocity
    
    def get_average_velocity(self, last_n_sprints: int = 3) -> float:
        """获取平均速度"""
        if not self.velocity_history:
            return 0.0
        
        recent_velocities = self.velocity_history[-last_n_sprints:]
        return sum(v['velocity'] for v in recent_velocities) / len(recent_velocities)

class RiskAssessor:
    """风险评估器"""
    
    def __init__(self):
        self.risk_patterns = self._load_risk_patterns()
    
    def assess_project_risks(self, project: Project) -> List[Dict[str, Any]]:
        """评估项目风险"""
        risks = []
        
        # 进度风险
        risks.extend(self._assess_schedule_risks(project))
        
        # 资源风险
        risks.extend(self._assess_resource_risks(project))
        
        # 技术风险
        risks.extend(self._assess_technical_risks(project))
        
        # 团队风险
        risks.extend(self._assess_team_risks(project))
        
        return risks
    
    def _assess_schedule_risks(self, project: Project) -> List[Dict[str, Any]]:
        """评估进度风险"""
        risks = []
        
        # 检查任务依赖链
        critical_path_length = self._calculate_critical_path_length(project.tasks)
        if critical_path_length > 0.8:  # 关键路径过长
            risks.append({
                'type': 'schedule',
                'description': '关键路径过长,可能导致进度延误',
                'probability': 0.7,
                'impact': 0.8,
                'mitigation': '并行化任务执行,增加资源投入'
            })
        
        # 检查任务估算准确性
        estimation_variance = self._calculate_estimation_variance(project.tasks)
        if estimation_variance > 0.5:
            risks.append({
                'type': 'schedule',
                'description': '任务估算偏差较大,可能影响进度预测',
                'probability': 0.6,
                'impact': 0.6,
                'mitigation': '改进估算方法,增加历史数据参考'
            })
        
        return risks
    
    def _assess_resource_risks(self, project: Project) -> List[Dict[str, Any]]:
        """评估资源风险"""
        risks = []
        
        # 检查关键人员依赖
        key_person_dependency = self._check_key_person_dependency(project)
        if key_person_dependency > 0.7:
            risks.append({
                'type': 'resource',
                'description': '过度依赖关键人员,存在单点故障风险',
                'probability': 0.5,
                'impact': 0.9,
                'mitigation': '知识分享,交叉培训,文档化关键流程'
            })
        
        # 检查技能缺口
        skill_gaps = self._identify_skill_gaps(project)
        if skill_gaps:
            risks.append({
                'type': 'resource',
                'description': f'存在技能缺口: {", ".join(skill_gaps)}',
                'probability': 0.8,
                'impact': 0.7,
                'mitigation': '培训现有团队成员或招聘新人'
            })
        
        return risks
    
    def _assess_technical_risks(self, project: Project) -> List[Dict[str, Any]]:
        """评估技术风险"""
        risks = []
        
        # 检查技术复杂度
        avg_complexity = sum(task.complexity_score for task in project.tasks) / len(project.tasks)
        if avg_complexity > 0.7:
            risks.append({
                'type': 'technical',
                'description': '项目技术复杂度较高',
                'probability': 0.6,
                'impact': 0.7,
                'mitigation': '增加技术调研时间,建立原型验证'
            })
        
        # 检查新技术使用
        new_tech_tasks = [task for task in project.tasks if 'new_technology' in task.tags]
        if len(new_tech_tasks) > len(project.tasks) * 0.3:
            risks.append({
                'type': 'technical',
                'description': '大量使用新技术,存在学习曲线风险',
                'probability': 0.7,
                'impact': 0.6,
                'mitigation': '提前进行技术培训和概念验证'
            })
        
        return risks
    
    def _assess_team_risks(self, project: Project) -> List[Dict[str, Any]]:
        """评估团队风险"""
        risks = []
        
        # 检查团队规模
        if len(project.team_members) > 10:
            risks.append({
                'type': 'team',
                'description': '团队规模较大,沟通协调复杂',
                'probability': 0.6,
                'impact': 0.5,
                'mitigation': '建立清晰的沟通机制和子团队结构'
            })
        
        # 检查团队经验
        avg_experience = sum(member.experience_years for member in project.team_members) / len(project.team_members)
        if avg_experience < 2:
            risks.append({
                'type': 'team',
                'description': '团队整体经验不足',
                'probability': 0.7,
                'impact': 0.6,
                'mitigation': '增加资深成员指导,加强代码审查'
            })
        
        return risks
    
    def _calculate_critical_path_length(self, tasks: List[Task]) -> float:
        """计算关键路径长度"""
        # 简化实现:返回最长依赖链的相对长度
        max_chain_length = 0
        
        def get_chain_length(task_id: str, visited: set) -> int:
            if task_id in visited:
                return 0
            
            visited.add(task_id)
            task = next((t for t in tasks if t.id == task_id), None)
            if not task:
                return 0
            
            max_dep_length = 0
            for dep in task.dependencies:
                dep_length = get_chain_length(dep, visited.copy())
                max_dep_length = max(max_dep_length, dep_length)
            
            return max_dep_length + 1
        
        for task in tasks:
            chain_length = get_chain_length(task.id, set())
            max_chain_length = max(max_chain_length, chain_length)
        
        return min(max_chain_length / len(tasks), 1.0) if tasks else 0.0
    
    def _calculate_estimation_variance(self, tasks: List[Task]) -> float:
        """计算估算方差"""
        completed_tasks = [task for task in tasks if task.status == TaskStatus.DONE and task.actual_hours > 0]
        
        if len(completed_tasks) < 2:
            return 0.0
        
        variances = []
        for task in completed_tasks:
            variance = abs(task.actual_hours - task.estimated_hours) / task.estimated_hours
            variances.append(variance)
        
        return sum(variances) / len(variances)
    
    def _check_key_person_dependency(self, project: Project) -> float:
        """检查关键人员依赖度"""
        if not project.team_members:
            return 0.0
        
        # 计算任务分配的集中度
        task_assignments = defaultdict(int)
        for task in project.tasks:
            if task.assigned_to:
                task_assignments[task.assigned_to] += 1
        
        if not task_assignments:
            return 0.0
        
        total_tasks = sum(task_assignments.values())
        max_assignment = max(task_assignments.values())
        
        return max_assignment / total_tasks
    
    def _identify_skill_gaps(self, project: Project) -> List[str]:
        """识别技能缺口"""
        required_skills = defaultdict(int)
        available_skills = defaultdict(int)
        
        # 统计所需技能
        for task in project.tasks:
            for skill in task.required_skills:
                required_skills[skill] += 1
        
        # 统计可用技能
        for member in project.team_members:
            for skill in member.skills:
                available_skills[skill] += 1
        
        # 找出缺口
        skill_gaps = []
        for skill, required_count in required_skills.items():
            available_count = available_skills.get(skill, 0)
            if available_count < required_count * 0.5:  # 可用技能少于需求的50%
                skill_gaps.append(skill)
        
        return skill_gaps
    
    def _load_risk_patterns(self) -> Dict[str, Any]:
        """加载风险模式"""
        return {
            'schedule_overrun_patterns': [
                'aggressive_timeline',
                'unclear_requirements',
                'scope_creep'
            ],
            'resource_shortage_patterns': [
                'key_person_dependency',
                'skill_mismatch',
                'team_turnover'
            ],
            'technical_risk_patterns': [
                'new_technology',
                'complex_integration',
                'performance_requirements'
            ]
        }

class PerformanceTracker:
    """绩效跟踪器"""
    
    def __init__(self):
        self.performance_history = []
        self.metrics = {}
    
    def track_team_performance(self, project: Project) -> Dict[str, Any]:
        """跟踪团队绩效"""
        performance_data = {}
        
        for member in project.team_members:
            member_performance = self._calculate_member_performance(member, project)
            performance_data[member.id] = member_performance
        
        # 计算团队整体绩效
        team_performance = self._calculate_team_performance(performance_data)
        
        # 记录历史数据
        self._record_performance(performance_data, team_performance)
        
        return {
            'individual_performance': performance_data,
            'team_performance': team_performance,
            'trends': self._analyze_trends(),
            'recommendations': self._generate_performance_recommendations(performance_data)
        }
    
    def _calculate_member_performance(self, member: TeamMember, project: Project) -> Dict[str, float]:
        """计算成员绩效"""
        member_tasks = [task for task in project.tasks if task.assigned_to == member.id]
        
        if not member_tasks:
            return {'productivity': 0.0, 'quality': 0.0, 'timeliness': 0.0, 'overall': 0.0}
        
        # 生产力:完成任务数量 vs 分配任务数量
        completed_tasks = [task for task in member_tasks if task.status == TaskStatus.DONE]
        productivity = len(completed_tasks) / len(member_tasks) if member_tasks else 0.0
        
        # 质量:基于任务复杂度和完成质量
        quality_score = 0.0
        if completed_tasks:
            for task in completed_tasks:
                # 简化的质量评分:基于是否需要返工
                task_quality = 1.0 - (task.actual_hours - task.estimated_hours) / task.estimated_hours * 0.5
                task_quality = max(0.0, min(1.0, task_quality))
                quality_score += task_quality
            quality_score /= len(completed_tasks)
        
        # 及时性:按时完成的任务比例
        on_time_tasks = [task for task in completed_tasks 
                        if task.completed_date and task.completed_date <= task.due_date]
        timeliness = len(on_time_tasks) / len(completed_tasks) if completed_tasks else 0.0
        
        # 综合评分
        overall = (productivity * 0.4 + quality_score * 0.3 + timeliness * 0.3)
        
        return {
            'productivity': productivity,
            'quality': quality_score,
            'timeliness': timeliness,
            'overall': overall
        }
    
    def _calculate_team_performance(self, individual_performance: Dict[str, Dict[str, float]]) -> Dict[str, float]:
        """计算团队整体绩效"""
        if not individual_performance:
            return {'productivity': 0.0, 'quality': 0.0, 'timeliness': 0.0, 'overall': 0.0}
        
        metrics = ['productivity', 'quality', 'timeliness', 'overall']
        team_metrics = {}
        
        for metric in metrics:
            values = [perf[metric] for perf in individual_performance.values()]
            team_metrics[metric] = sum(values) / len(values)
        
        return team_metrics
    
    def _analyze_trends(self) -> Dict[str, str]:
        """分析绩效趋势"""
        if len(self.performance_history) < 2:
            return {'trend': 'insufficient_data'}
        
        recent = self.performance_history[-1]['team_performance']['overall']
        previous = self.performance_history[-2]['team_performance']['overall']
        
        if recent > previous * 1.05:
            trend = 'improving'
        elif recent < previous * 0.95:
            trend = 'declining'
        else:
            trend = 'stable'
        
        return {'trend': trend, 'change': recent - previous}
    
    def _generate_performance_recommendations(self, performance_data: Dict[str, Dict[str, float]]) -> List[str]:
        """生成绩效改进建议"""
        recommendations = []
        
        # 找出表现较差的成员
        low_performers = [member_id for member_id, perf in performance_data.items() 
                         if perf['overall'] < 0.6]
        
        if low_performers:
            recommendations.append(f"有 {len(low_performers)} 名成员绩效较低,建议提供额外支持和培训")
        
        # 分析具体问题
        quality_issues = [member_id for member_id, perf in performance_data.items() 
                         if perf['quality'] < 0.6]
        if quality_issues:
            recommendations.append("部分成员代码质量需要改进,建议加强代码审查")
        
        timeliness_issues = [member_id for member_id, perf in performance_data.items() 
                           if perf['timeliness'] < 0.7]
        if timeliness_issues:
            recommendations.append("部分成员任务完成及时性不足,建议优化时间管理")
        
        return recommendations
    
    def _record_performance(self, individual_performance: Dict[str, Dict[str, float]], 
                          team_performance: Dict[str, float]):
        """记录绩效数据"""
        record = {
            'timestamp': datetime.now(),
            'individual_performance': individual_performance,
            'team_performance': team_performance
        }
        self.performance_history.append(record)

class CollaborationOptimizer:
    """协作优化器"""
    
    def __init__(self):
        self.communication_patterns = {}
        self.collaboration_metrics = {}
    
    def optimize_team_collaboration(self, project: Project) -> Dict[str, Any]:
        """优化团队协作"""
        
        # 分析当前协作模式
        collaboration_analysis = self._analyze_collaboration_patterns(project)
        
        # 识别协作瓶颈
        bottlenecks = self._identify_collaboration_bottlenecks(project)
        
        # 生成优化建议
        optimization_suggestions = self._generate_collaboration_suggestions(collaboration_analysis, bottlenecks)
        
        # 推荐协作工具和流程
        tool_recommendations = self._recommend_collaboration_tools(project)
        
        return {
            'collaboration_analysis': collaboration_analysis,
            'bottlenecks': bottlenecks,
            'optimization_suggestions': optimization_suggestions,
            'tool_recommendations': tool_recommendations,
            'meeting_optimization': self._optimize_meetings(project)
        }
    
    def _analyze_collaboration_patterns(self, project: Project) -> Dict[str, Any]:
        """分析协作模式"""
        patterns = {
            'communication_frequency': self._calculate_communication_frequency(project),
            'knowledge_sharing': self._assess_knowledge_sharing(project),
            'decision_making_speed': self._assess_decision_making_speed(project),
            'conflict_resolution': self._assess_conflict_resolution(project)
        }
        
        return patterns
    
    def _identify_collaboration_bottlenecks(self, project: Project) -> List[Dict[str, Any]]:
        """识别协作瓶颈"""
        bottlenecks = []
        
        # 检查任务依赖瓶颈
        dependency_bottlenecks = self._find_dependency_bottlenecks(project.tasks)
        bottlenecks.extend(dependency_bottlenecks)
        
        # 检查沟通瓶颈
        communication_bottlenecks = self._find_communication_bottlenecks(project)
        bottlenecks.extend(communication_bottlenecks)
        
        # 检查技能瓶颈
        skill_bottlenecks = self._find_skill_bottlenecks(project)
        bottlenecks.extend(skill_bottlenecks)
        
        return bottlenecks
    
    def _generate_collaboration_suggestions(self, analysis: Dict[str, Any], 
                                          bottlenecks: List[Dict[str, Any]]) -> List[str]:
        """生成协作优化建议"""
        suggestions = []
        
        # 基于瓶颈生成建议
        for bottleneck in bottlenecks:
            if bottleneck['type'] == 'dependency':
                suggestions.append("优化任务依赖关系,减少串行等待时间")
            elif bottleneck['type'] == 'communication':
                suggestions.append("建立更高效的沟通机制,减少信息传递延迟")
            elif bottleneck['type'] == 'skill':
                suggestions.append("进行技能培训或重新分配任务以平衡工作负载")
        
        # 基于协作分析生成建议
        if analysis['communication_frequency'] < 0.5:
            suggestions.append("增加团队沟通频率,建议每日站会或定期同步")
        
        if analysis['knowledge_sharing'] < 0.6:
            suggestions.append("建立知识分享机制,如技术分享会或文档库")
        
        return suggestions
    
    def _recommend_collaboration_tools(self, project: Project) -> Dict[str, List[str]]:
        """推荐协作工具"""
        recommendations = {
            'communication': [],
            'project_management': [],
            'code_collaboration': [],
            'documentation': []
        }
        
        team_size = len(project.team_members)
        
        # 基于团队规模推荐工具
        if team_size <= 5:
            recommendations['communication'] = ['Slack', 'Microsoft Teams']
            recommendations['project_management'] = ['Trello', 'Asana']
        else:
            recommendations['communication'] = ['Microsoft Teams', 'Discord']
            recommendations['project_management'] = ['Jira', 'Azure DevOps']
        
        # 基于项目类型推荐
        if any('development' in task.tags for task in project.tasks):
            recommendations['code_collaboration'] = ['GitHub', 'GitLab', 'Bitbucket']
            recommendations['documentation'] = ['Confluence', 'Notion', 'GitBook']
        
        return recommendations
    
    def _optimize_meetings(self, project: Project) -> Dict[str, Any]:
        """优化会议安排"""
        team_size = len(project.team_members)
        
        # 基于团队规模和项目阶段推荐会议频率
        if team_size <= 5:
            daily_standup_duration = 15
            sprint_planning_duration = 60
        else:
            daily_standup_duration = 30
            sprint_planning_duration = 120
        
        return {
            'daily_standup': {
                'frequency': 'daily',
                'duration_minutes': daily_standup_duration,
                'participants': 'all_team_members'
            },
            'sprint_planning': {
                'frequency': 'bi_weekly',
                'duration_minutes': sprint_planning_duration,
                'participants': 'all_team_members'
            },
            'retrospective': {
                'frequency': 'bi_weekly',
                'duration_minutes': 60,
                'participants': 'all_team_members'
            },
            'one_on_one': {
                'frequency': 'weekly',
                'duration_minutes': 30,
                'participants': 'manager_and_individual'
            }
        }
    
    def _calculate_communication_frequency(self, project: Project) -> float:
        """计算沟通频率"""
        # 简化实现:基于任务依赖关系估算
        total_dependencies = sum(len(task.dependencies) for task in project.tasks)
        total_tasks = len(project.tasks)
        
        if total_tasks == 0:
            return 0.0
        
        return min(total_dependencies / total_tasks / 3, 1.0)  # 归一化到0-1
    
    def _assess_knowledge_sharing(self, project: Project) -> float:
        """评估知识分享程度"""
        # 基于技能分布评估
        all_skills = set()
        for member in project.team_members:
            all_skills.update(member.skills.keys())
        
        if not all_skills:
            return 0.0
        
        # 计算技能覆盖度
        skill_coverage = {}
        for skill in all_skills:
            coverage = sum(1 for member in project.team_members if skill in member.skills)
            skill_coverage[skill] = coverage / len(project.team_members)
        
        return sum(skill_coverage.values()) / len(skill_coverage)
    
    def _assess_decision_making_speed(self, project: Project) -> float:
        """评估决策速度"""
        # 简化实现:基于阻塞任务比例
        blocked_tasks = [task for task in project.tasks if task.status == TaskStatus.BLOCKED]
        if not project.tasks:
            return 1.0
        
        return 1.0 - (len(blocked_tasks) / len(project.tasks))
    
    def _assess_conflict_resolution(self, project: Project) -> float:
        """评估冲突解决能力"""
        # 简化实现:基于任务重新分配频率
        reassigned_tasks = sum(1 for task in project.tasks if task.assigned_to is not None)
        total_tasks = len(project.tasks)
        
        if total_tasks == 0:
            return 1.0
        
        # 假设重新分配比例低表示冲突少
        return 1.0 - min(reassigned_tasks / total_tasks, 1.0)
    
    def _find_dependency_bottlenecks(self, tasks: List[Task]) -> List[Dict[str, Any]]:
        """找出依赖瓶颈"""
        bottlenecks = []
        
        # 统计每个任务被依赖的次数
        dependency_count = defaultdict(int)
        for task in tasks:
            for dep in task.dependencies:
                dependency_count[dep] += 1
        
        # 找出被过度依赖的任务
        for task_id, count in dependency_count.items():
            if count > 3:  # 被超过3个任务依赖
                bottlenecks.append({
                    'type': 'dependency',
                    'task_id': task_id,
                    'dependency_count': count,
                    'description': f'任务 {task_id}{count} 个任务依赖,可能成为瓶颈'
                })
        
        return bottlenecks
    
    def _find_communication_bottlenecks(self, project: Project) -> List[Dict[str, Any]]:
        """找出沟通瓶颈"""
        bottlenecks = []
        
        # 检查跨技能任务
        cross_skill_tasks = []
        for task in project.tasks:
            required_skills = set(task.required_skills.keys())
            if len(required_skills) > 2:  # 需要多种技能的任务
                cross_skill_tasks.append(task)
        
        if len(cross_skill_tasks) > len(project.tasks) * 0.3:
            bottlenecks.append({
                'type': 'communication',
                'description': '大量任务需要跨技能协作,可能增加沟通成本',
                'affected_tasks': len(cross_skill_tasks)
            })
        
        return bottlenecks
    
    def _find_skill_bottlenecks(self, project: Project) -> List[Dict[str, Any]]:
        """找出技能瓶颈"""
        bottlenecks = []
        
        # 统计技能需求和供给
        skill_demand = defaultdict(int)
        skill_supply = defaultdict(int)
        
        for task in project.tasks:
            for skill in task.required_skills:
                skill_demand[skill] += 1
        
        for member in project.team_members:
            for skill in member.skills:
                skill_supply[skill] += 1
        
        # 找出供不应求的技能
        for skill, demand in skill_demand.items():
            supply = skill_supply.get(skill, 0)
            if supply < demand * 0.5:  # 供给不足需求的50%
                bottlenecks.append({
                    'type': 'skill',
                    'skill': skill,
                    'demand': demand,
                    'supply': supply,
                    'description': f'技能 {skill} 供不应求,可能成为瓶颈'
                })
        
        return bottlenecks

class ReportGenerator:
    """报告生成器"""
    
    def __init__(self):
        self.template_engine = ReportTemplateEngine()
    
    def generate_project_dashboard(self, project: Project, 
                                 progress_prediction: Dict[str, Any],
                                 performance_data: Dict[str, Any],
                                 collaboration_analysis: Dict[str, Any]) -> str:
        """生成项目仪表板报告"""
        
        dashboard_data = {
            'project': project,
            'progress': progress_prediction,
            'performance': performance_data,
            'collaboration': collaboration_analysis,
            'generated_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        }
        
        return self.template_engine.render_dashboard(dashboard_data)
    
    def generate_weekly_report(self, project: Project) -> str:
        """生成周报"""
        # 计算本周完成的任务
        week_start = datetime.now() - timedelta(days=7)
        completed_this_week = [
            task for task in project.tasks 
            if (task.status == TaskStatus.DONE and 
                task.completed_date and 
                task.completed_date >= week_start)
        ]
        
        # 计算本周新增的任务
        new_tasks_this_week = [
            task for task in project.tasks 
            if task.created_date >= week_start
        ]
        
        # 生成报告
        report = f"""
# 项目周报 - {project.name}

## 报告时间
{datetime.now().strftime('%Y年%m月%d日')}

## 项目概况
- **项目进度**: {project.completion_percentage:.1%}
- **团队规模**: {len(project.team_members)} 人
- **总任务数**: {len(project.tasks)}
- **已完成**: {len([t for t in project.tasks if t.status == TaskStatus.DONE])}
- **进行中**: {len([t for t in project.tasks if t.status == TaskStatus.IN_PROGRESS])}

## 本周成果
- **完成任务**: {len(completed_this_week)} 个
- **新增任务**: {len(new_tasks_this_week)} 个

### 完成的主要任务
"""
        
        for task in completed_this_week[:5]:  # 显示前5个
            report += f"- {task.title} (负责人: {task.assigned_to})\n"
        
        report += f"""
## 下周计划
- 继续推进进行中的任务
- 解决阻塞问题
- 开始新的高优先级任务

## 风险提醒
"""
        
        # 添加风险提醒
        blocked_tasks = [task for task in project.tasks if task.status == TaskStatus.BLOCKED]
        if blocked_tasks:
            report += f"- 当前有 {len(blocked_tasks)} 个任务被阻塞,需要及时处理\n"
        
        overdue_tasks = [
            task for task in project.tasks 
            if task.due_date < datetime.now() and task.status != TaskStatus.DONE
        ]
        if overdue_tasks:
            report += f"- 有 {len(overdue_tasks)} 个任务已逾期,需要重新评估\n"
        
        return report

class ReportTemplateEngine:
    """报告模板引擎"""
    
    def render_dashboard(self, data: Dict[str, Any]) -> str:
        """渲染仪表板"""
        project = data['project']
        progress = data['progress']
        performance = data['performance']
        
        dashboard = f"""
# 项目管理仪表板

## 项目信息
- **项目名称**: {project.name}
- **项目描述**: {project.description}
- **开始日期**: {project.start_date.strftime('%Y-%m-%d')}
- **计划结束**: {project.end_date.strftime('%Y-%m-%d')}
- **当前状态**: {project.status}

## 进度概览
- **完成进度**: {progress['current_progress']:.1%}
- **预计完成**: {progress['predicted_completion_date'].strftime('%Y-%m-%d')}
- **剩余工作**: {progress['remaining_work_hours']:.1f} 小时
- **团队速度**: {progress['team_velocity']:.1f} 小时/周

## 团队绩效
- **整体绩效**: {performance['team_performance']['overall']:.2f}
- **生产力**: {performance['team_performance']['productivity']:.2f}
- **质量**: {performance['team_performance']['quality']:.2f}
- **及时性**: {performance['team_performance']['timeliness']:.2f}

## 任务状态分布
"""
        
        # 统计任务状态
        status_count = defaultdict(int)
        for task in project.tasks:
            status_count[task.status.value] += 1
        
        for status, count in status_count.items():
            dashboard += f"- **{status}**: {count} 个\n"
        
        dashboard += f"""
## 风险警告
"""
        
        for risk in progress['risks']:
            dashboard += f"- **{risk['type']}**: {risk['description']}\n"
        
        dashboard += f"""
## 改进建议
"""
        
        for recommendation in progress['recommendations']:
            dashboard += f"- {recommendation}\n"
        
        dashboard += f"""

---
*报告生成时间: {data['generated_at']}*
"""
        
        return dashboard

# 使用示例和演示
def demo_project_management_system():
    """演示项目管理系统"""
    
    print("📊 AI驱动的项目管理与协作优化系统演示")
    print("=" * 60)
    
    # 1. 创建示例项目数据
    print("\n1. 创建项目数据")
    print("-" * 30)
    
    # 创建团队成员
    team_members = [
        TeamMember(
            id="dev001",
            name="张三",
            role="前端开发",
            skills={
                "javascript": SkillLevel.ADVANCED,
                "react": SkillLevel.ADVANCED,
                "css": SkillLevel.INTERMEDIATE
            },
            availability=0.9,
            hourly_rate=100.0,
            current_workload=0.6,
            performance_score=0.85,
            preferred_tasks=["frontend", "ui"],
            timezone="Asia/Shanghai",
            experience_years=5
        ),
        TeamMember(
            id="dev002",
            name="李四",
            role="后端开发",
            skills={
                "python": SkillLevel.EXPERT,
                "database": SkillLevel.ADVANCED,
                "api_design": SkillLevel.ADVANCED
            },
            availability=0.8,
            hourly_rate=120.0,
            current_workload=0.7,
            performance_score=0.92,
            preferred_tasks=["backend", "api"],
            timezone="Asia/Shanghai",
            experience_years=7
        ),
        TeamMember(
            id="dev003",
            name="王五",
            role="全栈开发",
            skills={
                "javascript": SkillLevel.INTERMEDIATE,
                "python": SkillLevel.INTERMEDIATE,
                "database": SkillLevel.INTERMEDIATE
            },
            availability=1.0,
            hourly_rate=90.0,
            current_workload=0.4,
            performance_score=0.78,
            preferred_tasks=["fullstack", "integration"],
            timezone="Asia/Shanghai",
            experience_years=3
        )
    ]
    
    # 创建任务
    tasks = [
        Task(
            id="task001",
            title="用户登录界面设计",
            description="设计和实现用户登录界面,包括表单验证和错误处理",
            status=TaskStatus.TODO,
            priority=Priority.HIGH,
            estimated_hours=16.0,
            actual_hours=0.0,
            required_skills={"javascript": SkillLevel.INTERMEDIATE, "react": SkillLevel.INTERMEDIATE},
            dependencies=[],
            assigned_to=None,
            created_date=datetime.now() - timedelta(days=2),
            due_date=datetime.now() + timedelta(days=5),
            completed_date=None,
            complexity_score=0.6,
            risk_level=0.3,
            tags=["frontend", "ui", "authentication"]
        ),
        Task(
            id="task002",
            title="用户认证API开发",
            description="开发用户认证相关的API接口,包括登录、注册、密码重置",
            status=TaskStatus.TODO,
            priority=Priority.HIGH,
            estimated_hours=24.0,
            actual_hours=0.0,
            required_skills={"python": SkillLevel.ADVANCED, "api_design": SkillLevel.ADVANCED},
            dependencies=[],
            assigned_to=None,
            created_date=datetime.now() - timedelta(days=1),
            due_date=datetime.now() + timedelta(days=7),
            completed_date=None,
            complexity_score=0.8,
            risk_level=0.4,
            tags=["backend", "api", "authentication"]
        ),
        Task(
            id="task003",
            title="数据库设计",
            description="设计用户管理系统的数据库结构",
            status=TaskStatus.IN_PROGRESS,
            priority=Priority.CRITICAL,
            estimated_hours=12.0,
            actual_hours=8.0,
            required_skills={"database": SkillLevel.ADVANCED},
            dependencies=[],
            assigned_to="dev002",
            created_date=datetime.now() - timedelta(days=3),
            due_date=datetime.now() + timedelta(days=2),
            completed_date=None,
            complexity_score=0.7,
            risk_level=0.2,
            tags=["database", "design"]
        ),
        Task(
            id="task004",
            title="前后端集成",
            description="集成前端界面和后端API",
            status=TaskStatus.TODO,
            priority=Priority.MEDIUM,
            estimated_hours=20.0,
            actual_hours=0.0,
            required_skills={"javascript": SkillLevel.INTERMEDIATE, "python": SkillLevel.INTERMEDIATE},
            dependencies=["task001", "task002"],
            assigned_to=None,
            created_date=datetime.now(),
            due_date=datetime.now() + timedelta(days=10),
            completed_date=None,
            complexity_score=0.9,
            risk_level=0.6,
            tags=["integration", "fullstack"]
        )
    ]
    
    # 创建项目
    project = Project(
        id="proj001",
        name="用户管理系统",
        description="开发一个完整的用户管理系统,包括前端界面和后端API",
        start_date=datetime.now() - timedelta(days=7),
        end_date=datetime.now() + timedelta(days=30),
        budget=50000.0,
        team_members=team_members,
        tasks=tasks,
        milestones=[
            {"name": "需求分析完成", "date": datetime.now() - timedelta(days=5), "status": "completed"},
            {"name": "原型设计完成", "date": datetime.now() + timedelta(days=10), "status": "pending"},
            {"name": "开发完成", "date": datetime.now() + timedelta(days=25), "status": "pending"}
        ],
        status="进行中",
        completion_percentage=0.25,
        risk_factors=["技术复杂度", "时间紧迫"]
    )
    
    print(f"项目: {project.name}")
    print(f"团队规模: {len(project.team_members)} 人")
    print(f"任务数量: {len(project.tasks)} 个")
    
    # 2. 智能任务分配
    print("\n2. 智能任务分配")
    print("-" * 30)
    
    assigner = IntelligentTaskAssigner()
    assignments = assigner.assign_tasks(project.tasks, project.team_members)
    
    print("任务分配结果:")
    for member_id, task_ids in assignments.items():
        member_name = next(m.name for m in project.team_members if m.id == member_id)
        print(f"  {member_name}: {len(task_ids)} 个任务")
        for task_id in task_ids:
            task_title = next(t.title for t in project.tasks if t.id == task_id)
            print(f"    - {task_title}")
    
    # 3. 进度预测
    print("\n3. 项目进度预测")
    print("-" * 30)
    
    predictor = ProgressPredictor()
    progress_prediction = predictor.predict_project_completion(project)
    
    print(f"当前进度: {progress_prediction['current_progress']:.1%}")
    print(f"预计完成日期: {progress_prediction['predicted_completion_date'].strftime('%Y-%m-%d')}")
    print(f"剩余工作量: {progress_prediction['remaining_work_hours']:.1f} 小时")
    print(f"团队速度: {progress_prediction['team_velocity']:.1f} 小时/周")
    
    print("\n置信区间:")
    ci = progress_prediction['confidence_interval']
    print(f"  乐观: {ci['optimistic'].strftime('%Y-%m-%d')}")
    print(f"  最可能: {ci['most_likely'].strftime('%Y-%m-%d')}")
    print(f"  悲观: {ci['pessimistic'].strftime('%Y-%m-%d')}")
    
    # 4. 绩效分析
    print("\n4. 团队绩效分析")
    print("-" * 30)
    
    performance_tracker = PerformanceTracker()
    performance_data = performance_tracker.track_team_performance(project)
    
    print("团队整体绩效:")
    team_perf = performance_data['team_performance']
    print(f"  生产力: {team_perf['productivity']:.2f}")
    print(f"  质量: {team_perf['quality']:.2f}")
    print(f"  及时性: {team_perf['timeliness']:.2f}")
    print(f"  综合评分: {team_perf['overall']:.2f}")
    
    print("\n个人绩效:")
    for member_id, perf in performance_data['individual_performance'].items():
        member_name = next(m.name for m in project.team_members if m.id == member_id)
        print(f"  {member_name}: {perf['overall']:.2f}")
    
    # 5. 协作优化
    print("\n5. 团队协作优化")
    print("-" * 30)
    
    collaboration_optimizer = CollaborationOptimizer()
    collaboration_analysis = collaboration_optimizer.optimize_team_collaboration(project)
    
    print("协作分析:")
    analysis = collaboration_analysis['collaboration_analysis']
    print(f"  沟通频率: {analysis['communication_frequency']:.2f}")
    print(f"  知识分享: {analysis['knowledge_sharing']:.2f}")
    print(f"  决策速度: {analysis['decision_making_speed']:.2f}")
    
    print(f"\n发现 {len(collaboration_analysis['bottlenecks'])} 个协作瓶颈:")
    for bottleneck in collaboration_analysis['bottlenecks'][:3]:
        print(f"  - {bottleneck['description']}")
    
    print(f"\n优化建议 ({len(collaboration_analysis['optimization_suggestions'])}):")
    for suggestion in collaboration_analysis['optimization_suggestions'][:3]:
        print(f"  - {suggestion}")
    
    # 6. 风险评估
    print("\n6. 项目风险评估")
    print("-" * 30)
    
    risks = progress_prediction['risks']
    print(f"识别到 {len(risks)} 个风险:")
    for risk in risks:
        print(f"  - {risk['type']}: {risk['description']}")
        print(f"    概率: {risk['probability']:.1f}, 影响: {risk['impact']:.1f}")
        print(f"    缓解措施: {risk['mitigation']}")
    
    # 7. 生成报告
    print("\n7. 生成项目报告")
    print("-" * 30)
    
    report_generator = ReportGenerator()
    
    # 生成仪表板
    dashboard = report_generator.generate_project_dashboard(
        project, progress_prediction, performance_data, collaboration_analysis
    )
    
    # 保存报告
    with open('project_dashboard.md', 'w', encoding='utf-8') as f:
        f.write(dashboard)
    
    print("项目仪表板已生成: project_dashboard.md")
    
    # 生成周报
    weekly_report = report_generator.generate_weekly_report(project)
    with open('weekly_report.md', 'w', encoding='utf-8') as f:
        f.write(weekly_report)
    
    print("项目周报已生成: weekly_report.md")
    
    print("\n🎯 项目管理系统演示完成!")
    print("\n生成的文件:")
    print("- project_dashboard.md (项目仪表板)")
    print("- weekly_report.md (项目周报)")

if __name__ == "__main__":
    demo_project_management_system()

智能任务分配与调度

高级分配算法

class AdvancedTaskScheduler:
    """高级任务调度器"""
    
    def __init__(self):
        self.genetic_algorithm = GeneticAlgorithm()
        self.constraint_solver = ConstraintSolver()
        self.ml_predictor = MLPredictor()
    
    def optimize_schedule(self, tasks: List[Task], team_members: List[TeamMember], 
                         constraints: Dict[str, Any]) -> Dict[str, Any]:
        """优化任务调度"""
        
        # 使用遗传算法优化
        ga_solution = self.genetic_algorithm.optimize(tasks, team_members, constraints)
        
        # 使用约束求解器验证
        validated_solution = self.constraint_solver.validate_and_adjust(ga_solution, constraints)
        
        # 使用机器学习预测效果
        predicted_outcomes = self.ml_predictor.predict_outcomes(validated_solution)
        
        return {
            'optimized_schedule': validated_solution,
            'predicted_outcomes': predicted_outcomes,
            'optimization_metrics': self._calculate_optimization_metrics(validated_solution),
            'alternative_schedules': self._generate_alternatives(tasks, team_members, constraints)
        }
    
    def _calculate_optimization_metrics(self, solution: Dict[str, Any]) -> Dict[str, float]:
        """计算优化指标"""
        return {
            'resource_utilization': self._calculate_resource_utilization(solution),
            'schedule_efficiency': self._calculate_schedule_efficiency(solution),
            'risk_score': self._calculate_risk_score(solution),
            'cost_efficiency': self._calculate_cost_efficiency(solution)
        }

class GeneticAlgorithm:
    """遗传算法优化器"""
    
    def __init__(self, population_size=50, generations=100, mutation_rate=0.1):
        self.population_size = population_size
        self.generations = generations
        self.mutation_rate = mutation_rate
    
    def optimize(self, tasks: List[Task], team_members: List[TeamMember], 
                constraints: Dict[str, Any]) -> Dict[str, Any]:
        """使用遗传算法优化任务分配"""
        
        # 初始化种群
        population = self._initialize_population(tasks, team_members)
        
        best_solution = None
        best_fitness = float('-inf')
        
        for generation in range(self.generations):
            # 计算适应度
            fitness_scores = [self._calculate_fitness(individual, constraints) 
                            for individual in population]
            
            # 更新最佳解
            max_fitness_idx = np.argmax(fitness_scores)
            if fitness_scores[max_fitness_idx] > best_fitness:
                best_fitness = fitness_scores[max_fitness_idx]
                best_solution = population[max_fitness_idx].copy()
            
            # 选择
            selected = self._selection(population, fitness_scores)
            
            # 交叉
            offspring = self._crossover(selected)
            
            # 变异
            mutated = self._mutation(offspring)
            
            # 更新种群
            population = mutated
        
        return self._decode_solution(best_solution, tasks, team_members)
    
    def _initialize_population(self, tasks: List[Task], team_members: List[TeamMember]) -> List[List[int]]:
        """初始化种群"""
        population = []
        
        for _ in range(self.population_size):
            # 每个个体表示任务到团队成员的分配
            individual = [np.random.randint(0, len(team_members)) for _ in tasks]
            population.append(individual)
        
        return population
    
    def _calculate_fitness(self, individual: List[int], constraints: Dict[str, Any]) -> float:
        """计算适应度"""
        fitness = 0.0
        
        # 技能匹配度
        skill_match_score = self._evaluate_skill_match(individual)
        fitness += skill_match_score * 0.4
        
        # 工作负载平衡
        workload_balance_score = self._evaluate_workload_balance(individual)
        fitness += workload_balance_score * 0.3
        
        # 成本效率
        cost_efficiency_score = self._evaluate_cost_efficiency(individual)
        fitness += cost_efficiency_score * 0.2
        
        # 约束满足度
        constraint_satisfaction_score = self._evaluate_constraints(individual, constraints)
        fitness += constraint_satisfaction_score * 0.1
        
        return fitness
    
    def _selection(self, population: List[List[int]], fitness_scores: List[float]) -> List[List[int]]:
        """选择操作"""
        # 轮盘赌选择
        total_fitness = sum(fitness_scores)
        if total_fitness == 0:
            return np.random.choice(population, size=len(population)//2, replace=True).tolist()
        
        probabilities = [f/total_fitness for f in fitness_scores]
        selected_indices = np.random.choice(len(population), size=len(population)//2, 
                                          p=probabilities, replace=True)
        
        return [population[i] for i in selected_indices]
    
    def _crossover(self, selected: List[List[int]]) -> List[List[int]]:
        """交叉操作"""
        offspring = []
        
        for i in range(0, len(selected)-1, 2):
            parent1 = selected[i]
            parent2 = selected[i+1]
            
            # 单点交叉
            crossover_point = np.random.randint(1, len(parent1))
            
            child1 = parent1[:crossover_point] + parent2[crossover_point:]
            child2 = parent2[:crossover_point] + parent1[crossover_point:]
            
            offspring.extend([child1, child2])
        
        return offspring
    
    def _mutation(self, offspring: List[List[int]]) -> List[List[int]]:
        """变异操作"""
        for individual in offspring:
            for i in range(len(individual)):
                if np.random.random() < self.mutation_rate:
                    # 随机改变分配
                    individual[i] = np.random.randint(0, max(individual) + 1)
        
        return offspring

class ConstraintSolver:
    """约束求解器"""
    
    def validate_and_adjust(self, solution: Dict[str, Any], 
                          constraints: Dict[str, Any]) -> Dict[str, Any]:
        """验证并调整解决方案"""
        
        adjusted_solution = solution.copy()
        
        # 检查时间约束
        self._enforce_time_constraints(adjusted_solution, constraints)
        
        # 检查资源约束
        self._enforce_resource_constraints(adjusted_solution, constraints)
        
        # 检查依赖约束
        self._enforce_dependency_constraints(adjusted_solution, constraints)
        
        return adjusted_solution
    
    def _enforce_time_constraints(self, solution: Dict[str, Any], constraints: Dict[str, Any]):
        """强制执行时间约束"""
        # 确保任务在截止日期前完成
        for task_id, assignment in solution.get('assignments', {}).items():
            # 调整任务开始时间以满足截止日期
            pass
    
    def _enforce_resource_constraints(self, solution: Dict[str, Any], constraints: Dict[str, Any]):
        """强制执行资源约束"""
        # 确保团队成员工作负载不超过限制
        pass
    
    def _enforce_dependency_constraints(self, solution: Dict[str, Any], constraints: Dict[str, Any]):
        """强制执行依赖约束"""
        # 确保依赖任务按正确顺序执行
        pass

class MLPredictor:
    """机器学习预测器"""
    
    def __init__(self):
        self.models = self._load_models()
    
    def predict_outcomes(self, solution: Dict[str, Any]) -> Dict[str, Any]:
        """预测解决方案的结果"""
        
        features = self._extract_features(solution)
        
        predictions = {
            'completion_probability': self._predict_completion_probability(features),
            'quality_score': self._predict_quality_score(features),
            'team_satisfaction': self._predict_team_satisfaction(features),
            'cost_overrun_risk': self._predict_cost_overrun_risk(features)
        }
        
        return predictions
    
    def _extract_features(self, solution: Dict[str, Any]) -> np.ndarray:
        """提取特征向量"""
        # 从解决方案中提取机器学习特征
        features = []
        
        # 添加各种特征
        # ...
        
        return np.array(features)
    
    def _load_models(self) -> Dict[str, Any]:
        """加载预训练模型"""
        # 在实际应用中,这里会加载真实的ML模型
        return {
            'completion_model': None,
            'quality_model': None,
            'satisfaction_model': None,
            'cost_model': None
        }

总结与最佳实践

项目管理最佳实践

class ProjectManagementBestPractices:
    """项目管理最佳实践"""
    
    @staticmethod
    def get_agile_practices() -> Dict[str, List[str]]:
        """获取敏捷实践"""
        return {
            'Scrum实践': [
                '每日站会',
                '冲刺计划',
                '冲刺回顾',
                '产品待办事项管理',
                '用户故事编写'
            ],
            '看板实践': [
                '可视化工作流',
                '限制在制品',
                '管理流动',
                '明确政策',
                '持续改进'
            ],
            '精益实践': [
                '消除浪费',
                '快速交付',
                '延迟决策',
                '授权团队',
                '整体优化'
            ]
        }
    
    @staticmethod
    def get_communication_guidelines() -> Dict[str, List[str]]:
        """获取沟通指南"""
        return {
            '会议管理': [
                '明确会议目标',
                '控制会议时间',
                '准备会议议程',
                '记录会议纪要',
                '跟进行动项'
            ],
            '状态报告': [
                '定期更新进度',
                '突出关键问题',
                '提供解决方案',
                '量化关键指标',
                '预测未来趋势'
            ],
            '团队协作': [
                '建立信任关系',
                '鼓励开放沟通',
                '及时反馈',
                '知识分享',
                '冲突解决'
            ]
        }

def main():
    """主函数"""
    print("📊 AI驱动的项目管理与协作优化系统")
    print("=" * 50)
    
    # 运行演示
    demo_project_management_system()
    
    # 显示最佳实践
    practices = ProjectManagementBestPractices()
    agile_practices = practices.get_agile_practices()
    
    print("\n📋 项目管理最佳实践:")
    print("-" * 30)
    
    for category, practice_list in agile_practices.items():
        print(f"\n{category}:")
        for practice in practice_list[:3]:
            print(f"  ✓ {practice}")
    
    print("\n🎯 项目管理优化完成!")

if __name__ == "__main__":
    main()

作者简介:资深项目管理专家,专注于敏捷开发和团队协作优化,拥有丰富的大型项目管理经验。

版权声明:本文为原创技术文章,转载请注明出处。

更新时间:2024年7月14日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CarlowZJ

我的文章对你有用的话,可以支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值