当前位置: 首页 > news >正文

基于DDPG算法的股票量化交易

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

        **《------往期经典推荐------》**

项目名称
1.【基于PyQT+FaceNet卷积神经网络实现的学生人脸识别考勤系统】
2.【卫星图像道路检测DeepLabV3Plus模型】
3.【GAN模型实现二次元头像生成】
4.【CNN模型实现mnist手写数字识别】
5.【fasterRCNN模型实现飞机类目标检测】
6.【CNN-LSTM住宅用电量预测】
7.【VGG16模型实现新冠肺炎图片多分类】
8.【AlexNet模型实现鸟类识别】
9.【DIN模型实现推荐算法】
10.【FiBiNET模型实现推荐算法】
11.【钢板表面缺陷检测基于HRNET模型】

1. 项目简介

项目“A064-基于DDPG算法的股票量化交易”旨在利用深度强化学习技术构建智能化股票交易系统,优化投资组合管理和交易策略。该项目基于深度确定性策略梯度(DDPG)算法,它是一种结合了策略梯度和Q学习的深度强化学习方法,适用于连续动作空间的任务。在金融交易领域,股票市场的复杂性和波动性使得传统的交易策略往往难以应对,因此通过机器学习尤其是深度强化学习模型,能够在未知的环境中自主学习并执行复杂的交易策略,提升长期收益和风险管理能力。项目的主要目标是通过对历史数据的学习,训练一个智能体,能够在实际市场中进行自动化交易,决策买卖时机并优化投资回报。DDPG模型通过引入演员-评论家框架,利用深度神经网络来评估状态和选择最佳行动,并通过与环境的交互不断优化交易策略。该模型的应用场景广泛,包括量化交易、投资组合优化以及其他金融决策领域。

在这里插入图片描述

2.技术创新点摘要

基于DDPG算法的强化学习环境设计:该项目采用了深度确定性策略梯度(DDPG)算法,专门针对股票市场这一复杂且具有连续动作空间的场景进行优化。DDPG算法结合了策略梯度方法和Q学习,能够处理股票交易中复杂的连续决策问题。特别是在交易过程中,股票的买卖动作是连续的,通过DDPG的连续动作选择能力,能够实现对股票买卖决策的精细化控制。

专为金融市场定制的强化学习环境:项目定义了一个专门用于股票交易的强化学习环境,利用Gym库进行了扩展。这一环境的状态空间包含20个属性变量,反映了股票的多维度特征,涵盖了历史股价、成交量、财务数据等。这些变量经过归一化处理,以确保算法的稳定性。此外,动作空间被定义为连续动作,即智能体可以根据市场状态选择买入、卖出或者观望,每一个动作都对应具体的百分比操作。这种设计充分考虑了股票市场的特点,能够模拟出更加真实的交易场景。

高效的经验回放机制:该项目实现了一个经验回放缓冲池(ReplayBuffer),用于存储智能体与环境交互过程中的经验。这种机制能够让智能体从过往经验中进行多次学习,从而提高学习效率,并避免强化学习中因样本相关性导致的不稳定性。通过对经验的随机抽样,打破了时间上的相关性,使得算法在训练过程中表现得更加稳定。

多策略网络架构:项目采用了演员-评论家架构,分别使用两个神经网络来执行不同的任务。演员网络用于生成股票买卖的策略,而评论家网络则评估当前策略的价值。通过这种双网络的设置,能够有效地分离策略评估和策略生成的过程,从而使得模型在复杂的金融环境中表现得更加灵活和高效。

3. 数据集与预处理

本项目使用的股票数据集来源于第三方金融数据平台baostock,这是一款免费的股票数据API接口,提供了多维度的股票历史数据,包括每日开盘价、收盘价、最高价、最低价、成交量、成交额等关键指标。该数据集覆盖了较长时间跨度的股票市场历史数据,为模型的训练和验证提供了可靠的数据支持。

数据预处理流程

该问题可以被建模为一个强化学习问题。在此场景下,人即为智能体,股票市场为环境,人通过对股票做出决策,即与环境交互后,会获得股票当前的状态。在此项目中,股票状态包含20个属性变量,包含所采用第三方股票数据包baostock的一些股票属性和基于此计算得到的一些属性变量,分别为:

属性名含义
open当天开盘价格
high最高价格
low最低价格
close收盘价格
volume成交量
amount成交额
adjustflag赋权状态(1:后复权,2:前复权,3:不复权)
tradestatus交易状态(1:正常交易,0:停牌)
pctChg涨跌幅(百分比)
peTTM滚动市盈率
pbMRQ市净率
psTTM滚动市销率
balance当前拥有的金钱
max_net_worth最大资产净值
net_worth当前资产净值
shares_held持有的手数
cost_basis即时买入价格
total_shares_sold总共抛出的手数
total_sales_value总共抛出的价值

NOTE:上述属性值均会经过归一化处理,因此在此项目中,状态为一个长度为20的一维向量,其中每一个值的值域均为 [ 0 , 1 ] [0,1] [0,1]

  1. 缺失值处理:在股票数据中,某些财务指标或历史价格可能存在缺失值(例如市盈率、市净率等)。在项目中,首先对这些缺失值进行了处理,通过简单的填充或剔除的方式来确保数据的完整性。比如,当市盈率或市净率等指标为NaN时,用0替代。
  2. 归一化处理:为了使数据在神经网络中能够更好地被处理,所有数值型的特征(如开盘价、收盘价等)都经过了归一化处理。归一化的范围为0到1,通过将原始数据除以预设的最大值(如最大股价、最大成交量等),确保模型在训练过程中数值的稳定性,防止因数值差异过大而导致的梯度爆炸或消失问题。
  3. 特征选择与构建:项目的输入特征不仅包含了基本的股票价格、成交量等常见的交易数据,还通过财务数据扩展了额外的特征,如市盈率(PE)、市净率(PB)、市销率(PS)等财务指标。这些财务特征为模型提供了更加全面的股票状态描述,帮助智能体在决策时能够更好地判断股票的内在价值和市场趋势。此外,还计算了若干技术指标(如移动平均线、相对强弱指数等)以增强特征工程,提升模型的决策能力。
  4. 时间序列处理:由于股票交易本质上是一个时间序列决策问题,项目将历史时间点的数据作为当前状态的一部分。通过这种方式,智能体能够基于过去的趋势来预测未来的市场变化,从而做出更加合理的交易决策。

4. 模型架构

1) 模型结构的逻辑

在这里插入图片描述

本项目采用了DDPG(深度确定性策略梯度)算法,它是一种基于Actor-Critic架构的强化学习模型,特别适用于连续动作空间的问题。在该架构中,模型由两个主要部分组成:

  • Actor(演员)网络:负责生成动作,即在股票交易场景中,它输出买入、卖出或观望的策略。网络输入的是当前股票的状态(如价格、成交量等),输出动作是一个连续值,表示不同的交易行为及其比例。
  • Critic(评论家)网络:用于评估Actor所采取的动作的价值,即Q值。它通过评估当前的状态-动作对来计算该策略的长期预期回报。通过Q值的反馈,Actor网络会逐步更新策略,使其更符合最优的交易决策。

此外,项目还设计了两个目标网络(Target Networks)用于稳定训练:分别为目标Actor网络和目标Critic网络,用于软更新,以避免策略的剧烈变化影响模型的稳定性。

2) 模型的整体训练流程

DDPG应用于股票交易项目流程包含如下6个步骤:

  1. 环境构建:继承gym.env,构建股票交易环境StockEnv
  2. 容器构建:设计带有存储数据和随机采样的容器buffer
  3. 模型构建:设计model,定义具体的算法,其中包括设计前向网络,指定损失函数及优化器;
  4. 训练配置:定义超参数,加载实验环境,实例化模型;
  5. 模型训练:执行多轮训练,不断调整参数,以达到较好的效果;
  6. 模型评估:对训练好的模型进行评估测试,观察reward;
  7. 模型保存:将模型保存到指定位置,以便后续推理或继续训练使用;
  8. 模型测试:在测试集数据中测试模型的表现。

在这里插入图片描述

5. 核心代码详细讲解

1. Actor网络(动作网络)
class Actor(nn.Layer):def init(self, state_dim, action_dim, max_action):super(Actor, self).
__init__
()self.l1 = nn.Linear(state_dim, 400)self.l2 = nn.Linear(400, 300)self.l3 = nn.Linear(300, action_dim)self.max_action = max_action
def forward(self, state):a = F.relu(self.l1(state))  # 第一层线性变换,使用ReLU激活函数a = F.relu(self.l2(a))  # 第二层线性变换,使用ReLU激活函数a = self.max_action * F.tanh(self.l3(a))  # 输出层使用Tanh激活函数,将输出动作归一化至[-1, 1]之间a = (a + 1.) / 2.  # 将输出映射至[0, 1]区间,符合股票交易场景return a
  • 作用:Actor网络负责根据输入的状态生成交易策略(即买入、卖出或观望的动作)。

  • 解释

    • 通过两层全连接网络,将状态特征转换为隐藏层。
    • 最后一层使用Tanh函数对输出进行压缩,再将值归一化至[0,1]范围,用于表示交易比例。
2. Critic网络(值函数网络)
class Critic(nn.Layer):def init(self, state_dim, action_dim):super(Critic, self).
__init__
()self.l1 = nn.Linear(state_dim + action_dim, 400)self.l2 = nn.Linear(400, 300)self.l3 = nn.Linear(300, 1)
def forward(self, state, action):q = F.relu(self.l1(paddle.concat([state, action], 1)))  # 将状态和动作拼接在一起后,输入到Critic网络q = F.relu(self.l2(q))  # 第二层线性变换,ReLU激活函数return self.l3(q)  # 输出一个标量值Q值,用于评估状态-动作对的价值
  • 作用:Critic网络用于评估Actor网络生成的动作的价值(即Q值),帮助Actor网络优化策略。

  • 解释

    • 将状态和动作作为输入,评估当前动作的价值,输出单一的Q值。
3. DDPG模型的训练与评估
def train(self, replay_buffer, batch_size=100):state, action, next_state, reward, done = replay_buffer.sample(batch_size)
# Critic网络优化target_Q = self.critic_target(next_state, self.actor_target(next_state))target_Q = reward + (1 - done) * self.gamma * target_Qcurrent_Q = self.critic(state, action)critic_loss = F.mse_loss(current_Q, target_Q)self.critic_optimizer.clear_grad()critic_loss.backward()  # 反向传播计算梯度self.critic_optimizer.step()  # 更新Critic网络参数# Actor网络优化actor_loss = -self.critic(state, self.actor(state)).mean()  # 策略梯度反向优化self.actor_optimizer.clear_grad()actor_loss.backward()  # 反向传播更新Actor网络self.actor_optimizer.step()
# 软更新目标网络参数for param, target_param in zip(self.critic.parameters(), self.critic_target.parameters()):target_param.set_value(target_param * (1.0 - self.tau) + param * self.tau)for param, target_param in zip(self.actor.parameters(), self.actor_target.parameters()):target_param.set_value(target_param * (1.0 - self.tau) + param * self.tau)
  • 作用

    • 训练流程分为两个部分:更新Critic网络和更新Actor网络。
    • Critic网络:通过最小化当前Q值和目标Q值之间的均方误差,更新评估网络参数。
    • Actor网络:通过反向传播Actor损失,优化策略网络,使得生成的动作能够最大化未来奖励。
  • 软更新:使用参数tau对Actor和Critic的目标网络进行软更新,逐步靠近主网络,从而提高训练的稳定性。

4. 经验回放机制
class SimpleReplayBuffer(object):def init(self, state_dim, action_dim, max_size=int(1e5)):self.max_size = max_sizeself.cur = 0self.size = 0self.states = np.zeros((max_size, state_dim))self.actions = np.zeros((max_size, action_dim))self.next_states = np.zeros((max_size, state_dim))self.rewards = np.zeros((max_size, 1))self.dones = np.zeros((max_size, 1))
def add(self, state, action, next_state, reward, done):self.states[self.cur] = stateself.actions[self.cur] = actionself.next_states[self.cur] = next_stateself.rewards[self.cur] = rewardself.dones[self.cur] = doneself.cur = (self.cur + 1) % self.max_sizeself.size = min(self.size + 1, self.max_size)
def sample(self, batch):ids = np.random.randint(0, self.size, size=batch)return (paddle.to_tensor(self.states[ids], dtype='float32'),paddle.to_tensor(self.actions[ids], dtype='float32'),paddle.to_tensor(self.next_states[ids], dtype='float32'),paddle.to_tensor(self.rewards[ids], dtype='float32'),paddle.to_tensor(self.dones[ids], dtype='float32'))
  • 作用:经验回放缓冲区用于存储智能体与环境交互的经验(状态、动作、奖励、下一状态、是否结束)。

  • 解释

    • 存储经验后,模型从缓冲区中随机采样一批数据,用于训练Critic和Actor网络。这样做可以打破时间相关性,提高模型泛化能力。

6. 模型优缺点评价

模型优点:

  1. 适应连续动作空间:DDPG算法结合了策略梯度和Q学习,能够有效处理股票交易中的连续动作决策问题,如不同买入卖出的比例。
  2. Actor-Critic架构:该架构通过分离策略生成(Actor)和策略评估(Critic),提高了模型的稳定性和效率,特别适用于动态和复杂的金融环境。
  3. 经验回放机制:通过经验回放缓冲区存储和随机采样,打破了样本间的时间相关性,提升了训练的效率和泛化能力。
  4. 软更新机制:目标网络的软更新避免了策略的剧烈变化,增强了训练过程的稳定性,减少了由于网络参数变化导致的振荡问题。

模型缺点:

  1. 探索性不足:DDPG使用确定性策略,容易陷入局部最优,导致在复杂的市场环境中策略的探索能力不足。缺乏足够的随机性来探索更多潜在的交易策略。
  2. 数据依赖强:模型对于数据的依赖较强,历史数据中的非平稳性和噪声会对模型性能产生较大影响,特别是数据分布与实际市场存在差异时,模型表现可能下降。
  3. 超参数敏感:模型的性能对超参数(如学习率、探索噪声等)较为敏感,参数选择不当可能导致训练过程不稳定或者收敛速度较慢。

改进方向:

  1. 改进探索机制:可以引入如熵正则化随机噪声策略等方法,增加策略的随机性,提升模型的探索能力,避免陷入局部最优。
  2. 超参数优化:采用自动化超参数调优方法,如网格搜索、贝叶斯优化,来找到更合适的超参数组合,提高模型的训练效率和稳定性。
  3. 数据增强:通过对历史数据进行数据增强,如随机时间扰动、模拟不同市场条件等,提升模型的泛化能力,使其能够更好地应对实际市场波动。

👍感谢小伙伴们点赞、关注! 如有其他项目需求的,可以在评论区留言,抽空制作更新!
✌粉丝福利:点击下方名片↓↓↓ 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

相关文章:

基于DDPG算法的股票量化交易

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【基于PyQTFaceNet卷积神经网络实现的学生人脸识别考勤系统】 2.【卫星图像道…...

eIQ笔记(UI介绍+Loss曲线+OpenART例程)

This is a very beginner-friendly article ^o^ 目录 🍂一、训练器设置 input size: learning rate: learning rate decay: Epochs: Decay Rate: Linear Decay: Batch Size: Epochs to Train: QAT(Quantization Aware Training)量化感知训练: Pruning剪枝…...

微信小程序——消息订阅

首先用到的就是wx.requestSubscribeMessage接口。 注意:用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合,一次调用最多可…...

网络原理(传输层)->TCP协议解

前言 大家好!我是小帅,今天我们来学习TCP协议,个人主页 文章目录 1. TCP协议2. TCP的核心机制2.1TCP核心机制一:确认应答2.2 TCP核心机制二:超时重传2.3 TCP核心机制三:连接管理2.4 TCP核心机制四&#xf…...

oracle imp和exp 导入不同库的用户和表空间

参考: oracle 导入(imp)数据时的表空间(tablespace users)问题_imp tablespace-CSDN博客 网上的解决办法大概都是这种,但是实际测试19c数据库并不能成功,所以最后采取在导出文件上强行修改表空间的办法,改完后再继续执行导出导入…...

滚珠丝杆的精度级别如何分?

滚珠丝杆是一种常见的线性传动装置,广泛应用于各种机械设备和自动化系统中。滚珠丝杆的精度等级划分是评估其传动精度和运动平稳度的重要标准,滚珠丝杆的精度级别划分主要基于传动中实际移动距离与理想移动距离的偏差,偏差越小,精…...

ComfyUI初体验

ComfyUI 我就不过多介绍了,安装和基础使用可以看下面大佬的视频,感觉自己靠图文描述的效果不一定好,大家看视频比较方便。 ComfyUI全球爆红,AI绘画进入“工作流时代”?做最好懂的Comfy UI入门教程:Stable D…...

DPI-C动态库so的使用

文章目录 前言一、方法介绍二、demo演示2.1 文件准备2.2 执行仿真2.3 仿真结果 总结 前言 在做IC验证EDA仿真过程中,有时候需要调用C实现的参考模块,我们可以利用DPI-C的功能,实现SV侧调用C侧的函数。 在具体实现过程中,我们可以…...

Java避坑案例 - 高并发场景下的分布式缓存策略

文章目录 概述缓存常见问题及解决方案把 Redis 当作数据库常用的数据淘汰策略如何选择合适的驱逐算法 缓存雪崩问题复现解决方案 缓存击穿(热点缓存失效)问题复现解决方案 缓存穿透问题复现解决方案缓存穿透 vs 缓存击穿 缓存与数据库的一致性先更新缓存…...

Python中的字符串修剪:strip()、lstrip() 和 rstrip()

Python中的字符串修剪 Python 中的字符串修剪:strip()、lstrip() 和 rstrip()strip()lstrip()rstrip()应用场景结论 Python 中的字符串修剪:strip()、lstrip() 和 rstrip() 在 Python 开发中,我们经常需要处理字符串,其中一项常见…...

K8S配置storage-class

简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展&#xff0…...

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 (1)corePoolSize 与 maximumPoolSize (2)keepAliveTime 与 unit (3)workQueue&am…...

VScode插件:前端每日一题

大文件上传如何做断点续传? 在前端实现大文件上传的断点续传,通常会将文件切片并分块上传,记录每块的上传状态,以便在中断或失败时只上传未完成的部分。以下是实现断点续传的主要步骤和思路: 1. 文件切片 (File Slici…...

Android跨进程通信

1、跨进程通信的几种方式 在 Android 中,跨进程通信 (IPC, Inter-Process Communication) 方式有多种,主要用于在不同的应用或进程之间传递数据。常见的跨进程通信方式包括: AIDL (Android Interface Definition Language) • 描述&#xff…...

【初阶数据结构】计数排序 :感受非比较排序的魅力

文章目录 前言1. 什么是计数排序?2. 计数排序的算法思路2.1 绝对位置和相对位置2.2 根据计数数组的信息来确认 3. 计数排序的代码4. 算法分析5. 计数排序的优缺点6.计数排序的应用场景 前言 如果大家仔细思考的话,可能会发现这么一个问题。我们学的七大…...

前后双差速轮之LQR控制

在之前的代码中,我们实现了前后两对双差速轮AGV的运动学正解和逆解。但为了实现对AGV的精确路径跟踪和姿态控制,我们需要引入控制算法。线性二次型调节器(LQR)是一种常用的最优控制方法,可以有效地将系统的状态误差最小化。本文将详细说明如何在之前的C++代码中加入LQR控制…...

Linux之远程连接服务器

1、远程连接服务器简介 (1)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面…...

k8s 部署 nexus3 详解

创建命名空间 nexus3-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: nexus-ns创建pv&pvc nexus3-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: nfs-pvnamespace: nexus-ns spec:capacity:storage: 3GiaccessModes:- ReadWriteM…...

从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?

在工业检测领域,传统的检测手段常因效率低下、精度不足和潜在的安全风险而受到诟病。随着科技的不断进步,一种新兴的检测技术——红外热成像技术,正逐渐在该领域崭露头角。近期,小编对一款集成红外热成像技术的AORO A23防爆手机进…...

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...