用自己的电脑做服务器建网站/河南网站顾问

用自己的电脑做服务器建网站,河南网站顾问,wordpress博客空间,网站建设公司江苏深度学习进阶 | 第7集:深度实战 通过训练一个智能体玩游戏 来洞察 强化学习(RL)与决策系统 在深度学习的广阔领域中,强化学习(Reinforcement Learning, RL)是一种独特的范式,它通过智能体与环境…

深度学习进阶 | 第7集:深度实战 通过训练一个智能体玩游戏 来洞察 强化学习(RL)与决策系统

在深度学习的广阔领域中,强化学习(Reinforcement Learning, RL)是一种独特的范式,它通过智能体与环境的交互来学习如何做出最优决策。从自动驾驶到游戏AI,再到自然语言处理,强化学习的应用正在不断扩展。本文将带你深入了解强化学习的核心概念、经典算法以及前沿应用,并通过一个实战项目帮助你掌握其实际操作。


知识点

1. 强化学习的基本概念

强化学习的核心思想是“试错学习”。智能体(Agent)通过与环境(Environment)的交互,逐步学会采取行动以最大化累积奖励(Reward)。以下是几个关键术语:

  • 状态(State):智能体对环境的观察结果,表示当前所处的情况。
  • 动作(Action):智能体可以采取的行为。
  • 奖励(Reward):智能体在某一状态下采取某一动作后获得的反馈信号,用于指导学习。
  • 策略(Policy):智能体根据当前状态选择动作的规则。
  • 价值函数(Value Function):衡量某一状态下未来可能获得的累积奖励的期望值。

强化学习的目标是找到一个最优策略,使得智能体在长期中能够获得最大的累积奖励。


2. Q-Learning 与深度 Q 网络(DQN)

Q-Learning 是一种经典的强化学习算法,基于价值迭代的思想。它通过更新 Q 值表(Q-Table)来估计每个状态-动作对的价值。然而,当状态空间和动作空间较大时,传统的 Q-Learning 难以应对。

为了解决这一问题,DeepMind 提出了深度 Q 网络(Deep Q-Network, DQN),将神经网络引入 Q-Learning 中,用以近似 Q 值函数。DQN 的核心创新包括:

  • 经验回放(Experience Replay):存储智能体的历史经验,并随机采样进行训练,打破数据之间的相关性。
  • 目标网络(Target Network):使用一个独立的网络来计算目标 Q 值,稳定训练过程。

DQN 在 Atari 游戏中的成功应用标志着深度强化学习的崛起。


3. 近端策略优化(PPO)与 Actor-Critic 方法

除了基于价值的方法(如 DQN),强化学习还包括基于策略的方法。Actor-Critic 是一种结合了策略优化和价值评估的框架:

  • Actor:负责生成策略,直接输出动作。
  • Critic:负责评估策略的好坏,提供价值函数的估计。

近端策略优化(Proximal Policy Optimization, PPO)是目前最流行的策略优化算法之一。它的主要特点是:

  • 使用一个“剪切”的目标函数,限制策略更新的幅度,避免训练不稳定。
  • 计算效率高,适合大规模任务。

PPO 在连续控制任务(如机器人运动)和复杂游戏环境中表现出色。


实战项目:使用 DQN 玩 Atari 游戏

项目背景

我们将使用 DQN 算法训练一个智能体玩经典的 Atari 游戏《Breakout》。这款游戏的目标是控制挡板击打小球,击碎砖块并得分。

实现步骤

  1. 环境搭建

    • 使用 OpenAI Gym 提供的 Atari 环境。
    • 安装必要的依赖库,如 gymtensorflowpytorch
  2. 模型设计

    • 构建一个卷积神经网络(CNN)作为 Q 网络,输入为游戏画面,输出为每个动作的 Q 值。
    • 设置目标网络和经验回放缓冲区。
  3. 训练过程

    • 初始化智能体和环境。
    • 在每一步中,智能体根据 ε-greedy 策略选择动作,并与环境交互。
    • 将经验存储到缓冲区中,并随机采样进行训练。
    • 定期更新目标网络的参数。
  4. 测试与评估

    • 在训练完成后,测试智能体的表现。
    • 可视化游戏画面和奖励曲线。

示例代码片段

import gym
import numpy as np
import tensorflow as tf# 创建 Atari 环境
env = gym.make("Breakout-v0")# 定义 DQN 网络
class DQN(tf.keras.Model):def __init__(self, num_actions):super(DQN, self).__init__()self.conv1 = tf.keras.layers.Conv2D(32, 8, strides=4, activation='relu')self.conv2 = tf.keras.layers.Conv2D(64, 4, strides=2, activation='relu')self.conv3 = tf.keras.layers.Conv2D(64, 3, strides=1, activation='relu')self.flatten = tf.keras.layers.Flatten()self.fc = tf.keras.layers.Dense(512, activation='relu')self.q_values = tf.keras.layers.Dense(num_actions)def call(self, inputs):x = self.conv1(inputs)x = self.conv2(x)x = self.conv3(x)x = self.flatten(x)x = self.fc(x)return self.q_values(x)# 训练逻辑(简化版)
num_episodes = 1000
for episode in range(num_episodes):state = env.reset()total_reward = 0while True:action = agent.select_action(state)  # 根据策略选择动作next_state, reward, done, _ = env.step(action)agent.store_experience(state, action, reward, next_state, done)agent.train()  # 更新 Q 网络total_reward += rewardstate = next_stateif done:breakprint(f"Episode {episode}: Total Reward = {total_reward}")

图示

强化学习框架图

在这里插入图片描述

图1:强化学习的基本框架,包括智能体、环境、状态、动作和奖励。

游戏画面截图

图2:使用 DQN 训练的智能体在《Breakout》游戏中的表现。


为促进大家实战经验,下面我将设计一个基于 pygame 的简化版《Breakout》游戏,并使用深度 Q 网络(DQN)来训练智能体玩这个游戏。以下是完整的实战案例、代码和部署过程,分为5个部分:游戏开发DQN 实现环境封装和训练智能体整合到游戏中游戏渲染


实战拓展1:基于 Pygame 的 Breakout 游戏

游戏规则

  • 玩家控制一个挡板(paddle),通过左右移动接住反弹的小球。
  • 小球撞击砖块后会消除砖块并得分。
  • 如果小球掉落到屏幕底部,游戏结束。

游戏代码

import pygame
import random# 初始化 Pygame
pygame.init()# 屏幕尺寸
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 500
BLOCK_WIDTH = 50
BLOCK_HEIGHT = 20
PADDLE_WIDTH = 80
PADDLE_HEIGHT = 10
BALL_RADIUS = 8# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)# 初始化屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Breakout")# 定义挡板类
class Paddle:def __init__(self):self.width = PADDLE_WIDTHself.height = PADDLE_HEIGHTself.x = (SCREEN_WIDTH - self.width) // 2self.y = SCREEN_HEIGHT - 30self.speed = 7def move(self, direction):if direction == "LEFT" and self.x > 0:self.x -= self.speedelif direction == "RIGHT" and self.x < SCREEN_WIDTH - self.width:self.x += self.speeddef draw(self):pygame.draw.rect(screen, BLUE, (self.x, self.y, self.width, self.height))# 定义小球类
class Ball:def __init__(self):self.radius = BALL_RADIUSself.x = SCREEN_WIDTH // 2self.y = SCREEN_HEIGHT // 2self.dx = random.choice([-4, 4])self.dy = -4def move(self):self.x += self.dxself.y += self.dy# 边界碰撞检测if self.x <= 0 or self.x >= SCREEN_WIDTH:self.dx = -self.dxif self.y <= 0:self.dy = -self.dydef draw(self):pygame.draw.circle(screen, RED, (self.x, self.y), self.radius)# 定义砖块类
class Block:def __init__(self, x, y):self.width = BLOCK_WIDTHself.height = BLOCK_HEIGHTself.x = xself.y = yself.alive = Truedef draw(self):if self.alive:pygame.draw.rect(screen, WHITE, (self.x, self.y, self.width, self.height))# 初始化游戏对象
paddle = Paddle()
ball = Ball()
blocks = []
for row in range(5):for col in range(SCREEN_WIDTH // BLOCK_WIDTH):blocks.append(Block(col * BLOCK_WIDTH, row * BLOCK_HEIGHT + 50))# 主循环
clock = pygame.time.Clock()
running = True
score = 0while running:screen.fill(BLACK)for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 挡板控制keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:paddle.move("LEFT")if keys[pygame.K_RIGHT]:paddle.move("RIGHT")# 小球移动ball.move()# 小球与挡板碰撞检测if (paddle.x < ball.x < paddle.x + paddle.width) and (paddle.y < ball.y + ball.radius < paddle.y + paddle.height):ball.dy = -ball.dy# 小球与砖块碰撞检测for block in blocks:if block.alive and block.x < ball.x < block.x + block.width and block.y < ball.y < block.y + block.height:block.alive = Falseball.dy = -ball.dyscore += 10# 绘制游戏对象paddle.draw()ball.draw()for block in blocks:block.draw()# 显示分数font = pygame.font.SysFont(None, 36)score_text = font.render(f"Score: {score}", True, WHITE)screen.blit(score_text, (10, 10))# 检查游戏结束if ball.y > SCREEN_HEIGHT:running = Falsepygame.display.flip()clock.tick(60)pygame.quit()

实战拓展2:使用 DQN 训练智能体

DQN 实现

我们将使用 tensorflow 构建 DQN 模型,并训练智能体玩上述游戏。

1. 环境封装

为了将游戏适配到强化学习框架中,我们需要将其封装为一个环境。

import numpy as npclass BreakoutEnv:def __init__(self):self.screen_width = SCREEN_WIDTHself.screen_height = SCREEN_HEIGHTself.paddle = Paddle()self.ball = Ball()self.blocks = [Block(col * BLOCK_WIDTH, row * BLOCK_HEIGHT + 50)for row in range(5) for col in range(SCREEN_WIDTH // BLOCK_WIDTH)]self.score = 0self.done = Falsedef reset(self):self.paddle = Paddle()self.ball = Ball()self.blocks = [Block(col * BLOCK_WIDTH, row * BLOCK_HEIGHT + 50)for row in range(5) for col in range(SCREEN_WIDTH // BLOCK_WIDTH)]self.score = 0self.done = Falsereturn self._get_state()def step(self, action):if action == 0:self.paddle.move("LEFT")elif action == 1:self.paddle.move("RIGHT")self.ball.move()# 碰撞检测reward = 0for block in self.blocks:if block.alive and block.x < self.ball.x < block.x + block.width and block.y < self.ball.y < block.y + block.height:block.alive = Falseself.ball.dy = -self.ball.dyreward += 10self.score += 10if (self.paddle.x < self.ball.x < self.paddle.x + self.paddle.width) and \(self.paddle.y < self.ball.y + self.ball.radius < self.paddle.y + self.paddle.height):self.ball.dy = -self.ball.dyif self.ball.y > self.screen_height:self.done = Truereward = -100return self._get_state(), reward, self.donedef _get_state(self):# 返回当前状态(简化版)return np.array([self.ball.x, self.ball.y, self.ball.dx, self.ball.dy, self.paddle.x])def render(self):pass  # 可以调用 Pygame 渲染逻辑
2. DQN 模型与训练
import tensorflow as tf
from collections import deque
import randomclass DQNAgent:def __init__(self, state_size, action_size):self.state_size = state_sizeself.action_size = action_sizeself.memory = deque(maxlen=2000)self.gamma = 0.95  # 折扣因子self.epsilon = 1.0  # 探索率self.epsilon_min = 0.01self.epsilon_decay = 0.995self.learning_rate = 0.001self.model = self._build_model()def _build_model(self):model = tf.keras.Sequential([tf.keras.layers.Dense(24, input_dim=self.state_size, activation='relu'),tf.keras.layers.Dense(24, activation='relu'),tf.keras.layers.Dense(self.action_size, activation='linear')])model.compile(loss='mse', optimizer=tf.keras.optimizers.Adam(learning_rate=self.learning_rate))return modeldef remember(self, state, action, reward, next_state, done):self.memory.append((state, action, reward, next_state, done))def act(self, state):if np.random.rand() <= self.epsilon:return random.randrange(self.action_size)q_values = self.model.predict(state)return np.argmax(q_values[0])def replay(self, batch_size):if len(self.memory) < batch_size:returnminibatch = random.sample(self.memory, batch_size)for state, action, reward, next_state, done in minibatch:target = rewardif not done:target = reward + self.gamma * np.amax(self.model.predict(next_state)[0])target_f = self.model.predict(state)target_f[0][action] = targetself.model.fit(state, target_f, epochs=1, verbose=0)if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decay# 训练逻辑
env = BreakoutEnv()
state_size = 5  # 状态维度
action_size = 2  # 动作维度(左移、右移)
agent = DQNAgent(state_size, action_size)
batch_size = 32
episodes = 1000for e in range(episodes):state = env.reset()state = np.reshape(state, [1, state_size])total_reward = 0while True:action = agent.act(state)next_state, reward, done = env.step(action)next_state = np.reshape(next_state, [1, state_size])agent.remember(state, action, reward, next_state, done)state = next_statetotal_reward += rewardif done:print(f"Episode: {e}/{episodes}, Score: {total_reward}, Epsilon: {agent.epsilon:.2f}")breakif len(agent.memory) > batch_size:agent.replay(batch_size)

通过上述代码,我们实现了一个基于 pygame 的简化版《Breakout》游戏,并使用 DQN 算法训练了一个智能体来玩这个游戏。你可以在此基础上进一步优化模型和算法,例如引入卷积神经网络(CNN)处理图像输入,或者尝试更高级的强化学习算法(如 PPO)。

在实际开发中,环境封装和模型训练可以分开实现,也可以合并到一个文件中。选择哪种方式取决于项目的规模和复杂性。下面我将详细解释如何组织代码,并说明如何将训练好的智能体与游戏整合。


实战拓展3:环境封装和模型训练的组织方式

选项 1:合并在一个文件中

如果项目规模较小(如本例中的简化版《Breakout》),可以将环境封装和模型训练放在同一个文件中。这样做的好处是便于调试和快速迭代。

文件结构
breakout_dqn.py
内容
  • BreakoutEnv 类:负责游戏逻辑和状态管理。
  • DQNAgent 类:负责构建和训练 DQN 模型。
  • 主程序部分:包含训练逻辑。

这种方式适合初学者或小型项目,因为所有代码都在一个文件中,易于理解。


选项 2:分为多个文件

对于更大、更复杂的项目,建议将环境封装和模型训练分开,以便更好地组织代码和复用模块。

文件结构
project/
│
├── breakout_env.py       # 游戏环境封装
├── dqn_agent.py          # DQN 智能体实现
└── train.py              # 训练脚本
各文件内容
  1. breakout_env.py

    • 包含 BreakoutEnv 类,定义游戏逻辑和状态管理。
    • 提供接口(如 reset()step())供强化学习算法调用。
  2. dqn_agent.py

    • 包含 DQNAgent 类,定义 DQN 模型和训练逻辑。
    • 负责智能体的动作选择、经验回放和模型更新。
  3. train.py

    • 导入 BreakoutEnvDQNAgent
    • 定义训练主循环,包括初始化环境、训练智能体和保存模型。

这种方式更适合大型项目,便于维护和扩展。


实战拓展4: 训练完成后如何与游戏整合

训练完成后,我们需要加载训练好的模型,并将其与游戏整合,让智能体自动玩游戏。以下是具体步骤:

步骤 1:保存训练好的模型

在训练过程中,定期保存模型权重,以便后续加载。

# 在训练脚本中保存模型
agent.model.save("dqn_model.h5")

步骤 2:加载模型并运行智能体

创建一个新的脚本(例如 play.py),用于加载训练好的模型,并让智能体自动玩游戏。

示例代码
import pygame
import numpy as np
from breakout_env import BreakoutEnv
from tensorflow.keras.models import load_model# 初始化 Pygame
pygame.init()# 加载训练好的模型
model = load_model("dqn_model.h5")# 初始化游戏环境
env = BreakoutEnv()
state = env.reset()
state = np.reshape(state, [1, env.state_size])# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 使用模型预测动作q_values = model.predict(state)action = np.argmax(q_values[0])# 执行动作并获取下一状态next_state, reward, done = env.step(action)next_state = np.reshape(next_state, [1, env.state_size])state = next_state# 渲染游戏画面env.render()if done:print("Game Over!")breakclock.tick(60)pygame.quit()

实战拓展5: 如何渲染游戏画面

为了让智能体在游戏中自动玩,我们需要在 BreakoutEnv 中实现 render() 方法,使用 pygame 绘制游戏画面。

修改 BreakoutEnvrender() 方法

def render(self):screen.fill(BLACK)self.paddle.draw()self.ball.draw()for block in self.blocks:block.draw()# 显示分数font = pygame.font.SysFont(None, 36)score_text = font.render(f"Score: {self.score}", True, WHITE)screen.blit(score_text, (10, 10))pygame.display.flip()

实战小结

  • 代码组织

    • 小型项目:可以将环境封装和模型训练合并到一个文件中。
    • 大型项目:建议将环境封装、智能体实现和训练逻辑分别放在不同的文件中。
  • 训练后的整合

    • 训练完成后,保存模型权重。
    • 创建一个新的脚本,加载模型并让智能体自动玩游戏。
    • BreakoutEnv 中实现 render() 方法,绘制游戏画面。

通过以上步骤,你可以完成从环境设计、模型训练到智能体自动玩游戏的完整流程。希望这些内容对你有所帮助!如果有其他问题,欢迎随时提问!

前沿关联

AlphaGo:强化学习的经典案例

AlphaGo 是由 DeepMind 开发的围棋 AI,它结合了蒙特卡洛树搜索(MCTS)和深度强化学习。通过自我对弈,AlphaGo 不断优化策略,最终击败了世界冠军李世石。

ChatGPT:强化学习在 NLP 中的应用

ChatGPT 使用强化学习从人类反馈中学习(Reinforcement Learning from Human Feedback, RLHF)。通过奖励模型的指导,ChatGPT 能够生成更符合人类偏好的高质量文本。


总结

强化学习是一种强大的工具,能够在复杂的决策任务中发挥重要作用。从经典的 Q-Learning 到现代的 DQN 和 PPO,强化学习算法不断演进。通过本集的学习,你不仅掌握了强化学习的核心概念,还完成了一个实际的 DQN 项目。希望你能在此基础上继续探索,将强化学习应用于更多领域!

下一集预告:第8集将探讨生成对抗网络(GANs)及其在图像生成中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC 本地搭建部署 dify(含 github访问超时+Docker镜像源拉取超时解决方案)

目录 一、什么是 dify&#xff1f; 二、安装 docker 1. 什么是 docker&#xff1f; 2. docker下载地址 三、安装 dify 1. dify下载地址 2.可能遇到问题一&#xff1a; github访问超时 3.下载后完成解压 4.进入到 cmd 终端环境&#xff0c;执行下面三个命令 5.可能遇到…

USB3.0设备控制器驱动分析

一、USB驱动框架分析 USB控制器作为device的驱动框架分为&#xff1a;gadget Function驱动、gadget Function API、Composite以及UDC驱动。 gadget Function 驱动&#xff1a; 解释&#xff1a;是针对 USB 设备特定功能的驱动程序。功能&#xff1a;负责实现 USB 设备对外提供的…

《Redis 入门指南:快速掌握高性能缓存技术》

目录 一、准备工作 二、操作数据库 2.1 切换数据库 2.2 存储和查看数据 一、存储语法 二、一次性存储多个键值对 三、追加值 四、查看值的类型 五、查询值 六、一次查询多个值 七、查看当下数据库所有的键 八、删除键 九、查看 键 是否存在 十、重命名键 2.3 过期…

跨部门沟通与团队协作

【跨部门协作&#xff1a;破局之道在冰山之下】 感谢太原市组织部信任&#xff0c;上海财经大学邀约 今日为财务精英拆解《跨部门沟通与团队协作》迷局。从本位思维到共同愿景&#xff0c;用因果回路图透视冲突本质&#xff0c;当财务人开始用"延迟反馈"视角看预算博…

【JavaEE】wait 、notify和单例模式

【JavaEE】wait 、notify 和单例模式 一、引言一、wait()方法二、notify()方法三、notifyAll()方法四、wait&#xff08;&#xff09;和sleep&#xff08;&#xff09;对比五、单例模式5.1 饿汉模式5.2 懒汉模式5.2 懒汉模式-线程安全&#xff08;改进&#xff09; 博客结尾有此…

http报文的content-type参数和spring mvc传参问题

很早之前博主聊过HTTP的报文结构以及其中和传参相关的重要参数content-type还有spring mvc&#xff0c;以前的三篇文章&#xff1a; HTTP与HTTPS协议详解&#xff1a;基础与安全机制-CSDN博客 详解Http的Content-Type_content-type application-CSDN博客 如何在Spring Boot中…

‘ts-node‘ 不是内部或外部命令,也不是可运行的程序

新建一个test.ts文件 let message: string = Hello World; console.log(message);如果没有任何配置的前提下,会报错’ts-node’ 不是内部或外部命令,也不是可运行的程序。 此时需要安装一下ts-node。 npm install

《白帽子讲 Web 安全:点击劫持》

目录 摘要&#xff1a; 一、点击劫持概述 二、点击劫持的实现示例&#xff1a;诱导用户收藏指定淘宝商品 案例 构建恶意页面&#xff1a; 设置绝对定位和z - index&#xff1a; 控制透明度&#xff1a; 三、其他相关攻击技术 3.1图片覆盖攻击与 XSIO 3.2拖拽劫持与数据…

SQL Server 中行转列

在 SQL Server 数据库中&#xff0c;行转列在实践中是一种非常有用&#xff0c;可以将原本以行形式存储的数据转换为列的形式&#xff0c;以便更好地进行数据分析和报表展示。本文将深入浅出地介绍 SQL Server 中的行转列技术&#xff0c;并以数据表中的时间数据为例进行详细讲…

python第十一课:并发编程 | 多任务交响乐团

&#x1f3af; 本节目标 理解多线程/多进程/协程的应用场景掌握threading与multiprocessing核心用法学会使用asyncio进行异步编程开发实战项目&#xff1a;高并发爬虫引擎破解GIL锁的性能迷思 1️⃣ 并发编程三剑客 &#x1f3bb; 生活化比喻&#xff1a; 多线程 → 餐厅多个…

微服务架构实践:SpringCloud与Docker容器化部署

## 微服务架构实践&#xff1a;SpringCloud与Docker容器化部署 随着互联网应用的复杂性不断增加&#xff0c;传统的单体应用架构面临着诸多挑战&#xff0c;如难以部署、维护困难、开发效率低下等问题凸显出来。为了解决这些问题&#xff0c;微服务架构应运而生&#xff0c;它通…

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介 1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介 2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09; 3.1 介绍&#xf…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

Vscode通过Roo Cline接入Deepseek

文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程&#xff0c;那如何在vscode编译器中使用deepseek&#xff0c;记录下来&#xff0c;方便备查。 第一步、安装插件 在…

leetcode第17题求电话号码组合

原题出于leetcode第17题https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/题目如下&#xff1a; 题目稍微有点复杂&#xff0c;初看会感觉特别复杂&#xff0c;首先我们需要理清思路&#xff1a; 最后的结果是字母组合&#xff0c;因此遍历的是…

三十五周学习周报

目录 摘要abstract文献阅读1.1相关知识1.1.1 PSO1.1.2 BI-LSTM1.1.3 BI-GRU 1.2 整体框架1.3 实验分析 总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种创新的水文时间序列预测模型&#xff0c;其通过将粒子群优化&#xff08;PSO&#xff09;与Bi-LSTM和Bi-GRU相结合…

Git:多人协作

目录 多人协作一 准备工作 开发者1准备工作 开发者2准备工作 协作开发 将内容合并进master 多人协作二 开发者1进行工作 开发者2进行工作 特殊场景 将内容合并进master 之前所学习的Git操作&#xff0c;是为了多人协作开发做铺垫的&#xff0c;因为在公司中&#xf…

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…

计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

(十 五)趣学设计模式 之 命令模式!

目录 一、 啥是命令模式&#xff1f;二、 为什么要用命令模式&#xff1f;三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支…