基于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]。
- 缺失值处理:在股票数据中,某些财务指标或历史价格可能存在缺失值(例如市盈率、市净率等)。在项目中,首先对这些缺失值进行了处理,通过简单的填充或剔除的方式来确保数据的完整性。比如,当市盈率或市净率等指标为
NaN
时,用0替代。 - 归一化处理:为了使数据在神经网络中能够更好地被处理,所有数值型的特征(如开盘价、收盘价等)都经过了归一化处理。归一化的范围为0到1,通过将原始数据除以预设的最大值(如最大股价、最大成交量等),确保模型在训练过程中数值的稳定性,防止因数值差异过大而导致的梯度爆炸或消失问题。
- 特征选择与构建:项目的输入特征不仅包含了基本的股票价格、成交量等常见的交易数据,还通过财务数据扩展了额外的特征,如市盈率(PE)、市净率(PB)、市销率(PS)等财务指标。这些财务特征为模型提供了更加全面的股票状态描述,帮助智能体在决策时能够更好地判断股票的内在价值和市场趋势。此外,还计算了若干技术指标(如移动平均线、相对强弱指数等)以增强特征工程,提升模型的决策能力。
- 时间序列处理:由于股票交易本质上是一个时间序列决策问题,项目将历史时间点的数据作为当前状态的一部分。通过这种方式,智能体能够基于过去的趋势来预测未来的市场变化,从而做出更加合理的交易决策。
4. 模型架构
1) 模型结构的逻辑
本项目采用了DDPG(深度确定性策略梯度)算法,它是一种基于Actor-Critic架构的强化学习模型,特别适用于连续动作空间的问题。在该架构中,模型由两个主要部分组成:
- Actor(演员)网络:负责生成动作,即在股票交易场景中,它输出买入、卖出或观望的策略。网络输入的是当前股票的状态(如价格、成交量等),输出动作是一个连续值,表示不同的交易行为及其比例。
- Critic(评论家)网络:用于评估Actor所采取的动作的价值,即Q值。它通过评估当前的状态-动作对来计算该策略的长期预期回报。通过Q值的反馈,Actor网络会逐步更新策略,使其更符合最优的交易决策。
此外,项目还设计了两个目标网络(Target Networks)用于稳定训练:分别为目标Actor网络和目标Critic网络,用于软更新,以避免策略的剧烈变化影响模型的稳定性。
2) 模型的整体训练流程
DDPG应用于股票交易项目流程包含如下6个步骤:
- 环境构建:继承
gym.env
,构建股票交易环境StockEnv
; - 容器构建:设计带有存储数据和随机采样的容器
buffer
; - 模型构建:设计
model
,定义具体的算法,其中包括设计前向网络,指定损失函数及优化器; - 训练配置:定义超参数,加载实验环境,实例化模型;
- 模型训练:执行多轮训练,不断调整参数,以达到较好的效果;
- 模型评估:对训练好的模型进行评估测试,观察reward;
- 模型保存:将模型保存到指定位置,以便后续推理或继续训练使用;
- 模型测试:在测试集数据中测试模型的表现。
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. 模型优缺点评价
模型优点:
- 适应连续动作空间:DDPG算法结合了策略梯度和Q学习,能够有效处理股票交易中的连续动作决策问题,如不同买入卖出的比例。
- Actor-Critic架构:该架构通过分离策略生成(Actor)和策略评估(Critic),提高了模型的稳定性和效率,特别适用于动态和复杂的金融环境。
- 经验回放机制:通过经验回放缓冲区存储和随机采样,打破了样本间的时间相关性,提升了训练的效率和泛化能力。
- 软更新机制:目标网络的软更新避免了策略的剧烈变化,增强了训练过程的稳定性,减少了由于网络参数变化导致的振荡问题。
模型缺点:
- 探索性不足:DDPG使用确定性策略,容易陷入局部最优,导致在复杂的市场环境中策略的探索能力不足。缺乏足够的随机性来探索更多潜在的交易策略。
- 数据依赖强:模型对于数据的依赖较强,历史数据中的非平稳性和噪声会对模型性能产生较大影响,特别是数据分布与实际市场存在差异时,模型表现可能下降。
- 超参数敏感:模型的性能对超参数(如学习率、探索噪声等)较为敏感,参数选择不当可能导致训练过程不稳定或者收敛速度较慢。
改进方向:
- 改进探索机制:可以引入如熵正则化或随机噪声策略等方法,增加策略的随机性,提升模型的探索能力,避免陷入局部最优。
- 超参数优化:采用自动化超参数调优方法,如网格搜索、贝叶斯优化,来找到更合适的超参数组合,提高模型的训练效率和稳定性。
- 数据增强:通过对历史数据进行数据增强,如随机时间扰动、模拟不同市场条件等,提升模型的泛化能力,使其能够更好地应对实际市场波动。
👍感谢小伙伴们点赞、关注! 如有其他项目需求的,可以在评论区留言,抽空制作更新!
✌粉丝福利:点击下方名片↓↓↓ 回复暗号: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核心机制四…...
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的扩展࿰…...
多线程——线程池
目录 前言 一、什么是线程池 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) • 描述ÿ…...
【初阶数据结构】计数排序 :感受非比较排序的魅力
文章目录 前言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的内存大小吧~ …...
docker run 命令解析
docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …...
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第一个BOSS苍蝇之母
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、战斗场景Battle Scene相关逻辑处理 1.防止玩家走出战斗场景的门2.制作一个简单的战斗场景二、制作游戏第一个BOSS苍蝇之母 1.导入素材和制作相关动画2.制作…...
【Nginx系列】499错误
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Springboot项目控制层注释
Springboot主流的 ----------------------- 简略写法 package com.dx.wlmq.controller;import com.dx.wlmq.domain.Address; import com.dx.wlmq.service.AddresssService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.b…...
从Docker容器中备份整个PostgreSQL
问题 现在需要从Docker容器中备份整个PostgreSQL后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。 步骤 备份旧容器中的PG # 登录到旧的PG容器中 docker exec -it postgres bash # 备份数据库 pg_dumpall -c -U postgres > dump_date %…...
从小需求看大格局:如何用技术智慧赢得客户信任
时间:2024年 10月 26日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:从小需求看大格局:如何用技术智慧赢得客户信任 欢迎大家回到“小蒋聊技术”,这是一个不只是教你如何写…...
模型 支付矩阵
系列文章 分享 模型,了解更多👉 模型_思维模型目录。策略选择的收益分析工具。 1 支付矩阵的应用 1.1 支付矩阵在市场竞争策略分析中的应用 支付矩阵是一种强大的决策工具,它在多个领域的应用中都发挥着重要作用。以下是一个具体的应用案例…...
擎创科技声明
近日,我司陆续接到求职者反映,有自称是擎创科技招聘人员,冒用“上海擎创信息技术有限公司”名义,用“126.com”的邮箱向求职者发布招聘信息,要求用户下载注册APP,进行在线测评。 对此,我司郑重…...
二叉树习题其六【力扣】【算法学习day.13】
前言 书接上篇文章二叉树习题其四,这篇文章我们将基础拓展 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一…...
互联网的无形眼睛:浏览器指纹与隐私保护攻略
你是否曾有过这样的经历:在某个电商网站上搜索了某件商品,随后无论你打开哪个网页,都能看到与之相关的广告?或者当你再次访问某个网站时,它居然记得你之前的浏览记录?这一切,背后都有一只“看不…...
贵阳网站制作工具/悟空建站seo服务
题目 给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意:你 不能 修改非 ‘?’ 字符。 题目测试用例保证 除 ‘?’ 字符 之外,…...
免费网站app源码/广州竞价外包
摘要: 受Reddit网站上讨论区的启发,我决定快速地浏览一下2018年关于GAN最有趣的文章。我很高兴今年参加了一个研究项目,这要求我必须熟悉大量用于计算机视觉方面的深度学习领域的资料。我对过去两、三年内取得的进展感到惊讶,这真…...
wordpress推广得积分/网络软文营销案例3篇
开源分析数据库 ClickHouse 以快著称,真的如此吗?我们通过对比测试来验证一下。ClickHouse vs Oracle先用 ClickHouse(简称 CH)、Oracle 数据库(简称 ORA)一起在相同的软硬件环境下做对比测试。测试基准使用…...
js做示爱网站例子/营销必备十大软件
一、成员变量与成员函数分开存储 1、在C中,类内的成员变量和成员函数分开存储 首先,对于一个空对象,占用内存空间为1 class person {};void test01() {person p;cout << sizeof(p) << endl; } 因为C编译器给每个空对象分配1个字…...
网站开发基础班内容有哪些/惠州抖音seo
光伏发电愈来愈火热,性价比也逐渐成为客户在进行光伏组件选型时的重要依据,选择长期收益更高、性能更好的组件产品已经成为业内共识。但面对纷繁复杂的组件市场,又该如何“排沙简金”,觅得合适的光伏组件呢? 当前&…...
最新wordpress知更鸟/站长之家爱站网
前几天有朋友问我,要学习LINUX,网上有很多LINUX操作系统,但是用什么版本的操作系统才好?这个问题我当年学习的时候也遇到过,当时带我的老师教的是red hat5.0专业版,我后来又学习了red hat 6.0,现在最新的是…...