使用深度 Q 学习解决Lunar lander问题
使用深度 Q 学习解决Lunar lander问题
- 0. 前言
- 1. 使用深度 Q 网络解决 Atari 游戏
- 2. 定义环境
- 3. 解决 Lunar lander 问题
- 相关链接
0. 前言
深度 Q 学习模型只需观察状态作为输入就能够解决经典 Atari
游戏,这是一个重大突破,从那时起,深度强化学习 (deep reinforcement learning
, DRL
) 已经展示出具有比人类更好地解决许多复杂任务的能力。在本节中,我们将实现经典深度 Q 网络 (deep Q-learning
, DQN
) 解决 Lunar lander
问题。
1. 使用深度 Q 网络解决 Atari 游戏
使用深度 Q 网络 (deep Q-learning
, DQN
) 解决经典 Atari
游戏需要大量迭代。即使是基本 Atari
环境,所需的训练回合数也可能达到数百万个。虽然改进的强化学习方法已经降低了训练回合数,但总体而言,度强化学习 (deep reinforcement learning
, DRL
) 是一项计算昂贵的任务。
2. 定义环境
首先,导入所需库,并定义 Gym
环境:
import gym.wrappers
import matplotlib.pyplot as plt
import os
import pickle
import numpy as np
import mediapy
import random
from collections import deque
from livelossplot import PlotLossesENVIRONMENT = "LunarLander-v2" #@param ["CartPole-v1", "Acrobot-v1", "CubeCrash-v0", "MountainCar-v0", "LunarLander-v2"]env = gym.make(ENVIRONMENT, render_mode='rgb_array')state = env.reset()[0]
plt.imshow(env.render())print("action space: {0!r}".format(env.action_space))
print("observation space: {0!r}".format(env.observation_space))ENVIRONMENT = "LunarLander-v2" #@param ["CartPole-v1", "Acrobot-v1", "MountainCar-v0", "LunarLander-v2"]
SIMULATION_RUNS = 10 #@param {type:"slider", min:1, max:10, step:1}
SIMULATION_ITERATIONS = 200 #@param {type:"slider", min:50, max:200, step:1}env = gym.make(ENVIRONMENT, render_mode='rgb_array')fitnesses = []
frames = []for run in range(SIMULATION_RUNS): state = env.reset()state = state[0]fitness = 0for i in range(SIMULATION_ITERATIONS):action = env.action_space.sample()state, reward, done, info, _ = env.step(np.argmax(action)) frames.append(env.render()) fitness += reward if done: fitnesses.append(fitness) break mediapy.show_video(frames, fps=30)
print(fitnesses)
3. 解决 Lunar lander 问题
(1) 定义 DQNAgent
类,init
函数设置了基本的超参数并保存了动作和状态空间的大小,使用 memory
存储模拟的经验以及智能体模型:
import tensorflow.keras as k
import tensorflow.keras.layers as klclass DQNAgent():def __init__(self, state_size, action_size, episodes=100):self.weight_backup = "backup_weights.h5"self.state_size = state_sizeself.action_size = action_sizeself.memory = deque(maxlen=2000)self.learning_rate = 0.001self.gamma = 0.95self.exploration_rate = 1.0self.exploration_min = 0.1self.exploration_decay = (self.exploration_rate-self.exploration_min) / episodes self.brain = self._build_model()
(2) 接下来,在 _build_model()
函数中定义智能体的深度学习模型。创建一个三层模型,将状态空间作为输入,动作空间作为输出,模型使用均方误差 (Mean squared error
, MSE
) 作为损失函数、Adam
作为优化器进行编译,同时模型能够加载先前训练过的模型权重的文件。
def _build_model(self):# Neural Net for Deep-Q learning Modelmodel = k.Sequential()model.add(kl.Dense(24, input_dim=self.state_size, activation='relu'))model.add(kl.Dense(24, activation='relu'))model.add(kl.Dense(self.action_size, activation='linear'))model.compile(loss='mse', optimizer=k.optimizers.Adam(learning_rate=self.learning_rate))if os.path.isfile(self.weight_backup):model.load_weights(self.weight_backup)self.exploration_rate = self.exploration_minreturn model
(3) act()
函数首先评估探索的机会,并根据情况返回随机动作(如果进行探索)或预测的动作(如果不进行探索)。其次,remember()
函数将智能体的经验存储为它模拟的回合,memory
,是一个双端队列类,使用固定大小,在满了之后会自动删除最早的记忆。当记忆足够多时,replay()
函数从智能体的记忆中提取一批经验。然后,这批经验用于重播智能体的动作并评估每个先前执行的动作(随机或预测)的质量,动作的质量目标是使用 Q 学习方程计算的。然后,在单个 epoch
中使用 fit()
函数更新模型。最后,在 replay()
函数结束时,通过 exploration_decay
更新探索率——exploration_rate
:
def save_model(self):self.brain.save(self.weight_backup)def mem_usage(self):return len(self.memory)/2000def act(self, state):if np.random.rand() <= self.exploration_rate:return random.randrange(self.action_size)act_values = self.brain.predict(state)return np.argmax(act_values[0])def remember(self, state, action, reward, next_state, done):self.memory.append((state, action, reward, next_state, done)) def replay(self, batch_size):if len(self.memory) < batch_size:returnsample_batch = random.sample(self.memory, batch_size)for state, action, reward, next_state, done in sample_batch:target = rewardif not done:target = reward + self.gamma * np.amax(self.brain.predict(next_state)[0])target_f = self.brain.predict(state)target_f[0][action] = targetself.brain.fit(state, target_f, epochs=1, verbose=0)if self.exploration_rate > self.exploration_min:self.exploration_rate -= self.exploration_decay
(4) 模型训练代码首先设置 BATCH_SIZE 和 EPISODES
这两个主要超参数。然后,开始循环遍历每个回合的数量,并在每个回合中模拟智能体,直到 env.step
输出 done
值等于 True
。如果智能体尚未完成,将状态输入到 agent.act
函数中以输出动作预测,然后将其应用于 env.step
函数以输出下一个状态、奖励和完成标志。接下来,调用 agent.remember
将动作和结果添加到 memory
中。在每个回合结束时,当 done == True
时,调用 agent.remember
,重播所有动作,并使用结果来训练模型:
BATCH_SIZE = 256 #@param {type:"slider", min:32, max:256, step:2}
EPISODES = 1000 #@param {type:"slider", min:10, max:1000, step:1}
import tqdmstate_size = env.observation_space.shape[0]
action_size = env.action_space.n
agent = DQNAgent(state_size, action_size, episodes=EPISODES)groups = { "reward" : {"total", "max", "avg"}, "agent" : {"explore_rate", "mem_usage"}}
plotlosses = PlotLosses(groups=groups)
total_rewards = 0
for ep in tqdm.tqdm(range(EPISODES)):rewards = []state = env.reset()state = state[0]state = np.reshape(state, [1, state_size])done = Falseindex = 0while not done: action = agent.act(state)next_state, reward, done, info, _ = env.step(action)rewards.append(reward)next_state = np.reshape(next_state, [1, state_size])agent.remember(state, action, reward, next_state, done)state = next_state agent.replay(BATCH_SIZE) total_rewards += sum(rewards)plotlosses.update({'total': sum(rewards),'max': max(rewards),"avg" : total_rewards/(ep+1),"explore_rate" : agent.exploration_rate,"mem_usage" : agent.mem_usage(),})plotlosses.send()
(5) 在 Lunar lander
环境上训练 DQN
智能体 1000
个回合,可以看到智能体逐渐积累奖励,掌握环境:
fitness = 0
frames = []state = env.reset()
state = state[0]
done = False
while not done: state = np.reshape(state, [1, state_size])action = agent.act(state)next_state, reward, done, info, _ = env.step(action) state = next_statefitness += rewardframes.append(env.render())
env.close()print(fitness)
mediapy.show_video(frames, fps=30)
DQN
和 DRL
是人工智能和机器学习的重大进展,展示了数字智能可能比人类更好地解决某些任务的潜力。
相关链接
进化深度学习 (Evolutionary Deep Learning, EDL)
Python 实现生命游戏及进化模拟完整指南
从进化论到代码实现:构建可进化的生命模拟系统
遗传算法 (Genetic Algorithm) 详解与实现
遗传算法核心算子全解析:原理比较与性能评估
Python DEAP 库深度解析:从基础架构到高级应用
使用 DEAP 库实现遗传算法解决 OneMax 问题
使用 DEAP 库实现遗传算法解决 N 皇后问题
使用 DEAP 库实现遗传算法解决旅行商问题
遗传算法重建图像:基于 DEAP 的 EvoLisa 项目复现
基于 DEAP 的遗传编程实战:多变量回归问题求解
基于 DEAP 的粒子群优化实战:复杂方程求解
基于 DEAP 的协同进化实战:波士顿房价预测
基于 DEAP 的进化策略实战:多项式函数逼近
基于 DEAP 的差分进化实战:多项式函数逼近
深度学习中的超参数优化与模型调整策略
神经网络超参数优化:随机搜索完整实现指南
神经网络超参数优化:网格搜索完整实现指南
粒子群优化在自动超参数优化中的应用实现指南
进化策略在自动超参数优化中的应用实现指南
差分搜索在自动超参数优化中的应用实现指南
使用 NumPy 从零实现神经网络:构建与训练多层感知器
神经进化实践:用遗传算法替代反向传播优化神经网络
神经进化实践:使用遗传算法优化 Keras 神经网络
卷积神经网络 (CNN) 原理详解与 Keras 实践
进化卷积神经网络 (EvoCNN) 架构设计:基因编码与 Keras 实现
进化卷积神经网络 (Evolutionary Convolutional Neural Network, EvoCNN) 实战
卷积自编码器 (Convolutional AutoEncoder) 详解与实现
卷积自编码器架构设计:基因编码与 Keras 实现
进化自编码器 (Evolutionary AutoEncoder, EvoAE) 实战
变分自编码器 (Variational AutoEncoder, VAE) 详解与实现
生成对抗网络 (Generative Adversarial Networks, GAN) 详解与实现
WGAN (Wasserstein Generative Adversarial Networks) 详解与实现
WGAN 架构设计:基因编码与 Keras 实现
进化生成对抗网络 (Evolutionary Generative Adversarial Networks, EvoGAN) 实战
NEAT 算法解析:从增强拓扑原理到异或问题实战
NEAT 算法实战:基于进化神经网络的分类问题求解
使用 NEAT 算法实现端到端 MNIST 手写数字识别
NEAT 算法中的物种分化机制与优化实践
深度解析强化学习:原理、算法与实战
使用 NEAT 进化智能体解决 Gymnasium 强化学习环境
NEAT 算法解决 Lunar Lander 问题:从理论到实践
相关文章:
使用深度 Q 学习解决Lunar lander问题
使用深度 Q 学习解决Lunar lander问题 0. 前言1. 使用深度 Q 网络解决 Atari 游戏2. 定义环境3. 解决 Lunar lander 问题相关链接 0. 前言 深度 Q 学习模型只需观察状态作为输入就能够解决经典 Atari 游戏,这是一个重大突破,从那时起,深度强…...
centos7使用yum快速安装最新版本Jenkins-2.462.3
Jenkins支持多种安装方式:yum安装、war包安装、Docker安装等。 官方下载地址:https://www.jenkins.io/zh/download 本次实验使用yum方式安装Jenkins LTS长期支持版,版本为 2.462.3。 一、Jenkins基础环境的安装与配置 1.1:基本…...
Bean的生命周期
1.实例化Bean(通过BeanDefinition反射调用无参构造创建对象,如果没有无参构造,需要指定唯一构造方法) 2.给Bean的属性set()赋值 3.检查Bean是否实现了Aware相关接口,实现的话则执行方法 Aware接口:空接口&…...
【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比
伪从技术 vs 直接同步/MQ方案的深度对比 直接同步修改或通过MQ消息队列也能实现类似同步功能,但伪从技术(通过消费binlog实现数据同步)在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析: 一、核心差异对比表 方案…...
【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?
前端文件上传与下载攻略 本文目标:帮你快速掌握文件上传 & 下载的核心实现方式,并在常见出错场景下保持“优雅不崩溃”。 一、文件上传 1. 基础结构 <input type"file" id"fileInput" /> <button id"uploadBtn&…...
【axios取消请求】如何在token过期后取消未响应的请求
功能背景: 我们在实际项目中通常会遇到登录过期后会跳登录页的情况,回跳过程会根据接口请求的状态码判断是否登陆状态过期,并给出用户提示,如果此时存在多个请求接口同时调用,就会同时报出多个登录过期的提示…...
【高频考点精讲】JavaScript中的组合模式:从树形结构到组件嵌套实战
📚 目录 📦 什么是组合模式?🌲 基础版:用组合模式构建一个简单的树形结构💡 举个更真实的场景:菜单组件🧠 为什么组合模式在前端特别重要?🔨 实战案例:组件嵌套组合 + 权限控制🧩 组合模式的延伸用法:搭建 UI DSL 引擎🧪 面试题时间(欢迎评论区作答)组…...
《仙剑奇侠传二》游戏秘籍
无限冥纸:在丰都城,点击特定的小猫,它会给你五张冥纸,再次点击还会再给五张,可循环获取。无限使用虎煞技能:学会 “虎啸风声” 技能后,将虎煞之力值设置为 16,在战斗中持续使用该技能…...
AWS 中国区 CloudFront SSL 证书到期更换实战指南
适用场景: AWS 中国区(宁夏区域 cn-northwest-1 或北京区域 cn-north-1)CloudFront 分配的 SSL 证书到期后无缝替换,域名主体为 domain.cn。 背景与痛点 当 CloudFront 使用的 SSL 证书即将到期时,需手动替换新证书以避免服务中断。由于 AWS 中国区 不支持 ACM 证书,必须…...
【2025A卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)
目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第3期第1天、逻辑分析第2天、逻辑分析第3天、双指针第4天、双指针第5天、数据结构map第6天、栈第7天、二叉树第8天、贪心算法第9天、二分查找 六、集训总结国内直接使用最新o3、o4-mini…...
MacOS上如何运行内网穿透详细教程
本文以市面常见、好用的内网穿透为例,一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp(开源工作、使用自由) 1. 下载 FRP 访问 FRP 的 GitHub 发布页: https://github.com/fatedier/frp/releases 选择适合 …...
第55讲:农业人工智能的跨学科融合与社会影响——构建更加可持续、包容的农业社会
目录 一、农业人工智能的多维融合:科技与社会的桥梁 1. 技术与社会:解决现代农业中的不平等 2. AI与伦理:塑造道德规范与社会责任 3. AI与政策:推动农业政策的科学决策与智能执行 二、AI与农业未来社会的构建:更绿色、更智能、更包容 1. 推动农业可持续发展:绿色农…...
JVM性能优化之老年代参数设置
一、引言 咱们书接上回,上篇文章主要讲解了年轻代参数设置,如果对这一部分还不清楚的建议先去看一下(年轻代参数设置),本文主要为大家介绍老年代参数的设置,掌握好jvm参数的设置是一个高级开发人人员必备的…...
在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer
1. 为什么需要 ICU 分析插件 Elasticsearch 默认的 standard tokenizer 遵循 UAX #29 规则,但在 CJK(中、日、韩)等亚洲语言上仅能按字符切分,无法识别词边界;对包含重音符号、大小写或多脚本混排的文本也缺乏统一归一…...
JMeter 安装及使用 [软件测试工具]
目录 JMeter 1. JMeter 安装 1.1 点击官网下载: JMeter官网下载 1.2 下载后解压即可 1.3 打开 JMeter 1.3.1 方式一: 点击对应程序打开 1.3.2 方式二: 命令行启动 1.4 关闭 JMeter 2. JMeter 基础配置 2.1 修改字体为简体中文 2.2 添加拓展插件 2.2.1 下载其他监听器…...
Unity 资源合理性检测
一:表格过度配置,表格资源是否在工程中存在,并输出不存在的资源 import pandas as pd import glob import osassets [] count 0# 遍历configs文件夹下所有xlsx文件 for file_path in glob.glob(configs/*.xlsx):count 1try:sheets pd.re…...
vue-study(1)
黑马智数项目 黑马智数是一个数字化园区管理项目,该项目后台可以在线管理园区内的楼宇、企业、车辆和一体杆等资源,可视化大屏通过园区3D模型实时展示园区概况。通过该项目能学到如何用qiankun搭建微前端架构、用Echarts进行数据可视化、以及前沿的3D模…...
XS5032:高性能3DNR+HDR ISP-TX 2K芯片
爱芯元智 XS5032:高性能3DNRHDR ISP-TX 2K芯片 视频输入 支持MIPI接口,4lane,Max.1.5Gbps/lane 支持Sensor并口(DVP) 视频分辨率 支持多种同轴高清制式和标清制式,包括: 960H25/30fps&…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
TDengine 流计算引擎设计
流计算架构 TDengine 流计算的架构如下图所示。当用户输入用于创建流的 SQL 后,首先,该 SQL 将在客户端进行解析,并生成流计算执行所需的逻辑执行计划及其相关属性信息。其次,客户端将这些信息发送至 mnode。mnode 利用来自数据源…...
扩展中国剩余定理
中国剩余定理 中国剩余定理 考虑一组模线性同余方程: { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) \begin{cases} x\equiv a_1\pmod{m1} \\ x\equiv a_2\pmod{m2}\\ .\\ .\\ .\\ x\equiv a_k\pmod{mk}\\ \end{cases} ⎩ ⎨ ⎧…...
git检查提交分支和package.json的version版本是否一致
这里写自定义目录标题 一、核心实现步骤1.安装必要依赖2.初始化 Husky3.创建校验脚本4.配置 lint-staged5.更新 Husky 钩子 三、工作流程说明四、注意事项 以下是基于 Git Hooks 的完整解决方案,通过 husky 和自定义脚本实现分支名与版本号一致性校…...
Git 详细使用说明文档(适合小白)
Git 详细使用说明文档(适合小白) 1. 什么是 Git? Git 是一个版本控制系统,帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作,Git 都能帮助你记录代码的历史版本,方便回溯和协作。 2. 安装 Git …...
【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(2)
文章目录 3.嵌入式系统的存储体系3.1 存储系统的层次结构3.2 内存管理单元(MMU)3.3 RAM和ROM的种类3.3.1 RAM类型对比3.3.2 ROM类型对比 3.4 高速缓存(Cache)3.5 其他存储设备3.5.1 新型存储技术3.5.2 外存接口技术 3.嵌入式系统的…...
rk3588 驱动开发(三)第五章 新字符设备驱动实验
register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用 Linux 内核推荐的新字符设备驱动 API 函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载…...
文件上传--WAF绕过干货
本文主要内容 绕过WAF上传文件 -- 安全狗 -- 宝塔 Burp抓包解析 #上传参数名解析:明确哪些东西能修改? Content-Disposition:—般可更改 name:表单参数值,不能更改 filename:文件名ÿ…...
BERT BERT
BERT ***** 2020年3月11日更新:更小的BERT模型 ***** 这是在《深阅读的学生学得更好:预训练紧凑模型的重要性》(arXiv:1908.08962)中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明,标准的BERT架构和…...
Kotlin Multiplatform--02:项目结构进阶
Kotlin Multiplatform--02:项目结构进阶 引言正文 引言 在上一章中,我们对 Kotlin Multiplatform 项目有了基本的了解,已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…...
【ES实战】Elasticsearch中模糊匹配类的查询
Elasticsearch中模糊匹配类的查询 文章目录 Elasticsearch中模糊匹配类的查询通配符查询前缀匹配查询正则匹配查询标准的正则操作特殊运算符操作 模糊化查询Fuzziness text类型同时配置keyword类型 Elasticsearch中模糊类查询主要有以下 Wildcard Query:通配符查询P…...
纯真社区IP库离线版发布更新
纯真社区IP库离线版发布更新 发布者:技术分享 2005年,随着中国互联网的蓬勃发展,纯真IP库诞生了。作为全球网络空间地理测绘技术的领先者,纯真开源项目为中国互联网行业提供了高质量的网络空间IP库数据。纯真IP库目前已经覆盖超…...
直接偏好优化(Direct Preference Optimization,DPO):论文与源码解析
简介 虽然大规模无监督语言模型(LMs)学习了广泛的世界知识和一些推理技能,但由于它们是基于完全无监督训练,仍很难控制其行为。 微调无监督LM使其对齐偏好,尽管大规模无监督的语言模型(LMs)能…...
uniapp-商城-34-shop 购物车 选好了 进行订单确认
在shop页面选中商品添加到购物车,可选好后,进行确认和支付。具体呈现在shop页面。 1 购物车栏 shop页面代码: 购物车代码: 代码: <template><view><view class"carlayout"><!-- 车里…...
Kafka命令行的使用/Spark-Streaming核心编程(二)
Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量,副本数量,都是必须的。 数据的形式: 主题名称-分区编号。 在…...
虚拟机详解
虚拟机详解 1. 虚拟机(Virtual Machine)的定义 系统虚拟机:通过软件模拟完整计算机系统(CPU、内存、外设等),如 VMware、VirtualBox。进程级虚拟机:为单个应用提供虚拟执行环境,如 …...
NOIP2013 提高组.转圈游戏
目录 题目算法标签: 数论, 模运算思路代码 题目 504. 转圈游戏 算法标签: 数论, 模运算 思路 看题意不难看出, 计算的是 ( x 1 0 k m ) m o d n (x 10 ^ k \times m) \mod n (x10km)modn, 如果直接计算一定会超时, 因此可以使用快速幂进行优化 代码 #include <iost…...
【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
目录 一、引言 二、金仓数据库(KingbaseES)概述 1. 发展历程与市场地位 2. 核心技术架构 3. 金仓数据库的特点 三、金仓数据库在金融行业的应用 1. 金融行业的挑战与需求 2. 金仓数据库在金融行业的优势 3. 金仓数据库在金融行业的实际应用案例 …...
济南国网数字化培训班学习笔记-第二组-5节-输电线路设计
输电线路设计 工程设计阶段划分 35kv及以上输变电工程勘测设计全过程 可行性研究(包括规划、工程选站)(包括电力系统一次二次,站址选择及工程设想,线路工程选择及工程设想,节能降耗分析,环境…...
【前端】【业务场景】【面试】在前端开发中,如何实现一个可拖动和可缩放的元素,并且处理好边界限制和性能优化?
问题:在前端开发中,如何实现一个可拖动和可缩放的元素,并且处理好边界限制和性能优化? 一、实现可拖动和可缩放元素 HTML 和 CSS 基础设置: 创建一个 HTML 元素,并为其设置基本样式,使其在页面…...
BOM与DOM(解疑document window关系)
BOM(浏览器对象模型) 定义与作用 BOM(Browser Object Model)提供与浏览器窗口交互的接口,用于控制导航、窗口尺寸、历史记录等浏览器行为 window:浏览器窗口的顶层对象,包含全局属性和方法&am…...
504 nginx解决方案
当遇到 504 Gateway Time-out 错误时,通常是因为 Nginx 作为反向代理等待后端服务(如 PHP-FPM、Java 应用等)响应的时间超过了预设的超时阈值。以下是详细的解决方案,结合知识库中的信息整理而成: 一、核心原因分析 后…...
【LLM+Code】Windsurf Agent 模式PromptTools详细解读
一、前言 https://windsurf.com/ https://windsurf.com/blog/why-we-built-windsurf https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/tree/main/Windsurf 二、System Prompt 相比于cursor和claude code, windsurf的system prompt非常长&am…...
第三章:Transport Mechanisms
Chapter 3: Transport Mechanisms 🌟 从上一章到本章 在第二章:MCP服务器分类中,我们学会了如何根据需求选择不同类别的服务器(如文件系统、数据库等)。现在想象这样一个场景:你有一个本地文件服务器和一个…...
shell练习题(1)
练习: 1.建立脚本service.sh,当执行的时候要求输入(1、2、3、4、5)时安装对应的httpd、vim、wget、更换aliyum等功能,当输入错误 时会提示你,应该输入正确的值 [rootbogon yy]# cat service.sh #!/bin/bash cat <<-EOF ----------------------…...
【解决】Android Gradle Sync 报错 Could not read workspace metadata
异常信息 Caused by: java.io.UncheckedIOException:Could not read workspace metadata from C:\Users\xxx\.gradle\caches\transforms-4\69955912123c68eecd096b71c66ee211\metadata.bin 异常原因 看字面意思是不能读取metadata文件,原因可能是因为缓存目录异常…...
Python中的 for 与 迭代器
文章目录 一、for 循环的底层机制示例:手动模拟 for 循环 二、可迭代对象 vs 迭代器关键区别: 三、for 循环的典型应用场景1. 遍历序列类型2. 遍历字典3. 结合 range() 生成数字序列4. 遍历文件内容 四、迭代器的自定义实现示例:生成斐波那契…...
上篇:深入剖析 BLE 底层物理层与链路层(约5000字)
引言 在无线通信领域,Bluetooth Low Energy(BLE)以其超低功耗、灵活的连接模式和良好的生态支持,成为 IoT 与可穿戴设备的首选技术。要想在实际项目中优化性能、控制功耗、保证可靠通信,必须对 BLE 协议栈的底层细节有深入了解。本篇将重点围绕物理层(PHY)与链路层(Li…...
ArcGIS Pro跨图层复制粘贴
在map视图中,点击selection中的Select按钮,保持选择状态。 点击需要复制的要素,保持选中状态。右击点击copy,或CtrlC进行复制。 在Clipboard下拉框中点击Paste Special,选择需要粘贴的图层后点击OK。...
今日CSS学习浮动->定位
------------------------------------------------------------------------------------------------------- CSS的浮动 float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。 float 属性定义元素在哪个方向浮…...
性行为同意协议系统网站源码
性行为同意协议系统网站源码 一个用于创建、签署和管理性行为同意协议的 Web 应用程序。该应用允许用户在线创建详细的性行为同意协议,并通过数字签名方式进行签署,同时支持导出为 PDF 格式保存。 功能特性 创建自定义性同意协议 多步骤表单引导用户完…...
项目自动化测试
一.设计测试用例(细致全面) 二.先引入所需要的pom.xml依赖 1.selenium依赖 2.webdrivermanager依赖 3.commons-io依赖 编写测试用例–按照页面对用例进行划分,每个页面是Java文件,页面下的所有用例统一管理 三.common包(放入公用包) 类1utils 可以调用driver对象,访问url …...