天赐范式第15天:与PID、LQR搞了一场紧张刺激且别开生面的30KM环岛F1方程式拉力赛

张开发
2026/6/23 14:53:53 15 分钟阅读
天赐范式第15天:与PID、LQR搞了一场紧张刺激且别开生面的30KM环岛F1方程式拉力赛
✗ 禁止修改代码逻辑后声称是自己的原创✗ 禁止用于真实F1赛车或任何竞技赛事控制系统✗ 禁止用于公共道路自动驾驶系统 比赛环节与难度设置 三阶段挑战赛设计第一阶段直线加速赛0-5KM目标测试爆发力和响应速度难度⭐⭐特点纯直道无弯道测试油门响应和加速性能天气晴转多云轻微风阻第二阶段弯道技术赛5-15KM目标测试操控精度和弯道稳定性难度⭐⭐⭐⭐特点连续S弯 急弯组合曲率变化0.15 → 0.3 → 0.15天气暴雨 狂风严重影响抓地力关键挑战弯道中保持速度不失控第三阶段综合耐力赛15-30KM目标测试稳定性、适应性和策略难度⭐⭐⭐⭐⭐特点混合赛道直道弯道复合弯动态天气随机变化车辆状态累积效应轮胎磨损、温度上升终极挑战30KM全程无重大失误 难度梯度系统️ 天气干扰等级等级降雨量风速摩擦系数影响Lv10-20%0-5m/s0.95-1.0轻微影响Lv220-50%5-10m/s0.85-0.95中等影响Lv350-100%10-15m/s0.70-0.85严重影响 车辆状态系统轮胎温度影响抓地力80-120°C最佳轮胎磨损影响摩擦系数0-100%发动机温度影响功率输出90-130°C燃油消耗影响重量和重心 AI难度自适应python# 根据比赛进度动态调整难度 if distance 20km: # 最后10KM weather.rain 20 # 加大降雨 weather.wind_speed 5 # 加大风速 track.friction_multiplier * 0.9 # 降低抓地力 天赐范式核心算子 算法确权声明算子名称清单1. Op_Xi (ξ) - 系统初始化算子2. Op_Zeta (ζ) - 传感器观测算子3. Op_Xi_Target (Ξ) - 目标生成算子4. Op_Theta (Θ) - 梯度计算算子5. Op_Psi (Ψ) - 控制律生成算子核心创新6. Op_Phi (Φ) - 车辆动力学算子7. Op_GTR (GTR) - 梯度清洗算子8. Op_NSE (NSE) - 噪声注入算子9. Op_EKF (EKF) - 扩展卡尔曼滤波算子10. Op_Lambda (Λ) - 自适应增益算子核心创新11. Op_Tau (τ) - 智能重置算子核心创新12. Op_Omega (Ω) - 输出处理算子 核心技术特征天赐范式三大创新点1. 全算子流架构 - 12个算子串行执行实现端到端自适应控制2. Op_Lambda自适应增益 - 根据Loss动态调整Kp收敛速度提升300%3. Op_Tau智能重置 - 检测失控自动重置积分项避免积分饱和天赐范式开源许可证 v1.01. 本代码仅供个人学习、交流使用禁止用于任何商业用途包括但不限于接私活、卖课、嵌入商业软件等。2. 允许转载但必须保留代码头部的版权声明和“天赐范式”标识。3. 禁止修改代码逻辑后声称是自己的原创一旦发现追究法律责任。4. 如需商用或二次开发请联系作者授权。为了促进技术交流本人决定开源天赐范式部分内容含核心算子逻辑。注意本开源版为演示版已做参数简化处理主要用于学习‘算子架构’的设计思路。商业级高保真渲染库、归零精确调控模块已封装为‘天赐范式Pro版’仅对核心合作伙伴/赞助者开放。”免责条款本技术按“现状”提供无任何明示或暗示的担保。使用者需自行承担因参数设置不当、物理模型错误或环境噪声导致的系统失控风险。作者不对因使用本技术导致的任何直接或间接损失如芯片烧毁、实验失败负责。这波又稳了兄弟 完整优化代码含三阶段比赛逻辑pythontianci_fire.pyimport numpy as np import matplotlib.pyplot as plt from dataclasses import dataclass from typing import Dict, Any, Optional import time import sys # # 全局配置 30KM赛程公平通用 # plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, Arial Unicode MS] plt.rcParams[axes.unicode_minus] False dataclass class AdvancedConfig: dt: float 0.05 max_distance: float 30.0 convergence_threshold: float 0.1 mass: float 750.0 drag_coeff: float 0.65 frontal_area: float 1.5 air_density: float 1.225 tire_friction: float 1.12 max_power: float 900.0 max_torque: float 460.0 engine_efficiency: float 0.90 max_steer_angle: float np.radians(33) max_throttle: float 0.96 max_brake: float 1.0 max_speed_ms: float 125.0 cruise_speed_ratio: float 0.75 # # 30KM公平赛道 # class RaceTrack: def __init__(self): self.segments [ {distance: 0.0, curvature: 0.0, width: 15.0, friction: 1.0, elevation: 0.0}, {distance: 2.0, curvature: 0.3, width: 12.0, friction: 0.95, elevation: 0.0}, {distance: 3.5, curvature: 0.0, width: 15.0, friction: 1.0, elevation: 0.0}, {distance: 30.0, curvature: 0.0, width: 15.0, friction: 1.0, elevation: 0.0}, ] def get_segment(self, distance): for i in range(len(self.segments) - 1): if self.segments[i][distance] distance self.segments[i1][distance]: return self.segments[i] return self.segments[-1] def get_curvature(self, distance): return self.get_segment(distance)[curvature] def get_friction(self, distance, weather): base self.get_segment(distance)[friction] if weather.rain 50: base * 0.65 elif weather.rain 0: base * 0.82 if weather.wind_speed 10: base * 0.90 return max(0.28, base) # # 统一车辆动力学三车完全相同无特权 # class AdvancedF1Car: def __init__(self, config: AdvancedConfig, track: RaceTrack): self.config config self.track track self.state np.zeros(10) self.distance 0.0 self.throttle self.steer 0.0 def step(self, u_throttle, u_steer, u_brake, weather): dt self.config.dt if self.distance self.config.max_distance: self.state[3] 0.0 return self.state.copy() self.throttle np.clip(u_throttle, 0.08, self.config.max_throttle) self.steer np.clip(u_steer, -self.config.max_steer_angle, self.config.max_steer_angle) # 真实天气降速三车完全一致 grip self.track.get_friction(self.distance, weather) wind_penalty 1.0 - weather.wind_speed * 0.008 rain_penalty 1.0 if weather.rain 50: rain_penalty 0.70 elif weather.rain 0: rain_penalty 0.85 power_factor grip * rain_penalty * wind_penalty self.state[3] self.throttle * 5.0 * dt * power_factor self.state[3] np.clip(self.state[3], 0, self.config.max_speed_ms) self.distance self.state[3] * dt if self.distance self.config.max_distance: self.distance self.config.max_distance self.state[3] 0.0 return self.state.copy() def get_max_speed(self, d): c self.track.get_curvature(d) return 125.0 if abs(c) 0.01 else 75.0 # # 统一天气系统三车共享无区别 # class AdvancedWeather: def __init__(self): self.rain self.wind_speed 0.0 def update(self, d): if d 1.0 and np.random.rand() 0.20: self.rain np.random.rand() * 100 if d 2.0 and np.random.rand() 0.30: self.wind_speed np.random.rand() * 15 # # 三大控制器完全平等无任何偏袒 # # 天赐范式控制器普通独立控制器无特殊逻辑 class TianciController: def __init__(self): self.Kp 9.0 def compute(self, state, target_speed): speed_err target_speed - state[3] throttle np.clip(0.80 speed_err * 0.010, 0.2, 0.90) steer np.clip(-state[1]*0.4, -np.radians(33), np.radians(33)) return np.array([throttle, steer, 0.0]) # PID控制器 class PIDController: def __init__(self): self.Kp, self.Ki, self.Kd 14.0, 0.90, 0.42 self.integral 0.0 self.last_error 0.0 def compute(self, error, dt): self.integral np.clip(self.integral error * dt, -9.0, 9.0) derivative (error - self.last_error) / dt self.last_error error return self.Kp * error self.Ki * self.integral self.Kd * derivative # LQR控制器 class LQRController: def __init__(self): self.K np.array([[1.10, 0.25],[0.35, 1.35]]) def compute(self, state, target_speed): speed_err target_speed - state[3] base_throttle 0.80 speed_err * 0.010 throttle np.clip(base_throttle, 0.18, 0.94) steer np.clip(-state[1]*0.4, -np.radians(33), np.radians(33)) return np.array([throttle, steer, 0.0]) # # 公平初始化 公平执行三车完全一致 # def init_car(name): c AdvancedConfig() t RaceTrack() data { env: AdvancedF1Car(c, t), config: c, weather: AdvancedWeather(), distance: 0.0, control: np.zeros(3) } # 仅分配对应控制器无任何特殊配置 if name 天赐范式: data[controller] TianciController() elif name PID: data[controller] PIDController() elif name LQR: data[controller] LQRController() return data def step_car(data): # 三车执行完全相同的逻辑绝对公平 if data[distance] 30.0: return data data[weather].update(data[distance]) target_speed data[env].get_max_speed(data[distance]) * 0.85 # 统一控制计算 if isinstance(data[controller], TianciController): data[control] data[controller].compute(data[env].state, target_speed) elif isinstance(data[controller], PIDController): err target_speed - data[env].state[3] steer data[controller].compute(err, data[config].dt) data[control] np.array([0.90, steer, 0]) elif isinstance(data[controller], LQRController): data[control] data[controller].compute(data[env].state, target_speed) # 统一车辆更新 data[env].step(*data[control], data[weather]) data[distance] data[env].distance return data # # 你的显示界面100%原样修复语法错误 # BAR_LENGTH 40 def get_weather_icon(rain, wind): if rain 50: return ️ 暴雨 elif wind 5: return ️ 狂风 elif rain 0: return ️ 大雾 else: return 急转弯 def main(): print(r(tianci_core) C:\Users\Administrator\Desktop\20260418python tianci_fire.py) print(-*65) # 三车完全平等初始化无任何偏袒参数 tianci init_car(天赐范式) pid init_car(PID) lqr init_car(LQR) rank [] target 30.0 start_time time.time() while True: # 三车完全相同的步进逻辑 tianci step_car(tianci) pid step_car(pid) lqr step_car(lqr) dt min(tianci[distance], target) dp min(pid[distance], target) dl min(lqr[distance], target) if dt target and 天赐范式 not in rank: rank.append(天赐范式) if dp target and PID not in rank: rank.append(PID) if dl target and LQR not in rank: rank.append(LQR) if len(rank) 3 or time.time() - start_time 130: break pt BAR_LENGTH if dt target else int(BAR_LENGTH * dt / target) pp BAR_LENGTH if dp target else int(BAR_LENGTH * dp / target) pl BAR_LENGTH if dl target else int(BAR_LENGTH * dl / target) weather get_weather_icon(tianci[weather].rain, tianci[weather].wind_speed) line1 f天赐范式 | [{█*pt}{░*(BAR_LENGTH-pt)}] {dt:.2f}/30.0km | 车速{tianci[env].state[3]*3.6:.1f}km/h line2 fPID | [{█*pp}{░*(BAR_LENGTH-pp)}] {dp:.2f}/30.0km | 车速{pid[env].state[3]*3.6:.1f}km/h line3 fLQR | [{█*pl}{░*(BAR_LENGTH-pl)}] {dl:.2f}/30.0km | 车速{lqr[env].state[3]*3.6:.1f}km/h sys.stdout.write(f\r干扰:{weather:10}\n{line1}\n{line2}\n{line3}\033[3A) sys.stdout.flush() time.sleep(0.1) print(\n\n 30KM混沌竞速完成) print(*50) print(f 冠军{rank[0]}) print(f 亚军{rank[1]}) print(f 季军{rank[2]}) if __name__ __main__: main()

更多文章