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

深度强化学习框架DI-engine

深度强化学习框架DI-engine

一、DI-engine概述:决策智能的通用引擎

DI-engine是由OpenDILab开源的决策智能引擎,基于PyTorch和JAX构建,旨在为强化学习(RL)、模仿学习(IL)、离线学习等场景提供标准化解决方案。其核心目标是统一不同决策智能环境与应用,支持从学术研究到工业原型的全流程开发。

核心特性

  1. 算法多样性
    支持60+算法,覆盖传统DRL(如DQN、PPO、SAC)、多智能体RL(QMIX、COMA)、模仿学习(GAIL、SQIL)、离线学习(CQL、Decision Transformer)、基于模型的RL(MBPO、DreamerV3)等方向。

  2. 环境兼容性
    内置80+环境,包括Atari、MuJoCo、SMAC(多智能体)、D4RL(离线学习)、Gfootball、Metadrive(自动驾驶)等,支持离散/连续/混合动作空间,兼容单智能体与多智能体场景。

  3. 系统级优化

    • TreeTensor:树状嵌套数据结构,统一数据处理流程,支持自动微分和批量操作。
    • 分布式训练:基于DDP和Kubernetes的分布式框架(DI-orchestrator),支持大规模并行训练。
    • 中间件机制:模块化设计(如Replay Buffer、Reward Model),支持自定义流程扩展。
  4. 工程化工具链
    提供配置系统(YAML/JSON)、模型加载/恢复、随机种子管理、单元测试框架(pytest)及Docker镜像(含预构建环境)。

二、功能模块与技术架构

1. 算法分类与支持列表

算法类型典型算法举例文档链接Demo命令示例
基础DRLDQN、PPO、SAC、TD3DQN文档ding -m serial -c cartpole_dqn_config.py -s 0
多智能体RLQMIX、WQMIX、MADDPGQMIX文档ding -m serial -c smac_3s5z_qmix_config.py
模仿学习GAIL、SQIL、BCQGAIL文档ding -m serial_gail -c cartpole_gail_config.py
离线学习CQL、TD3-BC、Decision TransformerCQL文档python3 -u d4rl_cql_main.py
基于模型的RLMBPO、DreamerV3、STEVEMBPO文档python3 -u pendulum_mbpo_config.py
探索机制HER、RND、ICMHER文档python3 -u bitflip_her_dqn.py

2. 环境生态

DI-engine通过dizoo模块集成丰富环境,部分示例如下:

  • 经典控制:CartPole、Pendulum(单智能体离散/连续控制)。
  • Atari:Pong、Asterix(视觉密集型任务)。
  • 多智能体:SMAC(星际争霸微型战役)、PettingZoo(合作/竞争场景)。
  • 离线学习:D4RL(MuJoCo专家轨迹数据集)。
  • 真实应用:Metadrive(自动驾驶)、DI-star(星际争霸II决策AI)。

3. 核心组件

  • Policy:封装算法逻辑,支持自定义网络结构(如CNN、Transformer)。
  • Model:定义神经网络架构,支持PyTorch原生模块扩展。
  • Collector/Learner:分离数据采集与模型训练,支持异步并行。
  • Replay Buffer:支持优先经验回放(PER)、分层回放(PLR)等高级机制。
  • TreeTensor:树状数据结构,示例代码:
    import treetensor.torch as ttorch
    data = ttorch.randn({'obs': (3, 32, 32), 'action': (1,)})  # 嵌套张量
    stacked_data = ttorch.stack([data, data], dim=0)  # 批量操作
    

三、快速入门:安装与实战

1. 安装指南

方式1:Pip安装(推荐)
# 稳定版
pip install di-engine# 开发版(含额外依赖)
pip install "di-engine[all]"
方式2:Docker镜像

DI-engine提供预构建镜像,包含常见环境:

# CPU基础镜像
docker pull opendilab/ding:nightly# Atari环境镜像
docker pull opendilab/ding:nightly-atari# 运行示例(以CartPole为例)
docker run -it opendilab/ding:nightly \ding -m serial -c cartpole_dqn_config.py -s 0

2. 入门Demo:DQN玩转CartPole

步骤1:编写配置文件(cartpole_dqn_config.py
from ding.config import compile_config
from ding.policy import DQNPolicy
from ding.envs import GymEnvcfg = dict(env=dict(env_id='CartPole-v1',collector_env_num=8,evaluator_env_num=4,),policy=dict(cuda=False,model=dict(obs_shape=4,action_shape=2,),),
)
cfg = compile_config(cfg, seed=0, env=GymEnv, policy=DQNPolicy)
步骤2:运行训练
ding -m serial -c cartpole_dqn_config.py -s 0
步骤3:评估与可视化
from ding.utils import VideoRecorderenv = GymEnv('CartPole-v1', cfg.env)
policy = DQNPolicy(cfg.policy).load_checkpoint('ckpt.pth')
video_recorder = VideoRecorder(env, 'cartpole_demo.mp4')obs = env.reset()
while True:action = policy.predict(obs)obs, reward, done, info = env.step(action)video_recorder.record(obs)if done:break
video_recorder.close()

3. 多智能体示例:QMIX在SMAC环境

# SMAC 3s5z场景(3陆战队vs5 zealots)
ding -m serial -c smac_3s5z_qmix_config.py -s 0

四、进阶功能与最佳实践

1. 自定义环境迁移

若需接入自定义环境,需实现以下接口:

from ding.envs import BaseEnvclass MyEnv(BaseEnv):def __init__(self, env_id):super().__init__()# 初始化环境逻辑def reset(self):# 返回初始观测值return obsdef step(self, action):# 执行动作,返回obs, reward, done, inforeturn obs, reward, done, info@propertydef observation_space(self):# 定义观测空间(gym.Space格式)return Box(low=0, high=255, shape=(3, 32, 32))@propertydef action_space(self):# 定义动作空间return Discrete(10)

2. 模型自定义与网络设计

通过继承ding.model.BaseModel实现自定义网络:

import torch.nn as nn
from ding.model import BaseModelclass CustomModel(BaseModel):def __init__(self, obs_shape, action_shape):super().__init__()self.cnn = nn.Sequential(nn.Conv2d(obs_shape[0], 32, 3),nn.ReLU(),nn.Flatten())self.fc = nn.Linear(32*14*14, action_shape)def forward(self, x):x = self.cnn(x)return self.fc(x)

3. 分布式训练

使用DDP模式启动分布式训练:

ding -m distributed_ddp -c ppo_lunarlander_config.py -n 4

五、生态与社区支持

1. 工具与资源

  • DI-zoo:包含30+算法示例与基准环境,地址:https://github.com/opendilab/DI-zoo。
  • 教程与文档
    • 快速入门:3分钟上手指南
    • 中文文档:ReadTheDocs
    • 算法速查表:RL Algorithms Cheat Sheet
  • 开源工具链
    • TreeTensor:树状张量库,GitHub
    • DI-toolkit:决策智能工具包,PyPI

2. 社区参与

  • 问题反馈:在GitHub Issues提交BUG或功能请求。
  • 贡献代码:参考CONTRIBUTING.md,参与算法实现或文档完善。
  • 交流渠道
    • 微信社群:扫码添加“DI小助手”(见GitHub README)。
    • Discord/ Slack:链接。

3. 引用与许可

若在研究中使用DI-engine,请引用:

@misc{ding,title={DI-engine: A Universal AI System/Engine for Decision Intelligence},author={Niu, Yazhe et al.},howpublished={\url{https://github.com/opendilab/DI-engine}},year={2021}
}

DI-engine采用Apache 2.0许可证,允许商业使用与修改。

DI-engine核心算法实战指南

一、DQN(离散动作空间经典算法)

算法特性

  • 适用场景:离散动作空间、单智能体、稀疏奖励场景
  • 核心思想:基于Q-Learning,使用神经网络近似Q值函数,经验回放+目标网络稳定训练
  • DI-engine实现:支持Double DQN、Dueling DQN等变体,集成PER(优先经验回放)

支持环境

环境类别具体环境示例动作空间类型文档链接
经典控制CartPole-v1、CliffWalking离散CartPole文档
Atari游戏Pong、Breakout、Asterix离散Atari环境指南
文本决策TabMWP(数学文字题解答)离散TabMWP文档

快速上手:CartPole场景

1. 配置文件(cartpole_dqn_config.py
from ding.config import compile_config
from ding.envs import GymEnv
from ding.policy import DQNPolicycfg = dict(env=dict(env_id='CartPole-v1',collector_env_num=8,  # 并行采集环境数evaluator_env_num=4,   # 并行评估环境数n_evaluator_episode=20,  # 评估 episodes 数),policy=dict(cuda=False,model=dict(obs_shape=4,         # 观测空间维度action_shape=2,      # 动作空间大小(离散)encoder_hidden_size_list=[128, 128],  # 网络结构),learn=dict(update_per_collect=10,  # 每次采集后更新次数batch_size=32,         # 批量大小learning_rate=0.001,   # 学习率),collect=dict(n_sample=100,        # 每次采集样本数random_collect_size=1000,  # 随机初始化样本数),eval=dict(evaluator=dict(eval_freq=500, ))  # 评估频率),
)
cfg = compile_config(cfg, env=GymEnv, policy=DQNPolicy, seed=0)
2. 运行训练
# 单机训练
ding -m serial -c cartpole_dqn_config.py -s 0# 分布式训练(4进程)
ding -m distributed_ddp -c cartpole_dqn_config.py -n 4
3. 评估与可视化
from ding.utils import VideoRecorder
env = GymEnv('CartPole-v1', cfg.env)
policy = DQNPolicy(cfg.policy).load_checkpoint('output/ckpt.pth')
video_recorder = VideoRecorder(env, 'cartpole_demo.mp4')obs = env.reset()
while True:action = policy.predict(obs)  # 推理动作obs, reward, done, info = env.step(action)video_recorder.record(obs)if done:break
video_recorder.close()

二、PPO(连续/离散通用策略梯度算法)

算法特性

  • 适用场景:离散/连续动作空间、单智能体/多智能体(MAPPO变体)
  • 核心思想:近端策略优化,通过clip机制平衡策略更新步长
  • DI-engine扩展:支持GAE(广义优势估计)、分层回放(PLR)

支持环境

环境类别具体环境示例动作空间类型文档链接
经典控制LunarLanderContinuous-v2连续LunarLander文档
MuJoCoHalfCheetah-v4、Ant-v4连续MuJoCo环境指南
多智能体SMAC(3s5z场景)、PettingZoo离散/MARLSMAC文档

实战案例:LunarLander连续控制

1. 配置要点(连续动作特化)
cfg.policy.model = dict(obs_shape=8,action_shape=4,action_space='continuous',  # 显式声明连续空间actor_head_hidden_size=256,critic_head_hidden_size=256,
)
cfg.policy.learn = dict(epoch_per_collect=10,  # 每个采集周期训练轮数batch_size=2048,clip_ratio=0.2,        # PPO核心超参数
)
2. 运行命令
# 连续动作版示例(需指定环境ID)
ding -m serial_onpolicy -c lunarlander_ppo_continuous_config.py -s 0
3. 多智能体扩展(MAPPO)
# SMAC 3s5z多智能体场景
ding -m serial -c smac_3s5z_mappo_config.py -s 0

三、SAC(连续动作空间最大熵强化学习)

算法特性

  • 适用场景:连续动作空间、探索性强的环境(如机器人控制)
  • 核心思想:结合最大熵原理,同时优化策略熵与累积奖励
  • DI-engine优化:支持自动熵调整、多Q网络正则化

支持环境

环境类别具体环境示例动作空间类型文档链接
经典控制Pendulum-v1连续Pendulum文档
MuJoCoSwimmer-v4、Walker2d-v4连续MuJoCo环境列表
离线学习D4RL(HalfCheetah-medium)连续(离线)D4RL文档

代码示例:Pendulum摆锤控制

1. 关键配置
cfg.policy.model = dict(obs_shape=3,action_shape=1,twin_critic=True,       # 使用双Q网络action_space='continuous',
)
cfg.policy.learn = dict(target_entropy='auto',  # 自动计算目标熵discount_factor=0.99,
)
2. 运行与评估
# 训练命令
ding -m serial -c pendulum_sac_config.py -s 0# 离线学习(D4RL数据集)
python3 -u d4rl_sac_main.py --env_id halfcheetah-medium-v0

四、TD3(连续动作空间延迟策略更新算法)

算法特性

  • 适用场景:连续动作空间、高维动作空间(如机械臂控制)
  • 核心改进:双Q网络+策略延迟更新+动作噪声,缓解过估计问题
  • DI-engine集成:支持与HER(indsight experience replay)结合

支持环境

环境类别具体环境示例动作空间类型文档链接
经典控制MountainCarContinuous-v0连续MountainCar文档
PyBulletHumanoidBulletEnv-v0连续PyBullet环境指南
自定义环境机械臂控制(需迁移)连续环境迁移教程

快速运行:MountainCarContinuous

# 配置文件路径:ding/example/td3_mountaincar_continuous_config.py
ding -m serial -c td3_mountaincar_continuous_config.py -s 0
高级用法:结合HER探索
# 在配置中启用HER
cfg.policy.other = dict(replay_buffer=dict(type='her',her_type='future',  # HER类型(future/episode等))
)

五、环境支持总表(DQN/PPO/SAC/TD3适用场景)

算法离散动作空间连续动作空间多智能体场景离线学习场景典型环境示例
DQN✅(全支持)CartPole、Breakout
PPO✅(离散版)✅(连续版)✅(MAPPO)LunarLander、SMAC
SAC✅(全支持)✅(D4RL)Pendulum、D4RL-HalfCheetah
TD3✅(高维优先)MountainCarContinuous、Ant

六、进阶技巧:算法调优与环境适配

1. 离散vs连续动作空间关键差异

  • 动作处理
    • 离散:输出logits或Q值,通过argmax选择动作
    • 连续:输出均值+标准差(如SAC)或直接映射(如TD3),需限制动作范围
  • 网络结构
    • 离散:单分支输出(动作维度)
    • 连续:Actor-Critic双分支(如PPO/SAC)

2. 环境迁移三步法

  1. 继承BaseEnv:实现reset()step(action)observation_space等接口
  2. 适配动作格式
    • 离散:动作需为0~n-1的整数(np.int64
    • 连续:动作需为numpy数组,范围与action_space一致
  3. 测试兼容性:使用ding.utils.env_test验证环境接口
from ding.utils import env_test
env = MyCustomEnv()
env_test(env, coll_num=100)  # 测试采集兼容性

3. 超参数调优建议

算法关键超参数调优方向
DQNlearning_rategamma小学习率(1e-4~1e-3),gamma=0.99
PPOclip_ratiogae_lambdaclip_ratio=0.1~0.3,lambda=0.95
SACtarget_entropytau自动熵或手动设置(如-env_dim)
TD3policy_noisenoise_clip噪声=0.2,clip=0.5

七、总结:选择合适算法的决策树

离散
连续
需要探索
高维动作
多智能体
离线数据
问题类型
动作空间类型
DQN/PPO
SAC/PPO/TD3
SAC
TD3
MAPPO
CQL/TD3-BC

通过以上指南,可快速在DI-engine中落地主流RL算法。更多细节可参考官方文档:

  • 算法文档合集
  • 环境迁移教程
  • 完整示例代码

相关文章:

深度强化学习框架DI-engine

深度强化学习框架DI-engine 一、DI-engine概述:决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎,基于PyTorch和JAX构建,旨在为强化学习(RL)、模仿学习(IL)、离线学习等场景提供…...

gitlab迁移

需求:需要将A服务器上的 gitlab 迁移到B服务器上,均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中,运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识…...

如何确保低空经济中的数据安全?

低空经济涉及大量敏感数据,如无人机的飞行轨迹、拍摄的地理图像和视频等。为确保这些数据的安全,可从以下几方面着手: 加强数据加密 传输加密 :采用 SSL/TLS 等加密协议,对数据在传输过程中进行加密,防止…...

在linux平台下利用mingw64编译windows程序

背景 笔者平时都是基于linux平台开发C代码,已经熟悉使用CMake这一套工具上一次开发windows应用程序还要追溯到10多年前,彼时还是使用微软的visual studio这个IDE,这个IDE确实也很强大,但也确实很笨重,当时用起来也很不…...

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡? code review! 参考笔记: 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡(Level) 和 关卡蓝图(Level Blueprint)的关系 2.虚幻引擎…...

[IMX] 04.定时器 - Timer

目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

前端 vue + element-ui 框架从 0 - 1 搭建

1. 安装node 地址: Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中,频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式,避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

算法刷题(Java与Python)2.数组、列表

目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗? 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

uniapp打包H5,输入网址空白情况

由于客户预算有限,最近写了两个uniapp打包成H5的案例,总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮,输入名称,网址 点击【发行】,生成文件 把这个给后端,就可以了 为什么空白呢 最重要一点&#xf…...

JavaScript 中使用 Elasticsearch 的正确方式,第一部分

作者:来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证?看看下一期 Elasticsearch 工程师培训什么时候开始吧! Elasticsearch 拥有大量新功能,能帮助你…...

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣(LeetCode) 题目 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今…...

排序复习/下(C语言版)

目录 1.快速排序(hoare法) 单趟: 整体: 代码优化: ​编辑三数取中代码: 小区间优化代码: hoare法疑问解答: 2.快速排序(挖坑法) 3.快速排序&#x…...

Vue百日学习计划Day33-35天详细计划-Gemini版

总目标: 在 Day 33-35 理解 Vue 组件从创建到销毁的完整生命周期,熟练掌握 Composition API 中主要的生命周期钩子,并知道在不同阶段执行哪些操作。 所需资源: Vue 3 官方文档 (生命周期钩子): https://cn.vuejs.org/guide/essentials/lifecycle.html你…...

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者:曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器?3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器: 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…...

统计客户端使用情况,使用es存储数据,实现去重以及计数

这篇文件的重点在tshark、filebeat、和logstash。 需求:统计客户使用的客户端版本 实现工具:tshark 1.10.14,filebeat 8.17.0,logstash 8.17.0,elasticsearch 8.17.0,kibana 8.17.0 总体设计&#xff1a…...

Git基础面试题

git的rm命令与系统的rm命令有什么区别 git rm 和系统的 rm (在 Windows 上是 del) 命令都用于删除文件,但它们在 Git 仓库的上下文中作用有所不同: 系统 rm (或 del) 命令: 作用: 直接从文件系统中删除文件。Git 的感知&#xff…...

conda 的常用命令

好的,下面为你介绍conda的常用命令: 环境管理 # 创建新环境 conda create -n env_name python3.8# 激活环境 conda activate env_name# 查看所有环境 conda env list# 复制环境 conda create -n new_env --clone old_env# 删除环境 conda remove -n en…...

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞:ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析:施耐德PLC与AB PLC的互联互通 在现代工业自动化中,设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关,将施耐德P…...

百度OCR:证件识别

目录 一、编写目的 二、准备工作 2.1 OCR密钥 三、代码实现 3.1 配置文件 3.2 请求接收封装 3.3 请求响应封装 3.4 服务类参数初始化 3.5 服务类实现 3.6 解析结果 3.7 定义Web接口 四 测试效果 五、总结 欢迎来到盹猫🐱的博客 本篇文章主要介绍了 [百…...

纯前端实现图文识别 OCR

Tesseract.js Tesseract.js 是一个基于 Google Tesseract OCR 引擎的 JavaScript 库,利用 WebAssembly 技术将的 OCR 引擎带到了浏览器中。它完全运行在客户端,无需依赖服务器,适合处理中小型图片的文字识别。 基本使用 以下示例展示了如何…...

2025.05.01【Barplot】柱状图的多样性绘制

Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...

在资源受限环境下,移动端如何实现流畅动画?如何在内存、CPU、GPU、网络等多种限制条件下,依然保持动画高帧率、低延迟、不卡顿?

在日常生活中,移动设备已经成为不可或缺的工具。从社交、购物到游戏、教育,几乎所有的应用场景都依赖于移动终端的计算和显示能力。然而,随着用户体验的不断提升需求,动画成为了界面交互中不可忽视的一环。动画不仅提升了视觉吸引…...

HJ10 字符个数统计【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ10 字符个数统计 一、题目描述 二、测试用例 三、解题思路 基本思路:   建立字符串的散列表,然后统计不同字符个数具体思路:   遍历字符串的字…...

关键点检测算法-RTMPose

一、网络框架(top-down模式) 二、各部分内容 1、骨干网络 对于网络而言,CXPset太大,可以换成starnet 2、一个卷积层 7x7的卷积核对性能提升最大 3、一个全连接层 将一维关键点表示扩展到由超参数控制的所需维度。 4、一个用…...

云原生安全:错误策略S3存储桶ACL设置为Everyone:FullControl

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础到实践的深度解析 1. 基础概念 S3存储桶与ACL Amazon S3(Simple Storage Service)是AWS提供的对象存储服务,支持存储和检索任意规模的数据。ACL(访问控制列表…...

Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...

图漾相机错误码解析(待补充)

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相机本身不支持改属性 2.4 -1…...

SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理

介绍 在客户管理系统中部分客户的名字会有生僻字为了沟通时候不叫错客户的名称,因此决定将客户名称的拼音一起返回给前端,也可以直接交给前端去处理。这里介绍后端的做法 Pinyin4j 是一个用于将汉字转换为拼音的 Java 库。在需要对中文文本进行拼音转换…...

使用 Whisper 生成视频字幕:从提取音频到批量处理

生成视频字幕是许多视频处理任务的核心需求。本文将指导你使用 OpenAI 的 Whisper 模型为视频文件(如电视剧《Normal People》或电影《花样年华》)生成字幕(SRT 格式)。我们将从提取音频开始,逐步实现字幕生成&#xf…...

Kotlin Compose Button 实现长按监听并实现动画效果

想要实现长按按钮开始录音,松开发送的功能。发现 Button 这个控件如果去监听这些按下,松开,长按等事件,发现是不会触发的,究其原因是 Button 已经提前消耗了这些事件所以导致,这些监听无法被触发。因此为了…...

SQL练习——(15/81)

目录 1.计算次日留存率 2.多条件查询 方法1:子查询 方法2:窗口函数实现 3.条件查询——自连接相关 1.计算次日留存率 550. 游戏玩法分析 IV - 力扣(LeetCode) 错误查询1:(没有考虑从首次登录日期开始…...

数据中心 智慧机房解决方案

该文档介绍数据中心智慧机房解决方案,涵盖模块化数据中心(机柜式、微模块),具备低成本快速部署、标准化建设等特点;监控管理系统(DCIM)可实现设施、资产、容量、能效管理;节能解决方案含精密空调节能控制柜,节能率高达 30%;还有7X24 小时云值守运维服务。方案亮点包括…...

网络-MOXA设备基本操作

修改本机IP和网络设备同网段,输入设备IP地址进入登录界面,交换机没有密码,路由器密码为moxa 修改设备IP地址 交换机 路由器 环网 启用Turbo Ring协议:在设备的网络管理界面中,找到环网配置选项,启用Turb…...

Docker构建 Dify 应用定时任务助手

概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案,用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰,本工具可以帮助设置自动执行任务并获取实时通知,优化你的工作效率。 注意&…...

前端测试策略:单元测试到 E2E 测试

引言 在现代前端开发中,测试已成为确保应用质量和可靠性的关键环节。随着前端应用复杂度的不断提高,仅依靠手动测试已经远远不够。一个全面的前端测试策略应该包含多个层次的测试,从最小粒度的单元测试到模拟真实用户行为的端到端(E2E)测试。…...

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…...

大中型水闸安全监测系统解决方案

一、系统概述 水闸是重要的水利基础设施,具有防洪、挡潮、排涝、灌溉、供水、生态、航运和水力发电等综合功能,在国家水网构建、支撑经济社会高质量发展等方面具有十分重要的作用。我国水闸工程面广量大,据2021年统计数据,我国已建…...

紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的以太网方案本方案在Xilinx系列FPGA的应用方案 3、设计思路框架工程设计原理框图AD输入源AD9238数据采集AD9238数据缓存控制模块…...

ffmpeg 把一个视频复制3次

1. 起因, 目的: 前面我写过,使用 python 把一个视频复制3次但是速度太慢了,我想试试看能否改进。而且我想换一种新的视频处理思路,并试试看速度如何。 2. 先看效果 效果就是能行,而且速度也快。 3. 过程: 代码 1…...

仿腾讯会议——添加音频

1、实现开启或关闭音频 2、 定义信号 3、实现开始暂停音频 4、实现信号槽连接 5、回收资源 6、初始化音频视频 7、 完成为每个人创建播放音频的对象 8、发送音频 使用的是对象ba,这样跨线程不会立刻回收,如果使用引用,跨线程会被直接回收掉&a…...

从零训练一个大模型:DeepSeek 的技术路线与实践

从零训练一个大模型:DeepSeek 的技术路线与实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 从零训练一个大模型:DeepSeek 的技术路线与实践摘要引言技术路线对比1. 模型架构&#xff1a…...

interface接口和defer场景分析

接口 接口这里主要两点: 设计业务结构时采用依赖倒转:业务层向下依赖抽象层,实现层向上依赖抽象层。 相比于之前: 之后: 注意struct中嵌套interface和不嵌套interface的区别: type Myinterface interfac…...

【数据结构篇】排序1(插入排序与选择排序)

注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…...

FastAPI自定义异常处理:优雅转换Pydantic校验错误

FastAPI自定义异常处理:优雅转换Pydantic校验错误 背景需求 当使用FastAPI开发API服务时,Pydantic的自动校验异常默认会返回如下格式的422响应: {"detail": [{"type": "missing","loc": ["body", "user", &…...

C++--内存管理

内存管理 1. C/C内存分布 在C语言阶段,常说局部变量存储在栈区,动态内存中的数据存储在堆区,静态变量存储在静态区(数据段),常量存储在常量区(代码段),其实这里所说的栈…...

YOLOV3 深度解析:目标检测的高效利器

在计算机视觉领域,目标检测一直是一个重要且热门的研究方向,广泛应用于安防监控、自动驾驶、机器人视觉等诸多场景。YOLO(You Only Look Once)系列算法凭借其出色的实时性和较高的检测精度,在目标检测领域占据着重要地…...

select * from 按时间倒序排序

在SQL中,如果你想要根据时间字段来倒序排序查询结果,你可以使用ORDER BY子句,并结合DESC关键字来实现这个目的。这里有几个常见的场景和示例,假设我们有一个表events,里面包含一个时间戳字段event_time。 示例1&#…...

数据结构-DAY06

一、树的概念 1.链表是数的一部分(斜树) 2.树的查找速度很快 3.层序:前序:根左右 中序:左根右 后序: 左右根 4.树的存储:顺序结构,链式结构 5.特点: 1&#xf…...