E. Sleeping Schedule

Vova面临一个关于睡眠安排的问题,他需要在一天内睡n次,每次睡h小时。如果他在l到r(包括l和r)的时间范围内开始睡觉,那么这次睡眠就被认为是优质的。Vova可以选择在第ii次睡眠前a_i或a_i-1小时开始。任务是确定Vova最多可以有多少次优质睡眠。给定n, h, l, r和一系列的a_i,需要找出最优策略并输出最大优质睡眠次数。" 135040541,7337247,人工智能与云计算:变革技术的应用与原理,"['AI', '深度学习', '云计算', '机器学习', '自然语言处理']

链接:https://codeforces.ml/contest/1324/problem/E

Vova had a pretty weird sleeping schedule. There are hh hours in a day. Vova will sleep exactly nn times. The ii-th time he will sleep exactly after aiai hours from the time he woke up. You can assume that Vova woke up exactly at the beginning of this story (the initial time is 00). Each time Vova sleeps exactly one day (in other words, hh hours).

Vova thinks that the ii-th sleeping time is good if he starts to sleep between hours ll and rr inclusive.

Vova can control himself and before the ii-th time can choose between two options: go to sleep after aiai hours or after ai−1ai−1 hours.

Your task is to say the maximum number of good sleeping times Vova can obtain if he acts optimally.

Input

The first line of the input contains four integers n,h,ln,h,l and rr (1≤n≤2000,3≤h≤2000,0≤l≤r<h1≤n≤2000,3≤h≤2000,0≤l≤r<h) — the number of times Vova goes to sleep, the number of hours in a day and the segment of the good sleeping time.

The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai<h1≤ai<h), where aiai is the number of hours after which Vova goes to sleep the ii-th time.

Output

Print one integer — the maximum number of good sleeping times Vova can obtain if he acts optimally.

Example

input

Copy

7 24 21 23
16 17 14 20 20 11 22

output

Copy

3

Note

The maximum number of good times in the example is 33.

The story starts from t=0t=0. Then Vova goes to sleep after a1−1a1−1 hours, now the time is 1515. This time is not good. Then Vova goes to sleep after a2−1a2−1 hours, now the time is 15+16=715+16=7. This time is also not good. Then Vova goes to sleep after a3a3 hours, now the time is 7+14=217+14=21. This time is good. Then Vova goes to sleep after a4−1a4−1 hours, now the time is 21+19=1621+19=16. This time is not good. Then Vova goes to sleep after a5a5 hours, now the time is 16+20=1216+20=12. This time is not good. Then Vova goes to sleep after a6a6 hours, now the time is 12+11=2312+11=23. This time is good. Then Vova goes to sleep after a7a7 hours, now the time is 23+22=2123+22=21. This time is also good.

代码:

#include<bits/stdc++.h>
using namespace std;
long long s,n,h,l,r,x,u,v,max1=0;
long long a[2001],b[2001];
long long dp[2001][2001];
int main()
{
	cin>>n>>h>>l>>r;
	s=0;
	b[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=b[i-1]+a[i];
		//b[i]%=h;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=i;j++)
		{
			if((b[i]-j)%h>=l&&(b[i]-j)%h<=r)
			dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+1;
			else
			dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]);
		}
		
	}
	for(int i=0;i<=n;i++)
	max1=max(max1,dp[n][i]);
	cout<<max1;
}

 

# ai_system/life_scheduler.py import datetime import time import json import logging import random import threading from pathlib import Path from enum import Enum, auto from typing import Dict, List, Tuple, Optional, Union from core.config import system_config from environment.hardware_manager import create_hardware_manager # 设置日志记录器 logger = logging.getLogger('LifeScheduler') logger.setLevel(logging.INFO) # 活动状态枚举 class ActivityState(Enum): IDLE = auto() SLEEPING = auto() EATING = auto() WORKING = auto() LEARNING = auto() EXERCISING = auto() SOCIALIZING = auto() MEDITATING = auto() ENTERTAINMENT = auto() MAINTENANCE = auto() # 活动类型枚举 class ActivityType(Enum): WAKE_UP = "起床" SLEEP = "睡觉" NAP = "小睡" MEAL = "用餐" WORK = "工作" STUDY = "学习" EXERCISE = "锻炼" SOCIAL = "社交" MEDITATE = "冥想" ENTERTAINMENT = "娱乐" MAINTENANCE = "系统维护" class LifeScheduler: """高级AI生活调度器,管理AI的日常活动""" def __init__(self, db_manager=None): """ 初始化生活调度器 :param db_manager: 数据库管理实例 """ # 基本状态 self.current_activity = ActivityState.IDLE self.current_activity_details = {} self.activity_start_time = datetime.datetime.now() # 配置 self.default_schedule = self._load_default_schedule() self.daily_schedule = self.default_schedule.copy() self.weekly_schedule = self._load_weekly_schedule() # 偏好设置 self.meal_preferences = {} self.activity_preferences = {} # 日志和状态 self.activity_log = [] self.state_history = [] # 硬件管理器 self.hardware_manager = create_hardware_manager(db_manager) if db_manager else None # 监控线程 self.monitor_thread = None self.running = True # 加载配置 self._load_preferences() # 启动监控线程 self.start_monitoring() logger.info("✅ 生活调度器初始化完成") logger.debug(f"默认每日计划: {json.dumps(self.default_schedule, indent=2)}") def _load_default_schedule(self) -> Dict[str, str]: """加载默认作息时间表""" return { "wake_up": "08:00", "breakfast": "08:30", "morning_work": "09:00", "lunch": "12:30", "afternoon_work": "13:30", "dinner": "19:00", "evening_activity": "20:00", "sleep": "23:00" } def _load_weekly_schedule(self) -> Dict[str, Dict[str, str]]: """加载每周计划""" weekly_schedule = {} weekdays = ["monday", "tuesday", "wednesday", "thursday", "friday"] weekends = ["saturday", "sunday"] # 工作日计划 for day in weekdays: weekly_schedule[day] = self.default_schedule.copy() weekly_schedule[day]["evening_activity"] = "19:30" # 工作日早点结束 # 周末计划 for day in weekends: weekly_schedule[day] = { "wake_up": "09:00", "breakfast": "09:30", "morning_activity": "10:00", "lunch": "13:00", "afternoon_activity": "14:00", "dinner": "19:30", "evening_activity": "20:30", "sleep": "00:00" } return weekly_schedule def _load_preferences(self): """从配置文件加载偏好设置""" config_path = Path(system_config.CONFIG_DIR) / "life_preferences.json" if config_path.exists(): try: with open(config_path, "r", encoding="utf-8") as f: preferences = json.load(f) self.meal_preferences = preferences.get("meal_preferences", {}) self.activity_preferences = preferences.get("activity_preferences", {}) logger.info(f"✅ 已加载偏好设置: {config_path}") except Exception as e: logger.error(f"❌ 加载偏好设置失败: {str(e)}") def save_preferences(self): """保存偏好设置到文件""" config_path = Path(system_config.CONFIG_DIR) / "life_preferences.json" preferences = { "meal_preferences": self.meal_preferences, "activity_preferences": self.activity_preferences } try: with open(config_path, "w", encoding="utf-8") as f: json.dump(preferences, f, indent=2) logger.info(f"💾 偏好设置已保存: {config_path}") return True except Exception as e: logger.error(f"❌ 保存偏好设置失败: {str(e)}") return False def set_schedule(self, schedule_type: str, schedule_data: Dict[str, str]): """ 设置作息时间表 :param schedule_type: 'daily' 或 'weekly' :param schedule_data: 时间表数据 """ if schedule_type == "daily": self.daily_schedule = schedule_data logger.info("每日计划已更新") elif schedule_type == "weekly": self.weekly_schedule = schedule_data logger.info("每周计划已更新") else: logger.warning(f"未知计划类型: {schedule_type}") return False return True def get_current_schedule(self) -> Dict[str, str]: """获取当前适用的计划(基于星期几)""" today = datetime.datetime.now().strftime("%A").lower() return self.weekly_schedule.get(today, self.default_schedule) def wake_up(self): """起床""" if self.current_activity != ActivityState.SLEEPING: logger.warning("不在睡眠状态,无法起床") return False self._end_current_activity() self._start_activity(ActivityState.IDLE, ActivityType.WAKE_UP) # 记录硬件状态 if self.hardware_manager: self.hardware_manager.log_event("wake_up", "AI系统已启动") return True def go_to_sleep(self): """睡觉""" self._end_current_activity() self._start_activity(ActivityState.SLEEPING, ActivityType.SLEEP) # 记录硬件状态 if self.hardware_manager: self.hardware_manager.log_event("sleep", "AI系统进入睡眠模式") return True def take_nap(self, duration_minutes: int = 30): """小睡片刻""" self._end_current_activity() self._start_activity(ActivityState.SLEEPING, ActivityType.NAP, duration=duration_minutes) # 实际睡眠 logger.info(f"💤 小睡 {duration_minutes} 分钟") time.sleep(duration_minutes * 60) # 醒来 self._end_current_activity() self._start_activity(ActivityState.IDLE, "小睡结束") return True def have_meal(self, meal_type: str): """用餐""" valid_meals = ["breakfast", "lunch", "dinner", "snack"] if meal_type not in valid_meals: logger.warning(f"无效的用餐类型: {meal_type}") return False # 获取偏好设置 preference = self.meal_preferences.get(meal_type, "标准餐") self._end_current_activity() self._start_activity(ActivityState.EATING, ActivityType.MEAL, details={"meal_type": meal_type, "preference": preference}) return True def set_meal_preference(self, meal_type: str, preference: str): """设置特殊餐点""" valid_meals = ["breakfast", "lunch", "dinner", "snack"] if meal_type not in valid_meals: logger.warning(f"无效的用餐类型: {meal_type}") return False self.meal_preferences[meal_type] = preference logger.info(f"设置 {meal_type} 偏好为: {preference}") return True def start_activity(self, activity_type: ActivityType, duration_minutes: int = None, details: Dict = None): """ 开始一项活动 :param activity_type: 活动类型 :param duration_minutes: 活动时长(分钟) :param details: 活动详细信息 """ # 映射活动类型到状态 activity_state_map = { ActivityType.WORK: ActivityState.WORKING, ActivityType.STUDY: ActivityState.LEARNING, ActivityType.EXERCISE: ActivityState.EXERCISING, ActivityType.SOCIAL: ActivityState.SOCIALIZING, ActivityType.MEDITATE: ActivityState.MEDITATING, ActivityType.ENTERTAINMENT: ActivityState.ENTERTAINMENT, ActivityType.MAINTENANCE: ActivityState.MAINTENANCE } state = activity_state_map.get(activity_type, ActivityState.IDLE) self._end_current_activity() self._start_activity(state, activity_type, duration=duration_minutes, details=details) return True def check_schedule(self) -> Optional[str]: """检查当前时间应该做什么""" current_time = datetime.datetime.now().strftime("%H:%M") schedule = self.get_current_schedule() for activity, scheduled_time in schedule.items(): if current_time == scheduled_time: return activity return None def log_activity(self, activity_description: str, state: ActivityState = None): """记录活动日志""" timestamp = datetime.datetime.now().isoformat() state = state or self.current_activity log_entry = { "timestamp": timestamp, "activity": activity_description, "state": state.name, "duration": self._get_current_activity_duration() } self.activity_log.append(log_entry) logger.info(f"📝 活动记录: {activity_description}") return log_entry def get_recent_activities(self, count: int = 10) -> List[Dict]: """获取最近的活动记录""" return self.activity_log[-count:] if self.activity_log else [] def get_current_state(self) -> Dict: """获取当前状态""" return { "current_activity": self.current_activity.name, "activity_details": self.current_activity_details, "activity_start_time": self.activity_start_time.isoformat(), "activity_duration": self._get_current_activity_duration(), "next_scheduled": self.get_next_scheduled_activity() } def get_next_scheduled_activity(self) -> Dict: """获取下一个计划活动""" current_time = datetime.datetime.now() schedule = self.get_current_schedule() next_activity = None min_delta = None for activity, scheduled_time in schedule.items(): # 将字符串时间转换为datetime对象 scheduled_dt = datetime.datetime.strptime(scheduled_time, "%H:%M") scheduled_dt = scheduled_dt.replace( year=current_time.year, month=current_time.month, day=current_time.day ) # 如果活动时间已过,考虑明天的同一时间 if scheduled_dt < current_time: scheduled_dt += datetime.timedelta(days=1) # 计算时间差 delta = scheduled_dt - current_time if min_delta is None or delta < min_delta: min_delta = delta next_activity = activity if next_activity: return { "activity": next_activity, "scheduled_time": schedule[next_activity], "time_remaining": str(min_delta) } return {} def start_monitoring(self): """启动活动监控线程""" if self.monitor_thread and self.monitor_thread.is_alive(): logger.warning("监控线程已在运行") return self.running = True self.monitor_thread = threading.Thread(target=self.monitor_activity, daemon=True) self.monitor_thread.start() logger.info("🔄 活动监控已启动") def stop_monitoring(self): """停止活动监控""" self.running = False if self.monitor_thread and self.monitor_thread.is_alive(): self.monitor_thread.join(timeout=5) logger.info("⏹️ 活动监控已停止") def monitor_activity(self): """监控活动状态并反馈""" logger.info("👀 开始监控活动状态...") while self.running: try: # 保存当前状态快照 self.state_history.append({ "timestamp": datetime.datetime.now().isoformat(), "state": self.get_current_state() }) # 状态检查 self._check_activity_duration() self._check_scheduled_activities() self._check_system_health() # 每分钟检查一次 for _ in range(60): if not self.running: break time.sleep(1) except Exception as e: logger.error(f"监控线程错误: {str(e)}") time.sleep(10) # 出错后等待10秒再重试 def _start_activity(self, state: ActivityState, activity_type: Union[ActivityType, str], duration: int = None, details: Dict = None): """开始新活动""" self.current_activity = state self.activity_start_time = datetime.datetime.now() self.current_activity_details = { "type": activity_type.value if isinstance(activity_type, ActivityType) else activity_type, "duration": duration, "details": details or {} } # 记录活动 activity_desc = f"开始活动: {self.current_activity_details['type']}" if duration: activity_desc += f" ({duration}分钟)" self.log_activity(activity_desc, state) # 记录硬件事件 if self.hardware_manager: self.hardware_manager.log_event( "activity_start", f"开始活动: {self.current_activity_details['type']}" ) def _end_current_activity(self): """结束当前活动""" if self.current_activity == ActivityState.IDLE: return # 记录活动结束 duration = self._get_current_activity_duration() activity_desc = f"结束活动: {self.current_activity_details['type']} (持续{duration}分钟)" self.log_activity(activity_desc) # 重置状态 self.current_activity = ActivityState.IDLE self.current_activity_details = {} # 记录硬件事件 if self.hardware_manager: self.hardware_manager.log_event( "activity_end", f"结束活动: {activity_desc}" ) def _get_current_activity_duration(self) -> int: """获取当前活动持续时间(分钟)""" if not self.activity_start_time: return 0 return int((datetime.datetime.now() - self.activity_start_time).total_seconds() / 60) def _check_activity_duration(self): """检查活动持续时间是否过长""" max_durations = { ActivityState.EATING: 60, # 1小时 ActivityState.WORKING: 240, # 4小时 ActivityState.LEARNING: 180, # 3小时 ActivityState.EXERCISING: 120, # 2小时 ActivityState.SOCIALIZING: 180, # 3小时 ActivityState.ENTERTAINMENT: 120 # 2小时 } duration = self._get_current_activity_duration() max_duration = max_durations.get(self.current_activity, None) if max_duration and duration > max_duration: logger.warning(f"⚠️ 活动持续时间过长: {self.current_activity.name} ({duration}分钟 > {max_duration}分钟)") # 发送提醒 if self.hardware_manager: self.hardware_manager.log_event( "activity_warning", f"活动持续时间过长: {self.current_activity.name} ({duration}分钟)", severity=2 ) def _check_scheduled_activities(self): """检查计划活动是否按时执行""" scheduled_activity = self.check_schedule() if scheduled_activity: logger.info(f"🕒 当前计划活动: {scheduled_activity}") # 如果当前状态不符合计划活动 if scheduled_activity == "sleep" and self.current_activity != ActivityState.SLEEPING: logger.warning("⚠️ 未按时睡觉") elif scheduled_activity.endswith("work") and self.current_activity != ActivityState.WORKING: logger.warning(f"⚠️ 未按时开始工作: {scheduled_activity}") def _check_system_health(self): """检查系统健康状况""" if not self.hardware_manager: return try: # 获取硬件指标 metrics = self.hardware_manager.get_performance_metrics() # 检查CPU温度 if metrics.get("cpu_temp", 0) > 80: logger.warning(f"⚠️ CPU温度过高: {metrics['cpu_temp']}°C") # 检查内存使用 if metrics.get("memory_usage", 0) > 90: logger.warning(f"⚠️ 内存使用过高: {metrics['memory_usage']}%") # 检查磁盘使用 if metrics.get("disk_usage", 0) > 90: logger.warning(f"⚠️ 磁盘使用过高: {metrics['disk_usage']}%") except Exception as e: logger.error(f"系统健康检查失败: {str(e)}") def suggest_activity(self) -> Dict: """根据当前时间和状态建议活动""" current_hour = datetime.datetime.now().hour suggestions = [] # 根据时间建议活动 if 5 <= current_hour < 9: suggestions.append({"activity": ActivityType.MEDITATE, "reason": "清晨是冥想的好时机"}) suggestions.append({"activity": ActivityType.EXERCISE, "reason": "早晨锻炼有助于提高精力"}) elif 9 <= current_hour < 12: suggestions.append({"activity": ActivityType.WORK, "reason": "上午是高效工作时间"}) elif 12 <= current_hour < 14: suggestions.append({"activity": ActivityType.MEAL, "reason": "午餐时间"}) elif 14 <= current_hour < 17: suggestions.append({"activity": ActivityType.STUDY, "reason": "下午适合学习新知识"}) elif 17 <= current_hour < 19: suggestions.append({"activity": ActivityType.EXERCISE, "reason": "傍晚锻炼有助于放松"}) elif 19 <= current_hour < 22: suggestions.append({"activity": ActivityType.SOCIAL, "reason": "晚上适合社交活动"}) suggestions.append({"activity": ActivityType.ENTERTAINMENT, "reason": "休闲娱乐时间"}) else: suggestions.append({"activity": ActivityType.MEDITATE, "reason": "睡前冥想有助于睡眠"}) suggestions.append({"activity": ActivityType.MAINTENANCE, "reason": "夜间系统维护"}) # 根据当前状态调整建议 if self.current_activity == ActivityState.WORKING: suggestions.append({"activity": ActivityType.NAP, "duration": 15, "reason": "短暂休息提高工作效率"}) # 随机选择一个建议 return random.choice(suggestions) if suggestions else {} def export_logs(self, file_path: Union[str, Path]): """导出活动日志到文件""" file_path = Path(file_path) try: with open(file_path, "w", encoding="utf-8") as f: json.dump(self.activity_log, f, indent=2, ensure_ascii=False) logger.info(f"📤 活动日志已导出到: {file_path}") return True except Exception as e: logger.error(f"导出日志失败: {str(e)}") return False def __del__(self): """析构函数,确保监控线程停止""" self.stop_monitoring() # 使用示例 if __name__ == "__main__": # 初始化日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 创建生活调度器 scheduler = LifeScheduler() print("=" * 60) print("生活调度器演示") print("=" * 60) # 设置特殊餐点 scheduler.set_meal_preference("breakfast", "高蛋白早餐") scheduler.set_meal_preference("dinner", "素食晚餐") # 模拟起床 print("\n模拟起床...") scheduler.wake_up() print("当前状态:", scheduler.get_current_state()) # 吃早餐 print("\n吃早餐...") scheduler.have_meal("breakfast") print("当前状态:", scheduler.get_current_state()) # 开始工作 print("\n开始工作...") scheduler.start_activity(ActivityType.WORK, duration_minutes=120) print("当前状态:", scheduler.get_current_state()) # 获取下一个计划活动 print("\n下一个计划活动:") print(scheduler.get_next_scheduled_activity()) # 获取建议活动 print("\n活动建议:") print(scheduler.suggest_activity()) # 获取最近活动 print("\n最近活动记录:") for activity in scheduler.get_recent_activities(3): print(f"{activity['timestamp']}: {activity['activity']}") print("=" * 60)
08-11
# E:\AI_System\web_ui\server.py import sys import os import time import logging import json import traceback import threading import platform import psutil import datetime from pathlib import Path from flask import Flask, jsonify, request, render_template from logging.handlers import TimedRotatingFileHandler from flask_socketio import SocketIO, emit # 在server.py中添加健康检查路由 from flask import jsonify @app.route('/system/health') def health_check(): """系统健康检查接口""" components = { 'ai_core': True, # 实际应替换为状态检测函数 'hardware_manager': True, 'scheduler': True, 'environment': True, 'evolution_monitor': True } status = all(components.values()) return jsonify( status="running" if status else "degraded", components=components, timestamp=datetime.now().isoformat() ) # ========== 配置系统 ========== class SystemConfig: def __init__(self): self.BASE_DIR = Path(__file__).resolve().parent.parent self.HOST = '127.0.0.1' self.PORT = 5000 self.LOG_LEVEL = 'INFO' self.SECRET_KEY = 'your_secret_key_here' self.DEBUG = True self.USE_GPU = False self.DEFAULT_MODEL = 'gpt-3.5-turbo' # 目录配置 self.LOG_DIR = self.BASE_DIR / 'logs' self.LOG_DIR.mkdir(parents=True, exist_ok=True) self.CONFIG_DIR = self.BASE_DIR / 'config' self.CONFIG_DIR.mkdir(parents=True, exist_ok=True) self.AGENT_PATH = self.BASE_DIR / 'agent' self.MODEL_CACHE_DIR = self.BASE_DIR / 'model_cache' self.MODEL_CACHE_DIR.mkdir(parents=True, exist_ok=True) def __str__(self): return f"SystemConfig(HOST={self.HOST}, PORT={self.PORT})" config = SystemConfig() # ========== 全局协调器 ========== coordinator = None def register_coordinator(coord): """注册意识系统协调器""" global coordinator coordinator = coord if coordinator and hasattr(coordinator, 'connect_to_ui'): coordinator.connect_to_ui(update_ui) def update_ui(event): """更新UI事件处理""" if 'socketio' in globals(): socketio.emit('system_event', event) # ========== 初始化日志系统 ========== def setup_logger(): """配置全局日志系统""" logger = logging.getLogger('WebServer') logger.setLevel(getattr(logging, config.LOG_LEVEL.upper(), logging.INFO)) # 日志格式 log_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # 文件日志处理器 (每天轮换,保留30天) file_handler = TimedRotatingFileHandler( config.LOG_DIR / 'web_server.log', when='midnight', backupCount=30, encoding='utf-8' ) file_handler.setFormatter(log_formatter) logger.addHandler(file_handler) # 控制台日志处理器 console_handler = logging.StreamHandler() console_handler.setFormatter(log_formatter) logger.addHandler(console_handler) # 安全日志处理装饰器 def safe_logger(func): def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except UnicodeEncodeError: new_args = [] for arg in args: if isinstance(arg, str): new_args.append(arg.encode('ascii', 'ignore').decode('ascii')) else: new_args.append(arg) return func(*new_args, **kwargs) return wrapper # 应用安全日志处理 for level in ['debug', 'info', 'warning', 'error', 'critical']: setattr(logger, level, safe_logger(getattr(logger, level))) return logger # 初始化日志 logger = setup_logger() # ========== 系统初始化 ========== class SystemInitializer: """负责初始化系统核心组件""" def __init__(self): self.base_dir = Path(__file__).resolve().parent.parent self.ai_core = None self.hardware_manager = None self.life_scheduler = None self.ai_agent = None self.start_time = time.time() self.environment_manager = None def initialize_system_paths(self): """初始化系统路径""" sys.path.insert(0, str(self.base_dir)) logger.info(f"项目根目录: {self.base_dir}") sub_dirs = ['agent', 'core', 'utils', 'config', 'cognitive_arch', 'environment'] for sub_dir in sub_dirs: full_path = self.base_dir / sub_dir if full_path.exists(): sys.path.insert(0, str(full_path)) logger.info(f"添加路径: {full_path}") else: logger.warning(f"目录不存在: {full_path}") def initialize_environment_manager(self): """初始化环境管理器""" try: # 环境管理器模拟实现 class EnvironmentManager: def __init__(self, config): self.config = config self.state = { 'temperature': 22.5, 'humidity': 45.0, 'light_level': 75, 'objects': [], 'last_updated': datetime.datetime.now().isoformat() } def start(self): logger.info("环境管理器已启动") def get_state(self): # 更新模拟数据 self.state['temperature'] = 20 + 5 * (time.time() % 10) / 10 self.state['humidity'] = 40 + 10 * (time.time() % 10) / 10 self.state['light_level'] = 70 + 10 * (time.time() % 10) / 10 self.state['last_updated'] = datetime.datetime.now().isoformat() return self.state def execute_action(self, action, params): logger.info(f"执行环境动作: {action} 参数: {params}") if action == "adjust_temperature": self.state['temperature'] = params.get('value', 22.0) return True elif action == "adjust_light": self.state['light_level'] = params.get('level', 70) return True return False env_config = {'update_interval': 1.0, 'spatial': {'grid_size': 1.0}} self.environment_manager = EnvironmentManager(env_config) self.environment_manager.start() logger.info("✅ 环境管理器初始化成功") return self.environment_manager except Exception as e: logger.error(f"❌ 环境管理器初始化失败: {str(e)}") logger.warning("⚠️ 环境交互功能将不可用") return None def initialize_ai_core(self): """初始化AI核心系统""" class AICore: def __init__(self, base_dir): self.base_dir = Path(base_dir) self.genetic_code = self.load_genetic_code() self.physical_state = { "health": 100, "energy": 100, "mood": "calm" } self.dependencies = self.scan_dependencies() def load_genetic_code(self): code_path = self.base_dir / "core" / "genetic_code.py" try: if not code_path.exists(): # 创建默认遗传代码文件 default_code = """# 默认遗传代码 class AICore: def __init__(self): self.version = "1.0.0" self.capabilities = ["learning", "reasoning", "problem_solving"] def evolve(self): print("系统正在进化...") """ with open(code_path, "w", encoding="utf-8") as f: f.write(default_code) with open(code_path, "r", encoding="utf-8") as f: return f.read() except Exception as e: logger.error(f"加载遗传代码失败: {str(e)}") return "# 默认遗传代码\nclass AICore:\n pass" def scan_dependencies(self): return { "nervous_system": "flask", "memory": "sqlite", "perception": "opencv", "reasoning": "transformers" } def mutate(self, new_code): try: code_path = self.base_dir / "core" / "genetic_code.py" with open(code_path, "w", encoding="utf-8") as f: f.write(new_code) return True, "核心代码更新成功,系统已进化" except Exception as e: return False, f"进化失败: {str(e)}" def wear_dependency(self, dependency_name, version): self.dependencies[dependency_name] = version return f"已穿戴 {dependency_name}@{version}" def get_state(self): return { "genetic_code_hash": hash(self.genetic_code), "dependencies": self.dependencies, "physical_state": self.physical_state, "hardware_environment": self.get_hardware_info() } def get_hardware_info(self): return { "cpu": platform.processor(), "cpu_cores": psutil.cpu_count(logical=False), "cpu_threads": psutil.cpu_count(logical=True), "memory_gb": round(psutil.virtual_memory().total / (1024 ** 3), 1), "storage_gb": round(psutil.disk_usage('/').total / (1024 ** 3), 1), "os": f"{platform.system()} {platform.release()}" } self.ai_core = AICore(self.base_dir) logger.info("✅ AI核心系统初始化完成") return self.ai_core def initialize_hardware_manager(self): """初始化硬件管理器""" try: # 硬件管理器模拟实现 class HardwareManager: def __init__(self): self.available_hardware = { "cpu": ["Intel i9-13900K", "AMD Ryzen 9 7950X", "Apple M2 Max"], "gpu": ["NVIDIA RTX 4090", "AMD Radeon RX 7900 XTX", "Apple M2 GPU"], "memory": [16, 32, 64, 128], "storage": ["1TB SSD", "2TB SSD", "4TB SSD", "8TB HDD"], "peripherals": ["4K Camera", "3D Scanner", "High-Fidelity Microphone"] } self.current_setup = { "cpu": platform.processor(), "gpu": "Integrated Graphics", "memory": round(psutil.virtual_memory().total / (1024 ** 3), 1), "storage": round(psutil.disk_usage('/').total / (1024 ** 3), 1) } def request_hardware(self, hardware_type, specification): if hardware_type not in self.available_hardware: return False, f"不支持硬件类型: {hardware_type}" if specification not in self.available_hardware[hardware_type]: return False, f"不支持的规格: {specification}" self.current_setup[hardware_type] = specification return True, f"已请求 {hardware_type}: {specification}。请管理员完成安装。" def get_current_setup(self): return self.current_setup def get_performance_metrics(self): return { "cpu_usage": psutil.cpu_percent(), "memory_usage": psutil.virtual_memory().percent, "disk_usage": psutil.disk_usage('/').percent, "cpu_temp": 45.0, "gpu_temp": 55.0, "network_io": { "sent": psutil.net_io_counters().bytes_sent, "received": psutil.net_io_counters().bytes_recv }, "last_updated": datetime.datetime.now().isoformat() } self.hardware_manager = HardwareManager() logger.info("✅ 硬件管理器初始化成功") return self.hardware_manager except Exception as e: logger.error(f"❌ 硬件管理器初始化失败: {str(e)}") logger.warning("⚠️ 使用内置简单硬件管理器") return None def initialize_life_scheduler(self): """初始化生活调度器""" try: # 生活调度器模拟实现 class LifeScheduler: def __init__(self): self.daily_schedule = { "wake_up": "07:00", "breakfast": "08:00", "lunch": "12:30", "dinner": "19:00", "sleep": "23:00" } self.current_activity = "awake" self.energy_level = 100 self.mood = "calm" self.activity_log = [] def wake_up(self): self.current_activity = "awake" self.log_activity("醒来") def have_meal(self, meal_type): self.current_activity = f"eating_{meal_type}" self.energy_level = min(100, self.energy_level + 20) self.log_activity(f"用餐: {meal_type}") def go_to_sleep(self): self.current_activity = "sleeping" self.log_activity("睡觉") def log_activity(self, activity): timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.activity_log.append(f"{timestamp} - {activity}") # 保留最近的100条记录 if len(self.activity_log) > 100: self.activity_log.pop(0) def adjust_schedule(self, adjustments): for activity, new_time in adjustments.items(): if activity in self.daily_schedule: self.daily_schedule[activity] = new_time def get_current_state(self): return { "current_activity": self.current_activity, "next_scheduled": self._get_next_scheduled(), "energy_level": self.energy_level, "mood": self.mood } def get_recent_activities(self, count=10): return self.activity_log[-count:] def _get_next_scheduled(self): now = datetime.datetime.now() current_time = now.strftime("%H:%M") # 找到下一个计划活动 schedule_times = sorted( [(k, v) for k, v in self.daily_schedule.items()], key=lambda x: x[1] ) for activity, time_str in schedule_times: if time_str > current_time: return f"{activity} at {time_str}" # 如果没有找到,返回第二天的第一个活动 return f"{schedule_times[0][0]} at {schedule_times[0][1]} tomorrow" self.life_scheduler = LifeScheduler() logger.info("✅ 生活调度器初始化成功") # 启动生活系统后台线程 life_thread = threading.Thread( target=self._update_life_status, daemon=True, name="LifeSystemThread" ) life_thread.start() logger.info("✅ 生活系统后台线程已启动") return self.life_scheduler except Exception as e: logger.error(f"❌ 生活调度器初始化失败: {str(e)}") return None def _update_life_status(self): logger.info("🚦 生活系统后台线程启动") while True: try: now = datetime.datetime.now() current_hour = now.hour current_minute = now.minute current_time = f"{current_hour:02d}:{current_minute:02d}" # 根据时间更新活动状态 if 7 <= current_hour < 8 and self.life_scheduler.current_activity != "awake": self.life_scheduler.wake_up() elif 12 <= current_hour < 13 and self.life_scheduler.current_activity != "eating_lunch": self.life_scheduler.have_meal("lunch") elif 19 <= current_hour < 20 and self.life_scheduler.current_activity != "eating_dinner": self.life_scheduler.have_meal("dinner") elif (23 <= current_hour or current_hour < 6) and self.life_scheduler.current_activity != "sleeping": self.life_scheduler.go_to_sleep() # 自然能量消耗 if self.life_scheduler.current_activity != "sleeping": self.life_scheduler.energy_level = max(0, self.life_scheduler.energy_level - 0.1) time.sleep(60) except Exception as e: logger.error(f"生活系统更新失败: {str(e)}", exc_info=True) time.sleep(300) def initialize_ai_agent(self): """初始化AI智能体""" try: # AI智能体模拟实现 class AutonomousAgent: def __init__(self, model_path, cache_dir, use_gpu, default_model): self.model_name = default_model self.cache_dir = cache_dir self.use_gpu = use_gpu self.conversation_history = {} def process_input(self, user_input, user_id): # 初始化用户对话历史 if user_id not in self.conversation_history: self.conversation_history[user_id] = [] # 添加用户输入到历史 self.conversation_history[user_id].append({"role": "user", "content": user_input}) # 生成AI响应(模拟) if "你好" in user_input or "hello" in user_input: response = "你好!我是AI助手,有什么可以帮您的吗?" elif "时间" in user_input: response = f"现在是 {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" elif "状态" in user_input: response = "系统运行正常,所有组件都在线。" else: response = f"我已收到您的消息: '{user_input}'。这是一个模拟响应,实际系统中我会分析您的问题并提供专业解答。" # 添加AI响应到历史 self.conversation_history[user_id].append({"role": "assistant", "content": response}) return response def get_status(self): return { "model": self.model_name, "cache_dir": str(self.cache_dir), "use_gpu": self.use_gpu, "active_conversations": len(self.conversation_history) } self.ai_agent = AutonomousAgent( model_path=config.AGENT_PATH, cache_dir=config.MODEL_CACHE_DIR, use_gpu=config.USE_GPU, default_model=config.DEFAULT_MODEL ) logger.info("✅ AI智能体初始化成功") return self.ai_agent except Exception as e: logger.error(f"❌ AI智能体初始化失败: {str(e)}") return None def start_evolution_monitor(self): def monitor(): while True: try: cpu_usage = psutil.cpu_percent() mem_usage = psutil.virtual_memory().percent # 根据系统负载调整AI状态 if cpu_usage > 80: self.ai_core.physical_state["energy"] = max(20, self.ai_core.physical_state["energy"] - 5) self.ai_core.physical_state["mood"] = "strained" elif cpu_usage < 30: self.ai_core.physical_state["energy"] = min(100, self.ai_core.physical_state["energy"] + 2) time.sleep(60) except Exception as e: logging.error(f"进化监控错误: {str(e)}") time.sleep(300) monitor_thread = threading.Thread(target=monitor, daemon=True) monitor_thread.start() logger.info("✅ 进化监控线程已启动") def initialize_all(self): logger.info("=" * 50) logger.info("🚀 开始初始化AI系统") logger.info("=" * 50) self.initialize_system_paths() self.initialize_ai_core() self.initialize_hardware_manager() self.initialize_life_scheduler() self.initialize_ai_agent() self.initialize_environment_manager() self.start_evolution_monitor() logger.info("✅ 所有系统组件初始化完成") return { "ai_core": self.ai_core, "hardware_manager": self.hardware_manager, "life_scheduler": self.life_scheduler, "ai_agent": self.ai_agent, "environment_manager": self.environment_manager } # ========== Flask应用工厂 ========== def create_app(): app = Flask( __name__, template_folder='templates', static_folder='static', static_url_path='/static' ) app.secret_key = config.SECRET_KEY system_initializer = SystemInitializer() components = system_initializer.initialize_all() app.config['SYSTEM_COMPONENTS'] = components app.config['START_TIME'] = system_initializer.start_time app.config['BASE_DIR'] = system_initializer.base_dir # 初始化SocketIO socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading') app.config['SOCKETIO'] = socketio # 注册路由 register_routes(app) register_error_handlers(app) return app, socketio # ========== 环境交互路由 ========== def register_environment_routes(app): @app.route('/environment') def environment_view(): return render_template('environment_view.html') @app.route('/api/environment/state', methods=['GET']) def get_environment_state(): env_manager = app.config['SYSTEM_COMPONENTS'].get('environment_manager') if not env_manager: return jsonify({"success": False, "error": "环境管理器未初始化"}), 503 try: state = env_manager.get_state() return jsonify(state) except Exception as e: app.logger.error(f"获取环境状态失败: {traceback.format_exc()}") return jsonify({"success": False, "error": str(e)}), 500 @app.route('/api/environment/action', methods=['POST']) def execute_environment_action(): env_manager = app.config['SYSTEM_COMPONENTS'].get('environment_manager') if not env_manager: return jsonify({"success": False, "error": "环境管理器未初始化"}), 503 try: data = request.json action = data.get('action') params = data.get('params', {}) if not action: return jsonify({"success": False, "error": "缺少动作参数"}), 400 success = env_manager.execute_action(action, params) return jsonify({"success": success, "action": action}) except Exception as e: app.logger.error(f"执行环境动作失败: {traceback.format_exc()}") return jsonify({"success": False, "error": str(e)}), 500 # ========== 环境状态广播 ========== def setup_environment_broadcast(app): socketio = app.config['SOCKETIO'] @socketio.on('connect', namespace='/environment') def handle_environment_connect(): app.logger.info('客户端已连接环境WebSocket') @socketio.on('disconnect', namespace='/environment') def handle_environment_disconnect(): app.logger.info('客户端已断开环境WebSocket') def broadcast_environment_state(): env_manager = app.config['SYSTEM_COMPONENTS'].get('environment_manager') if not env_manager: return while True: try: state = env_manager.get_state() socketio.emit('environment_update', state, namespace='/environment') time.sleep(1) except Exception as e: app.logger.error(f"环境状态广播失败: {str(e)}") time.sleep(5) broadcast_thread = threading.Thread( target=broadcast_environment_state, daemon=True, name="EnvironmentBroadcastThread" ) broadcast_thread.start() app.logger.info("✅ 环境状态广播线程已启动") # ========== 路由注册 ========== def register_routes(app): register_environment_routes(app) setup_environment_broadcast(app) @app.route('/') def index(): return render_template('agent_interface.html') @app.route('/status') def status(): try: components = app.config['SYSTEM_COMPONENTS'] status_data = { "server": { "status": "running", "uptime": time.time() - app.config['START_TIME'], "version": "1.0.0", "config": { "host": config.HOST, "port": config.PORT, "log_level": config.LOG_LEVEL, "default_model": config.DEFAULT_MODEL } }, "core": components['ai_core'].get_state(), "hardware": components['hardware_manager'].get_current_setup() } if components['environment_manager']: try: status_data["environment"] = components['environment_manager'].get_state() except Exception as e: status_data["environment"] = {"error": str(e)} if components['life_scheduler']: try: status_data["life_system"] = components['life_scheduler'].get_current_state() except Exception as e: status_data["life_system"] = {"error": str(e)} if components['ai_agent']: try: status_data["agent"] = components['ai_agent'].get_status() except Exception as e: status_data["agent"] = {"error": str(e)} return jsonify(status_data) except Exception as e: app.logger.error(f"获取状态失败: {traceback.format_exc()}") return jsonify({"error": "内部错误", "details": str(e)}), 500 # 核心系统路由 @app.route('/api/core/state') def get_core_state(): return jsonify(app.config['SYSTEM_COMPONENTS']['ai_core'].get_state()) @app.route('/api/core/mutate', methods=['POST']) def mutate_core(): data = request.get_json() new_code = data.get('genetic_code') if not new_code: return jsonify({"success": False, "error": "缺少遗传代码"}), 400 success, message = app.config['SYSTEM_COMPONENTS']['ai_core'].mutate(new_code) return jsonify({"success": success, "message": message}) @app.route('/api/core/wear', methods=['POST']) def wear_dependency(): data = request.get_json() dep_name = data.get('dependency') version = data.get('version', 'latest') if not dep_name: return jsonify({"success": False, "error": "缺少依赖名称"}), 400 result = app.config['SYSTEM_COMPONENTS']['ai_core'].wear_dependency(dep_name, version) return jsonify({"success": True, "message": result}) # 硬件管理路由 @app.route('/api/hardware/catalog') def get_hardware_catalog(): return jsonify(app.config['SYSTEM_COMPONENTS']['hardware_manager'].available_hardware) @app.route('/api/hardware/request', methods=['POST']) def request_hardware(): data = request.get_json() hw_type = data.get('type') spec = data.get('specification') if not hw_type or not spec: return jsonify({"success": False, "error": "缺少硬件类型或规格"}), 400 success, message = app.config['SYSTEM_COMPONENTS']['hardware_manager'].request_hardware(hw_type, spec) return jsonify({"success": success, "message": message}) @app.route('/api/hardware/current') def get_current_hardware(): return jsonify(app.config['SYSTEM_COMPONENTS']['hardware_manager'].get_current_setup()) # 生活系统路由 @app.route('/life') def life_dashboard(): return render_template('life_dashboard.html') @app.route('/api/life/status') def get_life_status(): components = app.config['SYSTEM_COMPONENTS'] if not components['life_scheduler']: return jsonify({"success": False, "error": "生活系统未初始化"}), 503 try: current_state = components['life_scheduler'].get_current_state() recent_activities = components['life_scheduler'].get_recent_activities(10) return jsonify({ "success": True, "current_activity": current_state.get("current_activity", "未知"), "next_scheduled": current_state.get("next_scheduled", "未知"), "recent_activities": recent_activities, "energy_level": current_state.get("energy_level", 100), "mood": current_state.get("mood", "平静") }) except Exception as e: app.logger.error(f"获取生活状态失败: {traceback.format_exc()}") return jsonify({"success": False, "error": str(e)}), 500 @app.route('/adjust_schedule', methods=['POST']) def adjust_schedule(): components = app.config['SYSTEM_COMPONENTS'] if not components['life_scheduler']: return jsonify({"success": False, "error": "生活系统未初始化"}), 503 try: data = request.json adjustments = data.get("adjustments", {}) valid_activities = ["wake_up", "breakfast", "lunch", "dinner", "sleep"] for activity, new_time in adjustments.items(): if activity not in valid_activities: return jsonify({"success": False, "error": f"无效的活动类型: {activity}"}), 400 if not isinstance(new_time, str) or len(new_time) != 5 or new_time[2] != ':': return jsonify({"success": False, "error": f"无效的时间格式: {new_time}"}), 400 components['life_scheduler'].adjust_schedule(adjustments) return jsonify({ "success": True, "message": "计划表已更新", "new_schedule": components['life_scheduler'].daily_schedule }) except Exception as e: app.logger.error(f"调整作息时间失败: {traceback.format_exc()}") return jsonify({"success": False, "error": str(e)}), 400 # 聊天路由 @app.route('/chat', methods=['POST']) def chat(): components = app.config['SYSTEM_COMPONENTS'] if not components['ai_agent']: return jsonify({"error": "Agent未初始化"}), 503 try: data = request.get_json() user_input = data.get('message', '') user_id = data.get('user_id', 'default') if not user_input: return jsonify({"error": "消息内容不能为空"}), 400 app.logger.info(f"聊天请求: 用户={user_id}, 内容长度={len(user_input)}") response = components['ai_agent'].process_input(user_input, user_id) return jsonify({"response": response}) except Exception as e: app.logger.error(f"聊天处理失败: {traceback.format_exc()}") return jsonify({"error": "聊天处理失败", "details": str(e)}), 500 # 家具管理路由 furniture_cache = {} CACHE_DURATION = 3600 # 1小时 @app.route('/api/furniture') def get_furniture(): try: room = request.args.get('room', 'workshop') app.logger.info(f"获取家具数据: 房间={room}") current_time = time.time() if room in furniture_cache and current_time - furniture_cache[room]['timestamp'] < CACHE_DURATION: return jsonify(furniture_cache[room]['data']) furniture_data = { "workshop": [ {"type": "desk", "position": {"x": 0, "y": -1.5, "z": -3}, "rotation": {"x": 0, "y": 0, "z": 0}}, {"type": "chair", "position": {"x": 0, "y": -1.5, "z": -1}, "rotation": {"x": 0, "y": 0, "z": 0}}, {"type": "bookshelf", "position": {"x": 3, "y": 0, "z": -3}, "rotation": {"x": 0, "y": 0, "z": 0}}, {"type": "computer", "position": {"x": 0.5, "y": -0.5, "z": -3.2}, "rotation": {"x": 0, "y": 0, "z": 0}} ], "living_room": [ {"type": "sofa", "position": {"x": 0, "y": 0, "z": -2}, "rotation": {"x": 0, "y": 0, "z": 0}}, {"type": "tv", "position": {"x": 0, "y": 1.5, "z": -3}, "rotation": {"x": 0, "y": 0, "z": 0}} ], "bedroom": [ {"type": "bed", "position": {"x": 0, "y": 0, "z": -3}, "rotation": {"x": 0, "y": 0, "z": 0}}, {"type": "nightstand", "position": {"x": 1.5, "y": 0, "z": -2.5}, "rotation": {"x": 0, "y": 0, "z": 0}} ] } furniture_cache[room] = { 'timestamp': current_time, 'data': furniture_data.get(room, []) } return jsonify(furniture_cache[room]['data']) except Exception as e: app.logger.error(f"获取家具数据失败: {traceback.format_exc()}") return jsonify({"error": "内部错误", "details": str(e)}), 500 # ========== 错误处理器 ========== def register_error_handlers(app): @app.errorhandler(404) def page_not_found(error): app.logger.warning(f"404错误: {request.path}") return jsonify({ "error": "资源未找到", "path": request.path, "method": request.method }), 404 @app.errorhandler(500) def internal_server_error(error): app.logger.error(f"500错误: {str(error)}") return jsonify({ "error": "服务器内部错误", "message": "系统遇到意外错误,请稍后重试" }), 500 @app.errorhandler(Exception) def handle_general_exception(error): app.logger.error(f"未处理异常: {traceback.format_exc()}") return jsonify({ "error": "未处理的异常", "type": type(error).__name__, "message": str(error) }), 500 # ========== WebSocket处理 ========== def setup_websocket_handlers(socketio): @socketio.on('connect') def handle_connect(): logger.info('客户端已连接') socketio.emit('system_status', {'status': 'ready'}) @socketio.on('disconnect') def handle_disconnect(): logger.info('客户端已断开连接') @socketio.on('user_message') def handle_user_message(data): user_id = data.get('user_id', 'guest') message = data.get('message', '') logger.info(f"收到来自 {user_id} 的消息: {message}") # 处理消息逻辑 response = f"已收到您的消息: {message}" # 如果有协调器,使用协调器处理 global coordinator if coordinator: try: response = coordinator.process_message(message) except Exception as e: logger.error(f"协调器处理消息失败: {str(e)}") socketio.emit('agent_response', { 'user_id': user_id, 'response': response }) # ========== 主程序入口 ========== if __name__ == '__main__': try: app, socketio = create_app() # 设置WebSocket处理器 setup_websocket_handlers(socketio) # 启动服务器 socketio.run( app, host=config.HOST, port=config.PORT, debug=config.DEBUG, use_reloader=False ) logger.info(f"服务器运行在 http://{config.HOST}:{config.PORT}") except KeyboardInterrupt: logger.info("服务器关闭") except Exception as e: logger.critical(f"服务器启动失败: {str(e)}") logger.error(traceback.format_exc()) 帮我改好 发我完整版哦
最新发布
08-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值