AI量化交易框架解析:从架构设计到实战部署

news2026/5/17 10:22:21
1. 项目概述一个AI驱动的加密资产对冲基金框架最近在GitHub上看到一个挺有意思的项目叫“ai-hedge-fund-crypto”。光看名字就能感受到一股浓浓的“量化AI加密”的混合气息。这其实是一个开源框架旨在帮助开发者或量化研究员构建一个自动化、智能化的加密资产交易系统其核心目标是模拟或实现一个对冲基金级别的投资策略。简单来说它不是一个现成的、拿来就能赚钱的“圣杯”策略而是一个工具箱和脚手架。它把构建一个完整量化交易系统所必需的各个模块——从数据获取、策略研究、风险控制到订单执行——都给你搭好了架子。你只需要往里面填充自己的“灵魂”也就是你的交易逻辑和AI模型就能快速跑起来一个属于自己的“AI对冲基金”雏形。这个项目解决的痛点非常明确降低量化交易的门槛尤其是AI策略的门槛。对于个人开发者或小团队而言从零开始搭建一个稳定、可靠、能处理实时市场数据、能对接交易所API、能管理多策略多资产、还能进行风险控制的系统工程量巨大且充满了各种“坑”。这个框架把基础设施的脏活累活都干了让你能更专注于策略研究本身。它适合谁呢首先是有一定编程基础最好是Python的量化交易爱好者或研究员。其次是对机器学习、深度学习在金融领域应用感兴趣的人。最后也是最重要的是那些不满足于简单手动交易或网格策略希望构建更复杂、更系统化交易逻辑的加密资产投资者。当然你必须清醒地认识到有了好的工具不等于就能盈利策略本身的有效性才是核心。2. 核心架构与设计思路拆解一个完整的量化交易系统尤其是对标对冲基金级别的系统其架构设计必须兼顾模块化、扩展性、稳定性和实时性。ai-hedge-fund-crypto这个项目的设计思路正是围绕这几个核心原则展开的。2.1 分层架构从数据到执行的全链路闭环典型的系统会采用分层或事件驱动的架构。我们可以将其抽象为以下几个核心层数据层这是整个系统的“眼睛”和“耳朵”。负责从各大加密货币交易所如币安、OKX、Coinbase等实时获取市场数据包括K线、深度、成交记录等。同时它还需要管理历史数据用于策略回测和模型训练。这一层的关键在于稳定性和低延迟。网络抖动、API限流、数据格式不统一都是常见的挑战。框架通常会封装好各大交易所的WebSocket和REST API客户端提供统一的数据接口。策略层这是系统的“大脑”。策略层接收数据层推送过来的市场信息根据内置的逻辑可能是简单的技术指标也可能是复杂的神经网络模型进行计算最终输出交易信号买、卖或持有。这一层是框架的“灵魂”所在也是使用者主要发挥创造力的地方。框架需要提供清晰的策略基类BaseStrategy定义好策略的生命周期初始化、数据回调、定时任务、清理让开发者能像搭积木一样编写策略。风险与组合管理层这是系统的“刹车”和“方向盘”。单个策略的信号不会直接变成订单。这一层负责管理整个投资组合的风险。例如头寸管理单一资产的最大仓位是多少整个账户的最大风险敞口是多少风险控制设置止损止盈、最大回撤限制、日亏损限额等。资金分配如果有多个策略在运行如何在不同策略间分配资金是平均分配还是根据风险调整 一个好的框架必须提供灵活的风险控制钩子允许用户在订单执行前进行干预。执行层这是系统的“手”。负责将经过风险层审核的交易信号转化为实际交易所的订单。这里涉及到订单类型市价单、限价单、拆单算法大单如何拆分成小单以减少市场冲击、滑点控制以及订单状态跟踪是否全部成交、部分成交。执行层的目标是以尽可能接近预期的价格完成交易同时避免对市场造成过大影响。绩效分析层这是系统的“后视镜”和“成绩单”。负责记录每一笔交易、每一天的资产变化并计算各种绩效指标夏普比率、最大回撤、年化收益率、胜率、盈亏比等。这一层对于策略迭代优化至关重要。框架通常会集成像pyfolio这样的专业库或者自己实现一套分析模块用于生成可视化的报告。ai-hedge-fund-crypto这类框架的价值就在于它清晰地定义了这些层的边界并提供了每一层的默认实现或接口让开发者可以快速集成而不是从Socket编程开始写起。2.2 事件驱动与回测引擎为了协调以上各层系统通常采用事件驱动的架构。市场数据到达、定时任务触发、订单状态更新这些都被封装成不同类型的事件Event放入一个中央事件队列Event Queue中。系统的心脏——事件循环Event Loop——会不断从队列中取出事件并分发给对应的事件处理器EventHandler比如策略的on_bar方法、风险模块的on_signal方法。这种设计的好处是解耦和灵活性。各模块之间不直接调用只通过事件通信便于单独测试和替换。例如你可以轻松地将执行层从“实盘交易所”切换到“模拟器”而不影响策略层的代码。另一个核心组件是回测引擎。在将策略投入真金白银之前必须在历史数据上验证其有效性。回测引擎需要模拟真实交易的环境点差与滑点在回测中注入合理的买卖价差和滑点避免“过度优化”产生不切实际的盈利。手续费精确计算交易所的阶梯手续费。未来函数确保策略在回测中无法使用“未来的数据”这是回测中最常见的错误之一。事件顺序严格模拟历史时间线上数据到达、策略计算、订单成交的先后顺序。一个健壮的回测引擎其复杂程度不亚于实盘系统。ai-hedge-fund-crypto框架如果成熟其回测和实盘的代码共享率会非常高真正做到“回测即实盘实盘即回测”。3. 核心模块深度解析与实操要点理解了整体架构我们再来深入看看几个最关键模块的实现细节和实操中会遇到的问题。3.1 数据模块稳定与效率的基石数据模块的首要任务是提供稳定、统一、高效的数据流。对于加密货币市场7x24小时交易数据量巨大且波动剧烈设计上要考虑以下几点1. 多数据源与冗余框架不会只依赖一个数据源。通常会同时接入交易所官方API、以及一些专业的金融市场数据供应商如Kaiko, CryptoCompare作为备份或补充。对于关键数据如K线可能会实现一个简单的数据融合逻辑当主源断开时自动切换备用源并记录数据差异以备核查。2. 数据标准化不同交易所的API返回格式各异。框架内部必须定义一套统一的数据模型DataModel。例如一个标准的BarK线对象可能包含以下字段dataclass class Bar: symbol: str # 交易对如 BTC/USDT exchange: str # 交易所 interval: str # 时间间隔如 1m, 1h timestamp: int # 开盘时间戳毫秒 open: float high: float low: float close: float volume: float # 成交量 turnover: float # 成交额可选所有从交易所获取的原始数据都会被转换Adapter模式成这个标准模型供上层策略使用。这极大地简化了策略代码使其不依赖于特定交易所。3. 实时数据流处理对于高频或中频策略使用WebSocket是必须的。框架需要维护WebSocket连接的健康状态处理断线重连、心跳保活、消息压缩等问题。一个常见的实践是为每个交易对或每种数据类型如K线、深度、成交建立独立的连接或订阅通道避免单个连接负载过重。实操心得数据落地与回放无论实时数据多稳定一定要本地落盘。这不仅是回测的需要更是排查问题的“黑匣子”。框架应该提供便捷的数据存储功能如存入SQLite、Parquet文件或时序数据库InfluxDB。此外实现一个“数据回放”工具极其有用。当策略出现异常时你可以用某一天的历史数据精确地重新运行一遍系统观察每一步的状态变化这对于调试复杂的事件驱动逻辑是无可替代的。3.2 策略模块AI策略的集成范式这是框架最吸引人的部分即如何优雅地集成AI/ML模型。一个典型的AI策略工作流如下1. 特征工程与数据预处理策略接收到市场数据后第一步是构建模型所需的特征Features。这可能包括技术指标RSI, MACD, 布林带等。统计特征过去N根K线的收益率、波动率、偏度等。订单簿特征买卖盘口的不平衡度、深度加权中间价等。另类数据社交媒体情绪指数、链上数据如交易所净流入等。 框架可以提供一些常用的特征计算函数库但更高级的特征需要开发者自己实现。2. 模型推理与信号生成特征准备好后送入训练好的AI模型进行推理。这里的关键是性能。如果模型比较复杂如深度学习模型在Python中直接调用可能会成为性能瓶颈。常见的优化方案有模型序列化与加载使用joblib或torch.save保存模型在策略初始化时加载到内存避免每次推理都重新加载。批量预测如果策略频率不是极高可以缓存一定数量的数据进行小批量预测比单次预测效率更高。模型服务化将模型部署为一个独立的微服务如使用TensorFlow Serving或TorchServe策略通过RPC或HTTP调用。这实现了策略逻辑与模型计算的解耦便于模型单独更新和扩展。3. 信号到订单的映射模型输出的可能是一个概率值如上涨概率为0.7或一个具体的价格预测值。你需要定义一套规则将模型的输出映射为具体的交易指令。例如如果上涨概率 0.65则生成“买入”信号。如果下跌概率 0.65则生成“卖出”信号。否则平仓或持有。 这个映射规则本身也是策略的一部分需要反复测试和优化。注意事项避免“回测幻觉”在AI策略回测中最大的陷阱是信息泄露。你必须确保在回测的任何一个时间点模型所使用的特征数据都只能来自于该时间点“之前”或“当时”的数据绝不能包含未来信息。例如计算20日均线在回测到2023-01-21这根K线时只能使用2023-01-01到2023-01-21的数据来计算。这要求特征计算逻辑在回测引擎中要被严格地“按时间点”执行。一个健壮的框架其回测引擎必须能正确处理这种时序依赖关系。3.3 风险与执行模块资金安全的守护者风险模块像是系统的免疫系统。它应该在订单到达执行层之前进行拦截和过滤。一个基本的风控检查清单应包括仓位检查新订单是否会导致单一标的仓位超过上限总仓位是否超过账户净值的一定比例订单频率与数量限制防止程序出错导致“订单风暴”在短时间内发出海量订单。止损止盈跟踪每个持仓头寸当价格触及预设的止损/止盈位时自动生成平仓订单。日风控检查当日累计亏损是否超过阈值如果超过则停止所有策略的新开仓。在ai-hedge-fund-crypto这类框架中风险模块通常被设计成一系列可插拔的“过滤器”RiskFilter。每个过滤器独立检查订单任何一个过滤器拒绝订单就不会被发送。执行模块的挑战在于处理真实世界的“摩擦”。在回测中订单总是能以“当前K线的收盘价”瞬间成交。但在实盘中这是不可能的。执行模块需要考虑订单类型选择市价单保证成交但滑点大限价单控制成本但可能不成交。框架需要支持多种订单类型。智能订单路由如果同一个标的在多个交易所交易执行模块应能根据价格、深度、手续费自动选择最优的交易所下单。订单生命周期管理跟踪订单状态已提交、部分成交、完全成交、已取消并更新策略和风控模块的持仓状态。对于限价单还需要考虑超时未成交的撤单和重试逻辑。一个高级的执行模块甚至会实现交易成本分析模型在下单前预估滑点和手续费帮助策略做出更优的决策。4. 从零搭建与核心环节实现假设我们现在要利用ai-hedge-fund-crypto或其思想来搭建一个简单的AI策略系统。以下是一个高度简化的实操流程重点展示核心环节。4.1 环境准备与项目初始化首先你需要一个干净的Python环境建议3.8以上。使用虚拟环境是必须的。# 创建并激活虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 假设框架已发布到PyPI或者我们从GitHub克隆 pip install ai-hedge-fund-crypto # 或者 git clone ... pip install pandas numpy scikit-learn # 常用数据分析与机器学习库 # 如果你用深度学习还需要 torch/tensorflow pip install torch项目目录结构可以这样组织my_ai_fund/ ├── config/ # 配置文件 │ ├── config.yaml # 主配置 │ └── strategy_config/ # 各策略配置 ├── data/ # 本地数据存储 │ ├── raw/ # 原始数据 │ └── processed/ # 处理后的特征数据 ├── models/ # 训练好的AI模型文件 ├── strategies/ # 策略代码 │ └── my_ml_strategy.py ├── research/ # 研究笔记本用于特征分析和模型训练 │ └── model_training.ipynb ├── tests/ # 单元测试 └── main.py # 系统主入口4.2 实现一个简单的机器学习策略我们以一个“基于简单特征和逻辑回归的涨跌预测策略”为例。第一步在研究环境research/中训练模型。# research/model_training.ipynb import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import joblib # 1. 加载历史数据假设已经从框架的数据模块获取并保存为CSV df pd.read_csv(../data/processed/btc_usdt_1h_features.csv, index_coltimestamp) df.index pd.to_datetime(df.index) # 2. 定义标签未来N根K线的涨跌 look_forward 4 # 预测未来4小时 df[label] (df[close].shift(-look_forward) df[close]).astype(int) df df.dropna() # 3. 选择特征 feature_cols [rsi_14, macd, bb_width, volume_ma_ratio] X df[feature_cols].values y df[label].values # 4. 划分训练集和测试集注意时序不能用随机划分 split_idx int(len(X) * 0.7) X_train, y_train X[:split_idx], y[:split_idx] X_test, y_test X[split_idx:], y[split_idx:] # 5. 训练模型 model LogisticRegression() model.fit(X_train, y_train) # 6. 评估在测试集上 accuracy model.score(X_test, y_test) print(fTest Accuracy: {accuracy:.4f}) # 7. 保存模型 joblib.dump(model, ../models/lr_btc_1h_v1.pkl) joblib.dump(feature_cols, ../models/lr_btc_1h_feature_cols.pkl) # 保存特征列顺序第二步在策略模块中集成这个模型。# strategies/my_ml_strategy.py import joblib import numpy as np from core.strategy import BaseStrategy from core.event import BarEvent class MyMLStrategy(BaseStrategy): 一个简单的机器学习策略示例 def __init__(self, config): super().__init__(config) self.symbol config.get(symbol, BTC/USDT) self.model_path config.get(model_path) self.feature_cols_path config.get(feature_cols_path) # 加载模型和特征列 self.model joblib.load(self.model_path) self.feature_cols joblib.load(self.feature_cols_path) # 初始化数据缓存用于计算特征 self.data_window [] # 缓存最近的K线数据 def on_bar(self, bar: BarEvent): 当收到一根新的K线时触发 # 1. 确保是我们关注的交易对 if bar.symbol ! self.symbol: return # 2. 更新数据窗口例如保留最近100根K线 self.data_window.append({ open: bar.open, high: bar.high, low: bar.low, close: bar.close, volume: bar.volume }) if len(self.data_window) 100: self.data_window.pop(0) # 3. 检查是否有足够数据计算特征例如需要至少20根K线计算RSI if len(self.data_window) 30: self.logger.info(数据不足等待中...) return # 4. 计算当前特征向量 current_features self._calculate_features() # 5. 模型预测 # 将特征转换为模型输入的格式2D数组 feature_array np.array([current_features]) prediction_prob self.model.predict_proba(feature_array)[0] # 获取概率 # 假设模型输出 [下跌概率 上涨概率] up_prob prediction_prob[1] # 6. 根据概率生成信号 signal 0 # 0: 无信号/平仓 1: 买入 -1: 卖出 if up_prob 0.65: signal 1 self.logger.info(f生成买入信号上涨概率: {up_prob:.3f}) elif up_prob 0.35: signal -1 self.logger.info(f生成卖出信号上涨概率: {up_prob:.3f}) # 7. 如果有信号提交给风险模块审核 if signal ! 0: order_event self._create_order_event(signal, bar.close) self.send_event(order_event) def _calculate_features(self): 根据缓存的数据窗口计算特征 # 这里是一个简化的示例实际计算可能更复杂 closes [d[close] for d in self.data_window] volumes [d[volume] for d in self.data_window] # 计算RSI (简化版) gains [] losses [] for i in range(1, len(closes)): change closes[i] - closes[i-1] if change 0: gains.append(change) losses.append(0) else: gains.append(0) losses.append(abs(change)) avg_gain np.mean(gains[-14:]) if len(gains) 14 else 0 avg_loss np.mean(losses[-14:]) if len(losses) 14 else 1e-6 # 避免除零 rsi 100 - (100 / (1 avg_gain / avg_loss)) # 计算其他特征... # ... # 按照训练时保存的特征列顺序返回 return [rsi, 0.02, 0.05, 1.2] # 示例值实际需计算 def _create_order_event(self, signal, price): 根据信号创建订单事件 from core.event import OrderEvent order OrderEvent() order.symbol self.symbol order.order_type MARKET # 市价单 order.quantity self._calculate_position_size(price) # 计算下单量 order.direction LONG if signal 1 else SHORT return order def _calculate_position_size(self, price): 根据凯利公式或固定比例计算仓位 # 简化使用账户净值的2% account_equity self.portfolio_manager.get_equity() risk_per_trade 0.02 position_value account_equity * risk_per_trade quantity position_value / price return round(quantity, 6) # 根据交易对精度取舍第三步配置与启动系统。在主配置文件config/config.yaml中我们需要配置策略、数据源、风控等参数。# config/config.yaml main: mode: paper_trading # 模式backtest, paper_trading, live_trading start_date: 2024-01-01 end_date: 2024-06-01 initial_capital: 10000.0 # 初始资金USDT data: feeds: - exchange: binance symbols: [BTC/USDT, ETH/USDT] channels: [kline_1h] # 订阅1小时K线 storage: type: csv # 数据存储方式 path: ./data/ strategies: - name: my_ml_strategy class: strategies.my_ml_strategy.MyMLStrategy symbols: [BTC/USDT] config: model_path: ./models/lr_btc_1h_v1.pkl feature_cols_path: ./models/lr_btc_1h_feature_cols.pkl risk: max_position_per_symbol: 0.3 # 单一标的最大仓位比例占净资产 max_drawdown: 0.15 # 最大回撤限制 daily_loss_limit: 0.05 # 单日最大亏损比例 execution: exchange: binance api_key: YOUR_API_KEY # 实盘时需要模拟盘可留空 api_secret: YOUR_API_SECRET paper_account: true # 模拟交易最后在main.py中启动整个系统# main.py import yaml from core.engine import TradingEngine def main(): # 加载配置 with open(config/config.yaml, r) as f: config yaml.safe_load(f) # 创建交易引擎 engine TradingEngine(config) # 初始化所有模块数据、策略、风控、执行 engine.initialize() # 开始运行回测或实盘 engine.run() # 运行结束后生成绩效报告 if engine.mode backtest: engine.generate_report() if __name__ __main__: main()5. 常见问题、排查技巧与进阶思考在实际开发和运行这样一个系统时你会遇到无数的问题。下面记录一些典型问题和排查思路。5.1 数据与回测相关问题问题1回测结果完美实盘一塌糊涂。这是量化交易中最经典的“坑”。原因可能包括未来函数在回测中策略不小心使用了未来数据。比如在计算2023-01-21的指标时用到了2023-01-21收盘之后的数据。排查仔细检查所有特征计算、数据对齐的逻辑确保在回测引擎中任何操作都严格基于“当前时刻”及之前的数据。忽略交易成本回测时没加手续费和滑点或者设置得过低。解决在回测中采用更保守的成本模型比如使用交易所的最高手续费档位并加入一个固定的滑点如0.1%。数据质量回测使用的历史数据可能有错误如异常值、缺失值或者与实盘数据源不一致清洗规则不同。解决对历史数据进行严格的清洗和验证并尽可能使用与实盘相同的数据源进行回测。问题2WebSocket连接频繁断开数据丢失。原因交易所API有连接数、订阅频率限制网络不稳定。解决实现健壮的重连机制在WebSocket客户端中捕获断开异常等待几秒后自动重连并重新订阅频道。心跳保活定期向服务器发送Ping消息保持连接活跃。连接池管理不要为每个交易对都创建独立连接合理合并订阅到少数几个连接中。数据补全重连后检查是否有数据缺口必要时通过REST API补拉历史数据。5.2 策略与模型相关问题问题3AI模型在实盘中性能衰减严重。原因市场状态发生了结构性变化导致模型训练所依赖的统计规律失效即“过拟合”了过去。解决持续再训练定期如每周用最新的数据重新训练模型。在线学习如果模型支持可以实现在线学习用新数据微调模型参数。集成学习使用多个不同类型或不同时间窗口训练的模型进行集成预测降低单一模型失效的风险。设置模型失效监控跟踪模型在实盘中的预测准确率当低于某个阈值时自动切换到备用策略或停止交易。问题4策略逻辑出现Bug发出异常订单。预防单元测试为策略的核心计算函数如特征计算、信号生成编写详尽的单元测试。模拟盘验证任何新策略或策略修改必须在模拟盘环境中运行至少一个完整的市场周期如牛熊转换观察其行为。风控熔断在风险模块设置严格的订单频率和数量限制一旦策略失控风控能第一时间拦截。排查当异常发生时立即检查系统日志。一个良好的日志系统应该记录下策略收到每个数据点时的内部状态如特征值、预测概率、信号便于事后复盘。5.3 系统与运维问题问题5如何管理多个策略一个成熟的系统往往同时运行多个策略。你需要一个策略管理器Strategy Manager来负责动态加载/卸载策略在不重启主程序的情况下更新策略代码。资金分配根据策略的夏普比率、当前波动性等因素动态调整分配给每个策略的资金权重。冲突处理如果两个策略对同一标的发出相反方向的信号需要有一套仲裁规则。问题6如何监控系统健康状态你不能一直盯着日志。需要建立监控告警系统关键指标监控程序CPU/内存占用、数据延迟、订单成交率、账户净值变化。异常告警通过邮件、钉钉、Telegram Bot等方式在以下情况发出警报程序异常退出、风控触发、长时间无订单成交、单日亏损超阈值。仪表盘使用Grafana等工具将关键指标可视化一目了然。问题7实盘部署在哪里个人电脑最不推荐。网络不稳定电脑休眠会中断程序。云服务器主流选择。选择离交易所服务器地理位置近的机房如香港、新加坡以降低网络延迟。确保服务器有公网静态IP并做好安全防护防火墙、密钥登录。托管服务有些量化平台提供策略托管服务但通常不够灵活且可能涉及策略代码安全的问题。构建一个ai-hedge-fund-crypto这样的系统是一个庞大的工程。它融合了软件工程、数据科学和金融学的知识。这个开源框架提供了一个绝佳的起点和设计范本。但请记住最核心的阿尔法Alpha永远来自于你对市场的独特理解和不断迭代的策略逻辑。工具能让你跑得更快、更稳但方向需要你自己来把握。在真正投入大量资金之前请务必用模拟盘和小资金进行长期的、严苛的测试。量化交易是一场关于纪律、耐心和持续学习的马拉松而不是一场靠一个神奇代码就能取胜的短跑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2621238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…