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

强化学习的一些概念

目录

强化学习

打个比方

核心要素

State

Action

Reward

几个代码demo

学习目标


强化学习

强化学习(Reinforcement Learning, RL)是机器学习的一个分支,旨在让智能体(Agent)通过与环境的交互学习最优策略,以最大化长期累积奖励。其核心思想是 “试错 - 反馈”,智能体在环境中通过不断尝试动作,根据环境反馈的奖励调整行为,最终学会在不同状态下选择最优动作。

打个比方

强化学习的「自主生存法则」:像玩游戏一样学本领

想象你养了个智能体(比如扫地机器人),把它扔进环境(你家客厅),然后告诉它:「自己想办法把地扫干净,扫得好有奖励,撞桌子就扣钱!」 这就是强化学习的核心 ——让智能体在「试错 - 反馈」中自己摸出一套生存策略。

对比人类小孩学走路:

没人教婴儿「先迈左脚还是右脚」(无监督)

摔疼了自己哭(负面反馈),站稳了家人笑(正面反馈)

最终形成「平衡感 + 迈步节奏」的肌肉记忆(策略)

强化学习的智能体,就是这样一个「会哭会笑的电子小孩」。

智能体的「三件套」:眼睛(状态)、手脚(动作)、奖惩(反馈)

以扫地机器人为例拆解:

状态(眼睛看到的世界)

实时感知:前方有没有桌子(激光雷达数据)、哪里灰尘多(摄像头识别)、电量剩多少(传感器)

大白话:「现在在客厅茶几旁,左边有灰尘,右边是沙发,电量 80%」

动作(手脚的选择)

可选操作:前进、左转、右转、吸尘、回充

大白话:「是先吸茶几底下,还是绕到沙发后面?」

奖励(好坏的裁判)

正向:每吸 1㎡灰尘 + 1 分,按时回充 + 5 分

负向:撞桌子 - 3 分,没电关机 - 10 分

大白话:「吸尘是赚钱,撞桌是罚款,没电最亏!」

自主学习的「闭环逻辑」:从乱撞到老司机

智能体的学习过程像玩「无限循环的闯关游戏」:

第一阶段:乱撞期(探索)

机器人:「反正没电就关机,先乱开试试!」(随机选动作)

结果:撞墙 3 次,偶然吸到灰尘(获得零星奖励)

第二阶段:摸规律(试错中总结)

发现:「电量低于 20% 回充,能避免关机扣分」

记住:「看到灰尘多的区域,先吸尘再移动更划算」

第三阶段:老司机(策略成型)

最优策略:「优先清扫高灰尘区→电量 30% 时规划回充路径→避开家具密集区」

结果:从「乱撞扣分」变成「稳定高分」,甚至比人类指挥的效率还高

为什么说「自动驾驶是强化学习的终极考场」?

对比扫地机器人,自动驾驶的「环境复杂度」暴增:

状态:不仅是车身传感器,还要预测其他车辆、行人的行为(比如外卖电动车突然变道)

动作:刹车力度、转向角度、变道时机,精度要求到厘米级

奖励:安全到达 + 100 分,急刹乘客难受 - 20 分,违章 - 50 分,碰撞 - 1000 分(直接「Game Over」)

难点:需要在 0.1 秒内完成「感知状态→计算最优动作→执行」的循环,还要适应雨天、夜间等极端场景

这就是为什么特斯拉、Waymo 等公司疯狂投入强化学习 ——只有让汽车自己在虚拟世界「撞坏」100 万次,才能在现实中「零事故」。

一句话总结强化学习:

「给智能体一个‘好坏’的标准(奖励),让它在环境里自己‘摸爬滚打’,最终学会「既能占便宜,又能避坑」的生存之道。」

(就像父母教孩子:「自己出去玩,别碰火(负反馈),帮妈妈拿东西有糖吃(正反馈)」,孩子最终学会独立生存。)

核心要素

智能体与环境:智能体是决策主体(如机器人、游戏角色),环境是智能体行动的空间。两者通过 “状态 - 动作 - 奖励” 循环交互

State

状态(State):环境当前的观测信息,如机器人的位置、游戏画面等

Action

动作(Action):智能体在当前状态下的选择,如移动、跳跃

1. 动作的本质与分类

动作是智能体与环境交互的直接载体,其设计决定了智能体的行为能力。根据动作的特性,可分为以下两类:

离散动作空间:动作数量有限且可数,如机器人的移动方向(上 / 下 / 左 / 右)、游戏中的按键操作等。

连续动作空间:动作取值为连续区间,如自动驾驶中的油门深度(0-100%)、机械臂的关节角度等。

关键挑战:

离散动作空间需枚举所有可能动作,适合规则明确的场景;

连续动作空间需通过策略网络输出概率分布或直接生成动作(如 DDPG 中的正态分布采样)。

2. 动作空间的设计原则

完整性:动作集合需覆盖所有可能的有效行为,避免遗漏关键操作。

正交性:动作间应相互独立,减少冗余(如同时存在 “加速” 和 “前进” 可能导致策略混淆)。

可扩展性:允许动态调整动作空间(如在训练中逐步解锁新动作)。

3. 数学表达

离散动作:用独热编码(One-Hot Encoding)表示,如 4 个方向的动作可表示为 [0,0,0,1](右)。

连续动作:常用均值 - 方差模型(如正态分布)或直接通过神经网络输出动作值,如:a∼N(μ(s∣θ),σ2(s∣θ))

其中,μ和σ由策略网络参数θ生成。

4. 典型应用场景

离散动作:Atari 游戏(跳跃、开火)、围棋落子(19x19 位置)。

连续动作:机器人控制(关节扭矩)、飞行器姿态调整(俯仰角、滚转角)。

Reward

奖励(Reward):环境对动作的反馈,正数表示鼓励,负数表示惩罚

1. 奖励的核心作用

奖励是环境对智能体行为的即时反馈信号,是驱动学习的核心动力。其作用包括:

行为引导:通过正负反馈塑造智能体策略(如奖励 “直行”,惩罚 “碰撞”)。

目标对齐:将抽象目标转化为可量化的数值(如 “到达终点” 对应 + 100 奖励)。

2. 奖励设计的关键原则

明确性:奖励需直接反映动作对目标的贡献(如 “进球” 奖励远大于 “传球”)。

稀疏性与密度平衡:稀疏奖励(如仅在成功时给予奖励)可能导致学习缓慢;

密集奖励(如每步给予小奖励)可能引入噪声,需谨慎设计。

延迟奖励处理:通过折扣因子\(\gamma\)(0≤γ≤1)将未来奖励折算为现值:\(G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \dots\)

3. 奖励塑形(Reward Shaping)

通过人工设计辅助奖励加速学习:

中间目标奖励:在路径规划中,每接近目标点一步给予小额奖励。

内在动机奖励:探索未知区域时给予奖励,解决 “探索 - 利用” 困境。

惩罚设计:对危险行为(如车辆闯红灯)施加大额负奖励。

4. 数学公式与算法关联

Q-learning:目标 Q 值为\(r + \gamma \max_a Q(s', a)\),奖励直接影响更新方向。

策略梯度:用累积奖励\(R(\tau)\)作为权重更新策略网络:\(\nabla \theta \propto \sum_{t=1}^T R(\tau) \nabla \log \pi(a_t|s_t; \theta)\)

5. 典型应用场景

游戏:击败敌人 + 5 分,死亡 - 10 分。

机器人:保持平衡每帧 + 1 分,摔倒 - 50 分。

金融:盈利 + 1% 奖励,亏损 - 0.5% 惩罚。

几个代码demo

离散动作空间示例:简单的网格世界

import numpy as np# 定义网格世界的大小
GRID_SIZE = 4
# 定义动作:上、下、左、右
ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# 定义折扣因子
GAMMA = 0.9
# 定义学习率
ALPHA = 0.1
# 定义迭代次数
EPISODES = 1000# 初始化 Q 表
q_table = np.zeros((GRID_SIZE * GRID_SIZE, len(ACTIONS)))# 定义状态转换函数
def get_state(x, y):return x * GRID_SIZE + y# 定义奖励函数
def get_reward(x, y):if x == GRID_SIZE - 1 and y == GRID_SIZE - 1:return 100  # 到达目标点给予奖励elif x < 0 or x >= GRID_SIZE or y < 0 or y >= GRID_SIZE:return -10  # 越界给予惩罚else:return -1  # 每走一步给予小惩罚# Q - learning 算法
for episode in range(EPISODES):# 初始化状态
    x, y = 0, 0
    done = Falsewhile not done:
        state = get_state(x, y)# 选择动作(epsilon - greedy 策略)
        epsilon = 0.1if np.random.uniform(0, 1) < epsilon:
            action_idx = np.random.choice(len(ACTIONS))else:
            action_idx = np.argmax(q_table[state])
        action = ACTIONS[action_idx]# 执行动作
        new_x = x + action[0]
        new_y = y + action[1]
        new_state = get_state(new_x, new_y)# 获取奖励
        reward = get_reward(new_x, new_y)# 更新 Q 表
        q_table[state, action_idx] = (1 - ALPHA) * q_table[state, action_idx] + ALPHA * (
                reward + GAMMA * np.max(q_table[new_state]))# 判断是否到达目标if reward == 100:
            done = True
        x, y = new_x, new_y# 打印最终的 Q 表
print("Final Q - table:")
print(q_table)

实现了一个简单的网格世界,智能体需要从左上角走到右下角。动作空间是离散的(上、下、左、右),通过 Q - learning 算法学习最优策略有点类似动态规划策略要求引导

连续动作空间示例:简单的一维移动问题(使用 DDPG 简化版)

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np# 定义状态维度和动作维度
STATE_DIM = 1
ACTION_DIM = 1
# 定义折扣因子
GAMMA = 0.9
# 定义迭代次数
EPISODES = 1000# 定义策略网络
class PolicyNetwork(nn.Module):def __init__(self):super(PolicyNetwork, self).__init__()
        self.fc1 = nn.Linear(STATE_DIM, 16)
        self.fc2 = nn.Linear(16, ACTION_DIM)def forward(self, state):
        x = torch.relu(self.fc1(state))
        action = torch.tanh(self.fc2(x))  # 动作范围在 [-1, 1]return action# 初始化策略网络
policy_network = PolicyNetwork()
optimizer = optim.Adam(policy_network.parameters(), lr=0.001)# 定义奖励函数
def get_reward(state, action):
    target_state = 5.0
    new_state = state + action.item()
    reward = -np.abs(new_state - target_state)return reward# 训练过程
for episode in range(EPISODES):
    state = torch.tensor([0.0], dtype=torch.float32)
    done = Falsewhile not done:
        action = policy_network(state)
        reward = get_reward(state, action)# 简单的策略梯度更新
        loss = -reward * action
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()# 更新状态
        state = torch.tensor([state.item() + action.item()], dtype=torch.float32)if np.abs(state.item() - 5.0) < 0.1:
            done = True# 打印最终的策略网络参数
print("Final policy network parameters:")
for name, param in policy_network.named_parameters():print(name, param.data)

实现了一个简单的一维移动问题,智能体需要从位置 0 移动到位置 5。动作空间是连续的,通过一个简单的策略网络学习最优动作。

奖励塑形示例:在网格世界中添加中间目标奖励

import numpy as np# 定义网格世界的大小
GRID_SIZE = 4
# 定义动作:上、下、左、右
ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# 定义折扣因子
GAMMA = 0.9
# 定义学习率
ALPHA = 0.1
# 定义迭代次数
EPISODES = 1000# 初始化 Q 表
q_table = np.zeros((GRID_SIZE * GRID_SIZE, len(ACTIONS)))# 定义状态转换函数
def get_state(x, y):return x * GRID_SIZE + y# 定义奖励函数(包含中间目标奖励)
def get_reward(x, y):if x == GRID_SIZE - 1 and y == GRID_SIZE - 1:return 100  # 到达目标点给予奖励elif x < 0 or x >= GRID_SIZE or y < 0 or y >= GRID_SIZE:return -10  # 越界给予惩罚elif x > 0 and y > 0:return 1  # 中间目标奖励else:return -1  # 每走一步给予小惩罚# Q - learning 算法
for episode in range(EPISODES):# 初始化状态
    x, y = 0, 0
    done = Falsewhile not done:
        state = get_state(x, y)# 选择动作(epsilon - greedy 策略)
        epsilon = 0.1if np.random.uniform(0, 1) < epsilon:
            action_idx = np.random.choice(len(ACTIONS))else:
            action_idx = np.argmax(q_table[state])
        action = ACTIONS[action_idx]# 执行动作
        new_x = x + action[0]
        new_y = y + action[1]
        new_state = get_state(new_x, new_y)# 获取奖励
        reward = get_reward(new_x, new_y)# 更新 Q 表
        q_table[state, action_idx] = (1 - ALPHA) * q_table[state, action_idx] + ALPHA * (
                reward + GAMMA * np.max(q_table[new_state]))# 判断是否到达目标if reward == 100:
            done = True
        x, y = new_x, new_y# 打印最终的 Q 表
print("Final Q - table with reward shaping:")
print(q_table)

在之前的网格世界基础上添加了中间目标奖励,当智能体到达网格的右上角区域时会给予小额奖励,以此加速学习过程。ps蓝桥里面的有条件的DFSBFS+动态规划算法题目

学习目标

智能体的目标是找到最优策略(Policy),即从状态到动作的映射,使得长期累积奖励最大化。例如,自动驾驶汽车需学会在不同路况下选择加速、刹车或转向,以安全高效到达目的地。

关键方法

基于价值(Value-Based)Q-learning:通过 Q 表或 Q 网络评估动作价值,选择当前状态下 Q 值最大的动作。

DQN:结合深度神经网络处理连续状态,如 Atari 游戏中直接输入像素画面

基于策略(Policy-Based)策略梯度(Policy Gradient):直接学习策略函数,通过梯度上升优化动作概率,如 REINFORCE 算法

PPO(近端策略优化):通过重要性采样和约束机制,平衡策略更新幅度,提高稳定性

结合价值与策略(Actor-Critic)A3C:异步优势 Actor-Critic,利用多线程并行探索环境,加速学习

DDPG:处理连续动作空间,结合确定性策略和目标网络技术

核心挑战

探索与利用(Exploration vs Exploitation):智能体需在已知高奖励动作和未知动作间权衡,常用 ε-greedy 或噪声策略。

延迟奖励:当前动作的影响可能在未来才显现,需通过折扣因子(γ)将未来奖励折算为现值

样本效率:强化学习依赖与环境的实时交互,数据生成成本高,经验回放(Replay Buffer)等技术可重复利用历史数据

应用领域

游戏与博弈:AlphaGo 击败人类棋手、OpenAI Five 在 DOTA 2 中夺冠

机器人控制:四足机器人行走、机械臂操作

自动驾驶:决策规划模块

资源管理:数据中心调度、能源分配

相关文章:

强化学习的一些概念

目录 强化学习 打个比方 核心要素 State Action Reward 几个代码demo 学习目标 强化学习 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的一个分支&#xff0c;旨在让智能体&#xff08;Agent&#xff09;通过与环境的交互学习最优策略&#xff0c;以…...

MambaTab:表格数据处理的新利器

——基于结构化状态空间模型的特征增量学习框架 摘要 本文提出MambaTab&#xff0c;一种基于结构化状态空间模型&#xff08;SSM&#xff09;的表格数据处理框架。通过创新的嵌入稳定化设计与轻量化SSM架构&#xff0c;MambaTab在普通监督学习和特征增量学习场景中均表现优异&…...

Kafka的流量控制机制

Kafka的流量控制机制 Kafka 作为一款高吞吐量的消息队列系统&#xff0c;能够在海量数据场景下提供稳定的消息生产和消费能力&#xff0c;其背后的流量控制机制功不可没。我们需要认识到&#xff0c;Kafka 的流量控制并非仅仅是为了防止系统过载或崩溃&#xff0c;它的目标是实…...

RabbitMQ支持的复杂的消息交换模式

RabbitMQ支持多种复杂的消息交换模式&#xff0c;这些模式通过不同的交换机类型和队列特性实现&#xff0c;能够满足多样化的业务需求。以下是RabbitMQ支持的主要复杂消息交换模式&#xff1a; 1. Direct Exchange&#xff08;直连交换机&#xff09; 直连交换机根据消息的路由…...

CSSHTML新特性

HTML5 新特性探秘 在 Web 开发的不断演进中&#xff0c;HTML5 带来了一系列令人振奋的新特性&#xff0c;极大地提升了网页的功能和用户体验。今天&#xff0c;我们就来深入探究一下这些新特性。 语义化标签&#xff1a;让网页结构更清晰 语义化标签是 HTML5 的一大亮点。在…...

51单片机的工作方式

目录 一、51 单片机的时钟电路及时钟信号 &#xff08;一&#xff09;时钟电路 &#xff08;二&#xff09;时钟信号 二、51 单片机的CPU 时序 &#xff08;一&#xff09;时钟周期​ &#xff08;二&#xff09;机器周期​ &#xff08;三&#xff09;指令周期​ 三、…...

Java算法OJ(12)

目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道的练习题&#xff0c;欢迎大家在评论区多多交流&#xff0c;废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目&#xff1a;斐波那契数列_牛客题霸…...

MrRobot靶机详细解答

一、主机发现 arp-scan -l二、端口扫描、目录枚举、指纹识别 2.1端口扫描 nmap -p- 192.168.55.147发现22端口关闭&#xff0c;且无其它特殊端口&#xff0c;只能去网页中寻找信息 2.2目录枚举 dirb http://192.168.55.1472.3指纹识别 nmap 192.168.55.147 -sV -sC -O --…...

java线性表(单向链表)

对于链表我们有很多种&#xff0c;有带头和不带头&#xff0c;双向和单项&#xff0c;循环和不循环。 我们实现的单向链表是不带头单向不循环链表。 链表不比顺序表&#xff0c;它可以连续也可以不连续&#xff0c;是链子型的每条链子两边都有节点&#xff08;除首尾)。 单向…...

QT:动态属性和对象树

动态对象 1.添加Q_PROPERTY对象 #ifndef MYPROPERTYCLASS_H #define MYPROPERTYCLASS_H#include <QObject>class MyPropertyClass : public QObject {Q_OBJECTQ_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged) public:explicit MyPropertyClass(Q…...

编程语言的几种常见的分类方法

一、 按照编程范式分类 命令式编程语言 强调通过语句来改变程序状态&#xff0c;如 C、Pascal、Fortran 等。 面向对象编程语言 基于对象和类的概念&#xff0c;支持封装、继承和多态&#xff0c;如 Java、C、Python、Ruby 等。 函数式编程语言 注重不可变性和纯函数&#xf…...

算法——层序遍历和中序遍历构造二叉树

晴问 #include <iostream> #include <vector> #include <queue> #include <unordered_map>using namespace std;struct TreeNode {int data;TreeNode *left;TreeNode *right;TreeNode(int data) : data(data), left(nullptr), right(nullptr) {} };//…...

中考英语之06语态(动词语态-简单)

1 主动语态和被动语态 在初中英语中&#xff0c;语态是动词的一种形式&#xff0c;用于说明主语与谓语动词之间的关系&#xff0c;主要有主动语态和被动语态两种。 1.1 主动语态 定义&#xff1a;表示主语是动作的执行者。结构&#xff1a;主语 谓语&#xff08;及物动词&a…...

linux常用基础命令_最新

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...

PH热榜 | 2025-03-16

1. BrowserAgent 标语&#xff1a;基于浏览器的人工智能代理 - 无限使用&#xff0c;固定费用 介绍&#xff1a;在您的浏览器中直接创建和运行AI工作流程&#xff0c;无需支付API费用。我们的可视化编辑器不需要编写代码&#xff0c;同时我们的浏览器本地技术支持以固定价格进…...

《论语别裁》第01章 学而(27) 无所适从的礼俗

下面讲做学问的态度。 有子曰&#xff1a;礼之用&#xff0c;和为贵&#xff0c;先王之道&#xff0c;斯为美&#xff0c;小大由之&#xff1b;有所不行&#xff0c;知和而和&#xff0c;不以礼节之&#xff0c;亦不可行也。 为什么讲学问讲到礼&#xff1f;这个礼&#xff0c…...

关于进程的实验(子进程和父进程相关的)

文章目录 1.第一个问题2.第二个问题3.第三个问题 1.第一个问题 编写一段程序&#xff0c;利用系统调用fork( )创建两个进程。当此程序运行时&#xff0c;在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符&#xff1a;父进程显示字符“a”;子进程分别显…...

《基于视频监控的智能跌倒检测系统》开题报告

一、本课题研究目标 本课题旨在研究并实现一个基于视频监控的智能跌倒检测系统&#xff0c;以有效识别老年人或需特殊照顾人群的跌倒事件&#xff0c;并实现自动报警功能。具体而言&#xff0c;该系统将通过机器学习和深度学习技术&#xff0c;对视频数据中的行为模式进行分析&…...

Flask中的装饰器

在 Flask 中&#xff0c;装饰器&#xff08;Decorator&#xff09;是一种 Python 语法特性&#xff0c;它允许你在不修改原始函数的情况下&#xff0c;扩展其功能。Flask 使用装饰器来定义路由、请求前后钩子、中间件等。 1. Flask 装饰器的基本概念 Python 的装饰器本质上是一…...

MySQL配置文件my.cnf详解

目前使用的服务器系统是CentOS8.5 ,针对MySql8.4的配置示例&#xff0c;自己根据实际情况修改。 安装MySql8.4时&#xff0c;MySql8.4没有默认的my.cnf,需要用户根据需要自行配置my.cnf文件&#xff0c;大概可看到下面这样的参数列表&#xff0c;可能不同版本的mysql参数多少会…...

SonarQube安装及结合IDEA使用详细教程(2025适配版)

一、环境验证与准备 JDK版本确认 PS C:\> java -version openjdk version "17.0.14" 2025-01-21 LTS OpenJDK Runtime Environment Zulu17.5615-CA (build 17.0.147-LTS) OpenJDK 64-Bit Server VM Zulu17.5615-CA (build 17.0.147-LTS)安装路径说明 主程序路径&a…...

2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题E卷

目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 医院在进行网络部分信息化建设方案设计过程中,需要保证医院、血液中心通过社保网进行互连互通,同时满足献血中心与医…...

python列表基础知识

列表 创建列表 1.列表的定义&#xff1a;可变的&#xff0c;有序的数据结构&#xff0c;可以随时添加或者删除其中的元素 2.基本语法&#xff1a;字面量【元素1&#xff0c;元素2&#xff0c;元素3】使用[]创建列表 定义变量&#xff1a;变量名称【元素1&#xff0c;元素2&…...

vue echarts封装使用

echarts 尺寸自动调节 resize.js 柱状图 components/dashboard/lineChart.vue <template><div :class"className" :style"{height:height,width:width}" /> </template><script> import echarts from echarts require(echarts/…...

PTP协议赋能高精度时间同步网络

什么是PTP&#xff1f; PTP&#xff08;精确时间协议&#xff0c;Precision Time Protocol&#xff09; 是一种基于IEEE 1588标准的网络时间同步协议&#xff0c;旨在为分布式系统中的设备提供亚微秒级&#xff08;甚至纳秒级&#xff09;的高精度时钟同步。其核心目标是通过消…...

使用WireShark解密https流量

概述 https协议是在http协议的基础上&#xff0c;使用TLS协议对http数据进行了加密&#xff0c;使得网络通信更加安全。一般情况下&#xff0c;使用WireShark抓取的https流量&#xff0c;数据都是加密的&#xff0c;无法直接查看。但是可以通过以下两种方法&#xff0c;解密抓…...

MIDI,AI 3D场景生成技术

MIDI&#xff08;Multi-Instance Diffusion for Single Image to 3D Scene Generation&#xff09;是先进的3D场景生成技术&#xff0c;能在短时间内将单张图像转化为高保真度的3D场景。通过智能分割输入图像&#xff0c;识别出场景中的独立元素&#xff0c;再基于多实例扩散模…...

三分钟掌握视频剪辑 | 在 Rust 中优雅地集成 FFmpeg

前言 在当今的短视频时代&#xff0c;高效的视频剪辑已成为内容创作者和开发者的迫切需求。无论是裁剪视频开头结尾、提取高光时刻&#xff0c;还是制作 GIF、去除广告&#xff0c;剪辑都是必不可少的一环。 然而&#xff0c;批量处理大量视频并非易事&#xff0c;常见的挑战…...

Linux 快捷键 | 终端快捷键 / 键盘快捷键

注&#xff1a;本文为 “Linux 快捷键” 相关文章合辑。 英文引文&#xff0c;机翻未校。 未整理去重。 Linux 终端常用快捷键 组合键 ~~~~~~~ 功能描述Ctrl a光标移动到行首&#xff08;Ahead of line&#xff09;&#xff0c;相当于通常的 Home 键Ctrl b光标往回 (Back…...

allWebPlugin中间件自动适应Web系统多层iframe嵌套

应用背景 在Web项目集成开发中&#xff0c;经常遇到主页面嵌套iframe&#xff0c;甚至iframe内部页面嵌套iframe的应用场景。笔者在某大型招投标项目应用中就遇到这种应用。为了降低用户原有应用系统集成难度&#xff0c;实现无感集成&#xff0c;allWebPlugin中间件实现自动适…...