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

强化学习系列:深度强化学习和DQN

1. 往期回顾

  • 介绍了强化学习的基本概念和基本原理

  • 介绍了基于动态规划的传统强化学习——价值迭代、策略迭代

  • 介绍了在无模型的环境下,基于时序差分的表格型强化学习——Q-learning、SARSA

这些传统的方法都有各自的局限性,能适用的范围有限,无法应对许多复杂的实际场景。比如在上期介绍的Q-learning算法中,我们构造了一个多维数组存储每一个状态下的动作Q值,使用时直接索引即可,但在实际中几乎很少有这么小而简单的状态空间。

这种用表格存储动作价值的做法只在环境的状态和动作都是离散的,并且空间都比较小的情况下适用,我们之前进行代码实战的几个环境都是如此(如悬崖漫步)。当状态或者动作数量非常大的时候,这种做法就不适用了。例如,当状态是一张 RGB 图像时,如果图像大小是210*160*3,此时一共有种状态256^(210*160*3)种状态,在计算机中存储这个数量级的表格是不现实的。更重要的是,当状态或者动作连续的时候,就有无限个状态动作对,我们更加无法使用这种表格形式来记录各个状态动作的值。

传统的方法已经无法解决这些问题,从本期开始我们正式进入深度强化学习(DRL)的大门,由于深度学习使用数据来学习的方式与无模型强化学习通过采样数据来学习的方式不谋而合,所以我们将深度神经网络与强化学习结合,解决更复杂场景下的决策问题。

我们从深度强化学习最基本的DQN算法开始。

《深度强化学习》和人工智能入门学习zi料包

【1.超详细的人工智能学习大纲】:一个月精心整理,快速理清学习思路!

【2.基础知识】:Python基础+高数基础

【3.机器学习入门】:机器学习经典算法详解

【4.深度学习入门】:神经网络基础(CNN+RNN+GAN)

扫马获取:

2. DQN——Deep Q-learning Network

2.1 简介

DQN顾名思义就是用深度神经网络实现的Q-learning,为什么要用深度神经网络来实现Q-learning?

对于上面的情形,表格方法不再适用,但是考虑到表格也是一种映射或者说一个函数,它将每个可枚举的状态的索引和Q值一一对应。面对不可枚举的状态,我们考虑用函数拟合的方法来估计Q值,把这个无法离散表示出来的”Q表格“用一个参数化的Q_{\theta}函数来表示,我们通过拟合这个函数来代替精确的表格计算,从而得到Q值的估计。

这种函数拟合的方法存在一定的精度损失,因此被称为近似方法。我们今天要介绍的DQN 算法便可以用来解决连续状态下离散动作的问题。

2.2 DQN

2.2 Q网络的训练

熟悉深度学习的人都知道,神经网络的训练或者说参数更新,是由梯度的反向传播(BP)来实现的,而梯度又由这个神经网络的输出与实际值之间的误差——损失函数来产生的。所以,我们在深度学习视角下将上面的问题描述为:如何为Q网络构造一个损失函数,使得由这个损失函数产生的梯度反向传播参数更新等价于时序差分更新规则。

有了预测值和目标值,就可以定义损失函数了。由于这两项都是连续的标量值,它们之间的差距就可以用均方误差(MSE)来刻画,这样我们就可以正式导出DQN的Q网络损失函数了:

2.3 目标网络和经验回放池

经过前面的分析和推导,我们找到了用神经网络来实现时序差分的方法,这时已经可以开始训练Q网络来实现DQN算法了,但是由于神经网络本身的一些性质,我们还需要解决两个问题——训练稳定性和收敛性和数据分布,才能保证DQN算法本身足够稳定。

2.3.1 目标网络

那么问题又来了,新构造的这个目标Q网络又如何更新呢?如果两套网络的参数随时保持一致,则仍为原先不够稳定的算法。

2.3.2 经验回放池

在一般的有监督学习中,假设训练数据是独立同分布的,我们每次训练神经网络的时候从训练数据中随机采样一个或若干个数据来进行梯度下降。

在原来的 Q-learning 算法中,每一个数据只会用来更新一次值。为了更好地将 Q-learning 和深度神经网络结合,DQN 算法采用了经验回放(experience replay)方法,具体做法为维护一个回放缓冲区,将每次从环境中采样得到的四元组数据(状态、动作、奖励、下一状态)存储到回放缓冲区中,训练 Q 网络的时候再从回放缓冲区中随机采样若干数据来进行训练。这么做可以起到以下两个作用。

  • 使样本满足独立假设。在 MDP 中交互采样得到的数据本身不满足独立假设,因为这一时刻的状态和上一时刻的状态有关。非独立同分布的数据对训练神经网络有很大的影响,会使神经网络拟合到最近训练的数据上。采用经验回放可以打破样本之间的相关性,让其满足独立假设。

  • 提高样本效率,每一个样本可以被使用多次,十分适合深度神经网络的梯度学习。

2.4 DQN算法

解决所有问题之后,我们就得到一个完整的强化学习DQN算法了。DQN只负责估计Q值,在具体行动策略上依然采用 epsilon-greedy贪婪算法,这一点与传统的Q-learning一样。综合上面所有分析,DQN的算法流程如下:

3. DQN实践

3.1 环境介绍——LunarLander

LunarLander——月球登陆器,这是一个平面二维游戏,经典的轨迹优化问题。登陆器有3个引擎(左、右、主引擎,主引擎)。假设燃料无限,游戏的任务是需要控制引擎将登陆器着陆在月球表面(指定的登陆点:下图下方中央两个旗子中间的区域),允许在登陆点外区域着陆。游戏有离散和连续动作两个版本,为了方便演示DQN,这里使用离散动作版本。

动作空间

0,1,2,3

状态空间

[-1.5 -1.5-5.-5.-3.1415927-5.-0.-0.] ~ [1.51.55.5.3.14159275.1.1. ],(8,)

动作空间

离散版本的动作空间有4种动作:

  • 0:不做任何事情,即登陆器按月球重力加速度下降

  • 1:左引擎点火,即向右

  • 2:主引擎点火,即向上

  • 3:右引擎点火,即向左

状态空间

状态空间是一个8维向量,包括:

  • 登陆器在画面中的坐标(x, y),登陆区中心坐标为(0, 0)

  • 登陆器水平和垂直方向的速度 (vx, vy)

  • 登陆器水平角度和角速度 (\theta,\omega)

  • 登陆器的左右支撑脚是否触达月球表面的两个布尔型状态(L, R)

初始状态,登陆器总是出现在画面中央上方,并被施加一个随机的外力(随机的初速度、角度等)

奖励函数

环境对每一步动作进行奖励:

  • 当登陆器靠近/远离登陆点,奖励增加/减少

  • 当登陆器速度增加/减少,奖励减少/增加

  • 当登陆器倾斜过大(水平角度过大),奖励减少

  • 每有一个支撑脚触达月面,奖励+10

  • 每一步,每有一个侧翼引擎开火,奖励-0.03

  • 每一步,主引擎开火,奖励-0.3

  • 当登陆器在登陆点安全着陆/坠毁、飞出画面,获得额外+100/-100奖励

终止条件

  • 坠毁,登陆器除了支撑脚之外的其他部位接触月球表面

  • 安全着陆(包括在着陆点外着陆)

  • 登陆器飞出画面范围

Q网络

Q网络结构,一个典型的MLP结构,输入状态向量,输出所有4个动作的Q值。

图片

4. 结语

本期是深度强化学习的第一章,介绍了DRL中最基础的DQN算法,在深度神经网络的加持下强化学习,保证了算法的收敛性的同时又突破了传统方法的限制。学习了DQN之后,我们理论上可以处理任何类型的状态空间,但是,动作空间仍然是离散的。我们今后将继续介绍更多的DRL算法,进一步扩宽强化学习的适用范围,应对更加复杂的环境。

 《深度强化学习》和人工智能入门学习zi料包

【1.超详细的人工智能学习大纲】:一个月精心整理,快速理清学习思路!

【2.基础知识】:Python基础+高数基础

【3.机器学习入门】:机器学习经典算法详解

【4.深度学习入门】:神经网络基础(CNN+RNN+GAN)

扫马获取:

相关文章:

强化学习系列:深度强化学习和DQN

1. 往期回顾 介绍了强化学习的基本概念和基本原理 介绍了基于动态规划的传统强化学习——价值迭代、策略迭代 介绍了在无模型的环境下,基于时序差分的表格型强化学习——Q-learning、SARSA 这些传统的方法都有各自的局限性,能适用的范围有限&#xf…...

AlimaLinux设置静态IP

通过nmcli命令来操作 步骤 1:确认当前活动的网络接口名称 首先,需要确认当前系统中可用的网络接口名称。可以使用以下命令查看: nmcli device步骤 2:修改配置以匹配正确的接口名称 sudo nmcli connection modify ens160 ipv4.…...

神经网络极简入门技术分享

1. 引言 神经网络是深度学习的基础,其设计灵感来源于人脑神经元的结构和工作方式。尽管现代神经网络已经变得异常复杂,但其核心原理却相对简单易懂。本报告旨在通过剖析神经网络的最基本单元——神经元,帮助初学者理解神经网络的工作原理。 …...

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法 描述: C20 QT6.9 VS2022 中使用QProcess::startDetached(“UI_Core.exe”, QStringList(), QString(), &UI_Manage_pid);是启动目标程序 能否同时告诉目标程序当前宿主程序的PID,在UI_CORE.EX…...

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。 Ribbon 会基于某种规则(如简单…...

leetcode0829. 连续整数求和-hard

1 题目: 连续整数求和 官方标定难度:难 给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1: 输入: n 5 输出: 2 解释: 5 2 3,共有两组连续整数([5],[2,3])求和后为 5。 示例 2: 输入: n 9 输出: …...

Python-77:古生物DNA序列血缘分析

问题描述 小U是一位古生物学家,正在研究不同物种之间的血缘关系。为了分析两种古生物的血缘远近,她需要比较它们的DNA序列。DNA由四种核苷酸A、C、G、T组成,并且可能通过三种方式发生变异:添加一个核苷酸、删除一个核苷酸或替换一…...

数据结构算法习题通关:树遍历 / 哈夫曼 / 拓扑 / 哈希 / Dijkstra 全解析

已知一棵二叉树先序遍历和中序遍历分别为 ABDEGCFH 和 DBGEACHF,请画出这个二叉树的逻辑结构并写出后序遍历的序列。 先序遍历:ABDEGCFH 中序遍历:DBGEACHF 先序遍历看出根为A,左子树DBGE,右子树CHF A的左子树 再…...

使用lldb查看Rust不同类型的结构

目录 前言 正文 标量类型 复合类型——元组 复合类型——数组 函数 &str struct 可变数组vec Iter String Box Rc Arc RefCell Mutex RwLock Channel 总结 前言 笔者发现这个lldb挺好玩的,可以查看不同类型的结构,虽然这好像是C的东…...

M0的基础篇之PWM学习

一、困惑 上一节课就是单纯的之配置了一个基础的定时器进行计数,计到一定的数值也就是到了一定的时间就进入中断,执行中断里面的任务,也就是一个最基础的定时的功能 这一节课的定时器产生了一个pwm波。也就是我们可以改变里面高电平的持续时间…...

win10-启动django项目时报错

前提 win10系统下已经安装了pip 和django(因为搜报错解决办法的时候,有博客说先检查下django有没有安装),另外也没有安装anaconda,没有用虚拟环境 报错如下 在pycharm执行新建app的命令python mange.py startapp app02…...

coze工作流完成行业调研报告

一、coze 是什么? Coze是由字节跳动推出的新一代AI应用开发平台,定位是零代码或低代码的AI开发平台,也被称为字节跳动版的GPTs ,国内版名为“扣子”。 Coze有国内版和国外版两个版本。国内版网址为http://www.coze.cn &#xff…...

为什么有了BST了,还要红黑树,红黑树有什么优点

BST(二叉搜索树)和红黑树都是常见的树形数据结构,但红黑树在某些方面对BST进行了优化,主要解决了BST在特定情况下可能出现的性能问题。以下是红黑树的核心优点及其存在的必要性: BST的局限性 BST的时间复杂度与树的高…...

【Linux基础】网络相关命令

目录 netstat命令 1.1 命令介绍 1.2 命令格式 1.3 常用选项 1.4 常用命令实例 1.4.1 显示所有TCP连接 1.4.2 查看路由表 1.4.3 实时监控网络接口流量 1.4.4 查看监听中的端口以及关联进程 ping命令 2.1 命令介绍 2.2 命令格式 2.3 常用选项 2.4 常用示例 ifconfi…...

DB4S:一个开源跨平台的SQLite数据库管理工具

DB Browser for SQLite(DB4S)是一款开源、跨平台的 SQLite 数据库管理工具,用于创建、浏览和编辑 SQLite 以及 SQLCipher 数据库文件。 功能特性 DB4S 提供了一个电子表格风格的数据库管理界面,以及一个 SQL 查询工具。DB4S 支持…...

多个python环境下,pip安装无法成功解决方案

问题 使用pip install xxx,安装过程很顺利且无任何报错,但是一旦在python中import xxx时,仍然提示xxx不存在。 解决方案 首先排除掉xxx包命名是否正确—— 这个非本文重点。 当已经确认xxx包命名正确,且常规通过pip install 即…...

人脸真假检测:SVM 与 ResNet18 的实战对比

在人工智能蓬勃发展的当下,人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而,随着人脸合成技术的日益成熟,人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机(SVM)结合局部二值模式&…...

求数组中的两数之和--暴力/哈希表

暴力法太好用了hhhhhhhhhhhhhhhhhhh我好爱鹅鹅鹅鹅鹅鹅呃呃呃呃呃呃呃呃呃呃 #include <iostream> #include <vector> using namespace std; int main(){ int n,target; cin>>n>>target; vector<int> nums(n); for(int i0;i<n;i){ cin>>…...

Go多服务项目结构优化:为何每个服务单独设置internal目录?

文章目录 Go多服务项目结构优化&#xff1a;为何每个服务单独设置internal目录&#xff1f;背景什么是 Go 的 internal 机制&#xff1f;传统根 internal 目录的局限为什么要每个服务单独设置 internal &#xff1f;推荐结构示例 总结 Go多服务项目结构优化&#xff1a;为何每个…...

Wallcraft 3.53.0 | 提供高质量动态4D壁纸,解锁高级版,无广告干扰

Wallcraft是一款专注于提供高质量、原创壁纸的应用程序&#xff0c;特别是其特色的动态4D壁纸。这款应用程序不仅提供了大量免费的4K超高清壁纸和炫酷背景&#xff0c;还特别推出了带有视差效果的动态超高清4K壁纸及视频壁纸。用户可以根据个人喜好选择并设置这些壁纸作为手机屏…...

akshare爬虫限制,pywencai频繁升级个人做量化,稳定数据源和券商的选择

做量化&#xff0c;数据和交易接口是策略和自动化交易的基石&#xff0c;而稳定的数据和快人一步的交易接口是个人做量化的催化剂。 之前写过一篇文章&#xff1a;个人做量化常用的数据&#xff0c;多以爬虫为主&#xff0c;最近akshare爬虫限制&#xff0c;pywencai频繁升级。…...

leetcode504.七进制数

标签&#xff1a;进制转换 机试真题 给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 示例 1: 输入: num 100 输出: "202" 示例 2: 输入: num -7 输出: "-10" 思路&#xff1a;求n进制就是循环取余数&#xff0c;…...

OpenAI 结构改革:迈向民主化 AI 的新篇章

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Satori:元动作 + 内建搜索机制,让大模型实现超级推理能力

Satori&#xff1a;元动作 内建搜索机制&#xff0c;让大模型实现超级推理能力 论文大纲一、背景&#xff1a;LLM 推理增强的三类方法1. 基于大规模监督微调&#xff08;SFT&#xff09;的推理增强2. 借助外部机制在推理时进行搜索 (RLHF / 多模型 / 工具)3. 现有局限性总结 二…...

Python序列化的学习笔记

1. Npy&Numpy O4-mini-Cursor&#xff1a;如果.npy文件里包含了「Python对象」而非纯数值数组时&#xff0c;就必须在加载时加上allow_pickleTrue。...

如何修改进程优先级?

文章目录 1. 摘要2. 命令实现2.1 使用 renice&#xff08;调整普通进程的优先级&#xff09;​2.2 使用 chrt&#xff08;调整实时进程的优先级&#xff09; 3. 代码实现 1. 摘要 在实际开发中&#xff0c;我们经常会遇到创建进程的场景&#xff0c;但是往往并不关心它的优先级…...

java命令行打包class为jar并运行

1.创建无包名类: 2.添加依赖jackson 3.引用依赖包 4.命令编译class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 编译生成class文件如下 <...

JAVA自动装箱拆箱

引言 Java 中的**装箱&#xff08;Boxing&#xff09;和拆箱&#xff08;Unboxing&#xff09;**是自动类型转换的机制&#xff0c;用于在基本数据类型&#xff08;如 int、long 等&#xff09;和其对应的包装类&#xff08;如 Integer、Long 等&#xff09;之间进行转换。这种…...

Linux系统之----模拟实现shell

在前面一个阶段的学习中&#xff0c;我们已经学习了环境变量、进程控制等等一系列知识&#xff0c;也许有人会问&#xff0c;学这个东西有啥用&#xff1f;那么&#xff0c;今天我就和大家一起综合运用一下这些知识&#xff0c;模拟实现下shell&#xff01; 首先我们来看一看我…...

Doris和Clickhouse对比

目录 一、Doris和Clickhouse对比**1. 底层架构****Doris****ClickHouse** **2. 运行原理****Doris****ClickHouse** **3. 使用场景****Doris****ClickHouse** **4. 优缺点对比****总结** 二、MPP架构和Shared-Nothing 架构对比**1. 什么是 MPP 架构&#xff1f;****定义****特点…...

思考:(linux) tmux 超级终端快速入门的宏观思维

tmux 工具集合 GitHub - rothgar/awesome-tmux: A list of awesome resources for tmux 要点&#xff1a; 习惯性思维的变换与宿主机之间的双向复制、粘贴手动备份全部窗口&#xff0c;以及还原自定义窗格提示信息TPM 插件的安装思想别名 在有些场景里&#xff0c;可能无法…...

JavaScript基础-全局作用域

在JavaScript中&#xff0c;理解不同种类的作用域是掌握这门语言的关键之一。作用域决定了变量和函数的可访问性&#xff08;即可见性和生命周期&#xff09;。其中&#xff0c;全局作用域是最基本也是最宽泛的作用域类型。本文将深入探讨全局作用域的概念、特点及其使用时需要…...

【MCAL】TC397+EB-tresos之I2c配置实战(同步、异步)

I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线&#xff0c;主要用于近距离、低速的芯片之间的通信。本篇文章首先从理论讲起&#xff0c;介绍了英飞凌TC3x系列芯片对应MCAL中对I2C驱动的定义与介绍&#xff0c;建议读者在阅读本篇文章之前对I2C有个简单的认识…...

电网拓扑分析:原理与应用

在现代电力系统中&#xff0c;电网拓扑分析是一项至关重要的技术&#xff0c;它为电力系统的安全、稳定和高效运行提供了坚实的基础。电网拓扑描述了电力系统中各元件&#xff08;如发电机、变压器、输电线路、负荷等&#xff09;之间的连接关系&#xff0c;通过拓扑分析&#…...

leetcode-hot-100(哈希)

写在前面 这部分官方标记为哈希&#xff0c;下面的代码使用的都是 C 进行实现&#xff0c;说到 C 中的哈希&#xff0c;需要了解一下 C 中的 hashtable&#xff08;std::unordered_map或std::unordered_set&#xff09;。 std::unordered_map std::unordered_map 是一个存储…...

音频类网站或者资讯总结

我爱音频网&#xff1a; 我爱音频网 - 我们只谈音频&#xff0c;丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 其他更多资讯 音频行业全品类深度剖析&#xff0c;2024市场趋势解读汇总-EDN 电子技术设计 (ednchina.com)...

优选算法——前缀和

目录 1. 数组的中心下标 2. 除自身以外数组的乘积 3. 和为k的子数组 4. 和可被K整除的子数组 5. 连续数组 6. 矩阵区域和 1. 数组的中心下标 题目链接&#xff1a;724. 寻找数组的中心下标 - 力扣&#xff08;LeetCode&#xff09; 题目展示&#xff1a; 题目分析&am…...

VScode密钥(公钥,私钥)实现免密登录【很细,很全,附带一些没免密登录成功的一些解决方法】

一、 生成SSH密钥对 ssh-keygen 或者 ssh-keygen -t rsa -b 4096区别&#xff1a;-t rsa可以明确表示生成的是 RSA 类型的密钥-b参数将密钥长度设置为 4096 位默认&#xff1a;2048 位密钥不指定-t参数&#xff0c;ssh -keygen默认也可能生成 RSA 密钥【确保本机安装ssh&#…...

MySQL进阶篇2_SQL优化、锁

文章目录 1 SQL优化1.1插入数据优化1.2主键优化页分裂页合并主键设计原则 1.3order by设计优化1.4group by设计优化小理解 1.5limit设计优化顺序IO和随机IO小疑惑 1.6count设计优化1.7update优化关于隐式事务事务的DML操作 锁全局锁表级锁表锁元数据锁意向锁 行级锁锁的释放条件…...

Yocto项目实战经验总结:从入门到高级的全面概览

本文面向开发者和实际项目经验者&#xff0c;分享经过大量实战积累的 Yocto 项目工程经验和基础技巧。本文简明但精彩&#xff0c;应用和观察相结合&#xff0c;充分适合做为全面进阶 Yocto 项目开发的实用指南。 一、入门理解&#xff1a;Yocto 是什么&#xff1f;规划如何开始…...

关于web3

主流看法&#xff0c;集合当前网络上的大部分资料的看法&#xff1f; 基于区块链运行的交易系统&#xff1f;面向的交易市场是基于世界的&#xff0c;由于将整个世界的交易联系起来&#xff0c;所以底层区块链就类似于一个非常大的分布式系统&#xff0c;由于需要在各个地区都…...

以影像为笔,劳润智在世界舞台上书写艺术之路

在光影交织中,摄影师劳润智的镜头仿佛能穿透喧嚣,捕捉人类情感最细腻的脉动。从疫情下洛杉矶裁缝日常的温馨瞬间,到象征自由与解脱的飞鸟影像,再到探索时间与空间交错的抽象作品,每一幅作品都展现了他对艺术的深度追求与对生活的温柔洞察。 劳润智的作品为他赢得了多个国际奖项…...

2025python学习笔记

一.Python语言基础入门 第一章 01.初识Python Python的起源&#xff1a; 1989年&#xff0c;为了打发圣诞节假期&#xff0c;Gudio van Rossum吉多范罗苏姆&#xff08;龟叔&#xff09;决心开发一个新的解释程序&#xff08;Python维形&#xff09;1991年&#xff0c;第一个…...

数学相关使用笔记

1、样本标准差计算步骤整理 1. 基础数据 数据样本&#xff1a;[44.530, 44.023, 43.837, 44.213, 44.498] 样本量&#xff1a;n5 2. 计算步骤 (1) 求均值 总和 44.53044.02343.83744.21344.498 221.101 均值 221.101/5 44.2202 (2) 求平方差 ① (44.530-44.2202) 0.3…...

0.环境初始化

容器化部署 Nginx 前端文件在 html\hmdp 下&#xff0c;挂载到 /usr/share/nginx/html 下 所以要求 nginx.conf &#xff1a; root /usr/share/nginx/html; index index.html; 反向代理&#xff1a;proxy_pass http://host.docker.internal:8081; listen 80; 因为容器内端…...

数仓-范式建模、维度建模、雪花模型、星型模型对比及其适用范围

1. 范式建模 定义 范式建模是一种基于关系型数据库设计的建模方法&#xff0c;遵循数据库的范式规则&#xff08;如第一范式、第二范式、第三范式等&#xff09;&#xff0c;通过消除数据冗余、规范化字段和表结构来优化存储。数据被分解为多个表&#xff0c;通过外键关系进行…...

批量导出docker镜像

#!/bin/bash # 创建备份目录 BACKUP_DIR"docker_images_single_backup" mkdir -p "$BACKUP_DIR" # 遍历所有镜像 docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | while read -r line; do # 提取镜像名称和ID REPO_TAG$(echo …...

棒球裁判员学习指南·棒球1号位

针对棒球裁判员的规则学习与能力提升指南&#xff0c;包含系统性学习路径和实践建议&#xff0c;帮助裁判员高效掌握规则并提升执法水平&#xff1a; 一、基础规则体系构建 1. 官方规则精读 核心文件&#xff1a;完整研读《世界棒垒球联盟&#xff08;WBSC&#xff09;官方规…...

vue注册用户使用v-model实现数据双向绑定

定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…...

BM14 链表的奇偶重排

20250510 题目我的解法❗️问题描述&#xff1a;为什么会报 OutOfMemoryError&#xff1f;&#x1f50d;详细分析✅如何修复&#xff1f;✅推荐修改方案&#xff08;正确版本&#xff09;✅为什么这样改有效&#xff1f;&#x1f9ea;测试示例✅总结 修改 题目 我的解法 impor…...