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

AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

1. 人工智能生成模型:解密 GPT 的工作原理

目录
  1. 引言
    1.1 背景介绍
    1.2 人工智能生成模型的兴起
    1.3 GPT 系列模型的地位与影响

  2. GPT 模型概述
    2.1 什么是 GPT
    2.2 GPT 的发展历程
    2.3 GPT 与其他生成模型的对比

  3. GPT 的核心原理
    3.1 转换器架构(Transformer Architecture)
    3.1.1 自注意力机制(Self-Attention)
    3.1.2 多头注意力(Multi-Head Attention)
    3.1.3 前馈神经网络(Feed-Forward Neural Networks)
    3.2 训练过程
    3.2.1 预训练与微调
    3.2.2 损失函数与优化算法
    3.3 生成文本的机制
    3.3.1 语言建模
    3.3.2 采样策略

  4. GPT 在各领域的应用
    4.1 自然语言处理
    4.1.1 机器翻译
    4.1.2 文本生成
    4.2 代码生成与理解
    4.3 科学研究与创新
    4.3.1 药物发现
    4.3.2 化学结构生成

  5. 生成 SMILES 的原理与实现
    5.1 SMILES 简介
    5.1.1 SMILES 的定义
    5.1.2 SMILES 的应用
    5.2 使用 GPT 生成 SMILES
    5.2.1 数据准备
    5.2.2 模型训练
    5.2.3 生成与验证
    5.3 Python 实现示例
    5.3.1 环境配置
    5.3.2 代码示例
    5.3.3 结果分析
    5.4 挑战与未来展望

  6. GPT 模型的优势与局限
    6.1 优势
    6.1.1 强大的语言理解与生成能力
    6.1.2 广泛的应用场景
    6.2 局限
    6.2.1 计算资源需求
    6.2.2 数据偏见与伦理问题

  7. 未来发展趋势
    7.1 模型规模与效率优化
    7.2 多模态生成模型
    7.3 可解释性与透明性
    7.4 跨领域协作与应用拓展

  8. 结论
    8.1 主要发现
    8.2 对未来的展望


5.3 Python 实现示例:生成 SMILES

以下是一个使用 Python 生成 SMILES 的示例代码。该示例使用了 transformers 库中的预训练 GPT-2 模型,并进行了简单的微调以生成 SMILES 字符串。

5.3.1 环境配置

首先,确保安装必要的库:

pip install transformers torch pandas scikit-learn
5.3.2 代码示例
import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
import pandas as pd# 1. 数据准备
# 假设我们有一个包含 SMILES 的 CSV 文件
data = pd.read_csv('smiles_dataset.csv')  # CSV 文件需包含 'smiles' 列
smiles_list = data['smiles'].tolist()# 2. 模型与分词器加载
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')# 添加特殊字符(如果 SMILES 包含 GPT-2 未见过的字符)
special_tokens = {'additional_special_tokens': ['[CH]', '[OH]', '[NH]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens)
model.resize_token_embeddings(len(tokenizer))# 3. 数据编码
def encode_smiles(smiles):return tokenizer.encode(smiles, add_special_tokens=True)encoded_smiles = [encode_smiles(smiles) for smiles in smiles_list]# 4. 创建训练数据集
from torch.utils.data import Datasetclass SMILESDataset(Dataset):def __init__(self, encoded_smiles):self.input_ids = encoded_smilesdef __len__(self):return len(self.input_ids)def __getitem__(self, idx):return torch.tensor(self.input_ids[idx])dataset = SMILESDataset(encoded_smiles)# 5. 训练参数设定
training_args = TrainingArguments(output_dir='./results',num_train_epochs=3,per_device_train_batch_size=8,save_steps=500,save_total_limit=2,logging_steps=100,prediction_loss_only=True,
)# 6. 训练器初始化
trainer = Trainer(model=model,args=training_args,train_dataset=dataset,
)# 7. 模型训练
trainer.train()# 8. 保存模型
model.save_pretrained('gpt2-smiles')
tokenizer.save_pretrained('gpt2-smiles')# 9. 生成 SMILES 示例
def generate_smiles(prompt, max_length=50):inputs = tokenizer.encode(prompt, return_tensors='pt')outputs = model.generate(inputs, max_length=max_length, num_return_sequences=1, no_repeat_ngram_size=2, early_stopping=True)generated = tokenizer.decode(outputs[0], skip_special_tokens=True)return generated# 示例生成
prompt = "CCO"  # 乙醇的 SMILES
generated_smiles = generate_smiles(prompt)
print(f"Generated SMILES: {generated_smiles}")
5.3.3 结果分析

上述代码展示了如何使用预训练的 GPT-2 模型进行简单的微调,以生成化学分子的 SMILES 表示。具体步骤包括:

  1. 数据准备:加载包含 SMILES 字符串的数据集。
  2. 模型与分词器加载:使用 GPT-2 作为基础模型,并根据需要添加特殊字符。
  3. 数据编码:将 SMILES 字符串编码为模型可理解的输入格式。
  4. 创建训练数据集:定义 PyTorch 数据集以供训练器使用。
  5. 训练参数设定:配置训练参数,如训练轮数、批次大小等。
  6. 训练器初始化与训练:使用 Trainer 进行模型微调。
  7. 生成 SMILES:输入一个前缀,生成新的 SMILES 字符串。

注意事项

  • 数据质量:生成质量高度依赖于训练数据的质量和多样性。
  • 模型复杂度:GPT-2 模型可能需要更大的模型规模和更多的训练数据以生成高质量的 SMILES。
  • 后处理验证:生成的 SMILES 可能需要通过化学验证工具(如 RDKit)进行合法性检查。
5.3.4 完整示例的扩展

为了进一步提高生成 SMILES 的质量,可以考虑以下扩展:

  • 使用专门针对化学数据训练的模型:如 ChemBERTa 或其他化学领域的预训练模型。
  • 引入化学知识:在训练过程中加入化学规则或约束,以提升生成的合法性。
  • 优化生成策略:采用束搜索(Beam Search)、温度采样(Temperature Sampling)等策略优化生成结果。

2. 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

目录
  1. 引言
    1.1 背景与动机
    1.2 人工智能在药物设计中的应用
    1.3 生成式模型在药物发现中的重要性
    1.4 本文结构

  2. 生成式人工智能模型概述
    2.1 生成式模型的定义与分类
    2.2 常见生成式模型介绍
    2.2.1 生成对抗网络(GAN)
    2.2.2 变分自编码器(VAE)
    2.2.3 自回归模型(如 GPT)
    2.3 生成式模型在化学中的应用案例

  3. SMILES 简介与重要性
    3.1 SMILES 的定义
    3.2 SMILES 的结构与表示
    3.3 SMILES 在药物设计中的应用
    3.4 SMILES 的优势与局限

  4. 基于 GPT 的 SMILES 生成原理
    4.1 GPT 模型概述
    4.1.1 Transformer 架构
    4.1.2 自注意力机制
    4.2 GPT 在序列生成中的优势
    4.3 GPT 模型适应化学结构的策略
    4.3.1 特殊字符与标记
    4.3.2 数据预处理与编码

  5. 人工智能生成式药物设计的步骤
    5.1 数据收集与准备
    5.1.1 数据源与获取
    5.1.2 数据清洗与预处理
    5.2 模型选择与架构设计
    5.2.1 模型选择依据
    5.2.2 模型架构调整
    5.3 模型训练与优化
    5.3.1 训练参数设定
    5.3.2 超参数调优
    5.4 生成 SMILES 与后处理
    5.4.1 SMILES 生成策略
    5.4.2 生成结果的验证与筛选
    5.5 生成分子的评估与优化
    5.5.1 化学有效性评估
    5.5.2 药物相似性与多样性
    5.5.3 结构优化与修饰

  6. Python 实现示例:基于 GPT 的 SMILES 生成
    6.1 环境配置
    6.1.1 必要库的安装
    6.1.2 硬件与软件要求
    6.2 数据准备
    6.2.1 数据集格式
    6.2.2 数据加载与预处理
    6.3 模型加载与微调
    6.3.1 预训练模型选择
    6.3.2 模型微调步骤
    6.4 SMILES 生成与验证
    6.4.1 生成策略实现
    6.4.2 使用 RDKit 进行合法性检查
    6.5 完整代码示例
    6.5.1 代码结构概述
    6.5.2 关键代码解析
    6.5.3 运行与结果展示

  7. 案例研究:基于 GPT 的药物设计应用
    7.1 案例背景
    7.2 数据集选择与处理
    7.3 模型训练与生成
    7.4 生成分子的分析与评估
    7.5 成果与讨论

  8. 挑战与未来展望
    8.1 当前面临的主要挑战
    8.1.1 数据质量与多样性
    8.1.2 模型的可解释性
    8.1.3 生成分子的化学有效性
    8.2 未来发展方向
    8.2.1 多模态生成模型
    8.2.2 联合优化与强化学习
    8.2.3 跨领域协作与集成

  9. 结论
    9.1 主要成果总结
    9.2 对药物设计的影响
    9.3 未来工作的建议


第6章 Python 实现示例:基于 GPT 的 SMILES 生成

以下内容将详细介绍如何使用 Python 及相关库,基于 GPT 模型生成新的 SMILES 字符串。此示例涵盖数据准备、模型微调、生成与验证的全过程。

6.1 环境配置
6.1.1 必要库的安装

首先,确保安装以下必要的 Python 库:

pip install transformers torch pandas scikit-learn rdkit-pypi
  • transformers:Hugging Face 提供的预训练模型库。
  • torch:PyTorch 深度学习框架。
  • pandas:数据处理与分析。
  • scikit-learn:机器学习工具库。
  • rdkit-pypi:用于化学信息学的 RDKit 库。
6.1.2 硬件与软件要求
  • 硬件:建议使用具备 CUDA 支持的 NVIDIA GPU 以加速训练过程。
  • 软件:Python 3.7 及以上版本,推荐使用虚拟环境(如 conda 或 virtualenv)以管理依赖。
6.2 数据准备
6.2.1 数据集格式

假设您拥有一个包含 SMILES 字符串的数据集,存储在 CSV 文件中,文件格式如下:

smiles
CCO
CCN
CCC
...
6.2.2 数据加载与预处理
import pandas as pd
from transformers import GPT2Tokenizer# 加载数据集
data = pd.read_csv('your_smiles_dataset.csv')  # 替换为您的文件路径
smiles_list = data['smiles'].tolist()# 初始化 GPT-2 分词器
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')# 添加特殊字符(如果需要)
special_tokens = {'additional_special_tokens': ['[CH]', '[OH]', '[NH]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens)# 加载预训练模型时需要调整词表大小
from transformers import GPT2LMHeadModel
model = GPT2LMHeadModel.from_pretrained('gpt2')
model.resize_token_embeddings(len(tokenizer))

说明

  • 根据 SMILES 的特性,可能需要添加一些特殊字符以更好地表示化学结构。
  • 调整模型的词表以包含新添加的特殊字符。
6.2.3 数据编码

将 SMILES 字符串编码为模型可接受的输入格式。

def encode_smiles(smiles):return tokenizer.encode(smiles, add_special_tokens=True)encoded_smiles = [encode_smiles(smiles) for smiles in smiles_list]
6.3 模型加载与微调
6.3.1 预训练模型选择

本示例使用 GPT-2 作为基础模型。您也可以选择其他自回归模型,如 GPT-Neo 或 GPT-J。

6.3.2 模型微调步骤

使用 Hugging Face 的 Trainer API 进行模型微调。

import torch
from torch.utils.data import Dataset
from transformers import Trainer, TrainingArguments# 定义 PyTorch 数据集
class SMILESDataset(Dataset):def __init__(self, encoded_smiles):self.input_ids = encoded_smilesdef __len__(self):return len(self.input_ids)def __getitem__(self, idx):return torch.tensor(self.input_ids[idx])# 创建数据集对象
dataset = SMILESDataset(encoded_smiles)# 定义训练参数
training_args = TrainingArguments(output_dir='./gpt2-smiles',overwrite_output_dir=True,num_train_epochs=5,per_device_train_batch_size=16,save_steps=500,save_total_limit=2,logging_steps=100,prediction_loss_only=True,
)# 初始化 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=dataset,
)# 开始训练
trainer.train()# 保存微调后的模型
model.save_pretrained('gpt2-smiles')
tokenizer.save_pretrained('gpt2-smiles')

说明

  • num_train_epochs:训练轮数,可根据数据集大小和模型表现调整。
  • per_device_train_batch_size:根据 GPU 显存调整批次大小。
  • save_stepslogging_steps:控制模型保存和日志记录的频率。
6.4 SMILES 生成与验证
6.4.1 生成策略实现

定义生成 SMILES 的函数,利用微调后的模型生成新的 SMILES 字符串。

def generate_smiles(prompt, max_length=50, num_return_sequences=10, temperature=1.0):input_ids = tokenizer.encode(prompt, return_tensors='pt')output_sequences = model.generate(input_ids=input_ids,max_length=max_length,temperature=temperature,top_k=50,top_p=0.95,num_return_sequences=num_return_sequences,do_sample=True,repetition_penalty=1.2,eos_token_id=tokenizer.eos_token_id)generated_smiles = []for generated_sequence in output_sequences:text = tokenizer.decode(generated_sequence, skip_special_tokens=True)generated_smiles.append(text)return generated_smiles

参数说明

  • prompt:生成 SMILES 的起始字符串。
  • max_length:生成序列的最大长度。
  • num_return_sequences:生成的不同序列数量。
  • temperature:控制生成文本的随机性,值越高,生成越随机。
  • top_ktop_p:控制采样策略,防止生成重复或无意义的序列。
  • repetition_penalty:惩罚重复生成的概率。
6.4.2 使用 RDKit 进行合法性检查

生成的 SMILES 可能包含无效的化学结构,使用 RDKit 进行验证。

from rdkit import Chemdef validate_smiles(smiles):mol = Chem.MolFromSmiles(smiles)return mol is not None# 示例生成与验证
prompt = "CCO"  # 乙醇的 SMILES
generated_smiles = generate_smiles(prompt)valid_smiles = [smiles for smiles in generated_smiles if validate_smiles(smiles)]
print("生成的有效 SMILES:")
for smi in valid_smiles:print(smi)

说明

  • Chem.MolFromSmiles:尝试将 SMILES 转换为分子对象,失败则表示 SMILES 无效。
  • 过滤出有效的 SMILES 以供后续分析或使用。
6.5 完整代码示例

以下是整合上述步骤的完整代码示例:

import pandas as pd
import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
from torch.utils.data import Dataset
from rdkit import Chem# 1. 数据准备
class SMILESDataset(Dataset):def __init__(self, encoded_smiles):self.input_ids = encoded_smilesdef __len__(self):return len(self.input_ids)def __getitem__(self, idx):return torch.tensor(self.input_ids[idx])def encode_smiles(smiles, tokenizer):return tokenizer.encode(smiles, add_special_tokens=True)# 2. 加载数据集
data = pd.read_csv('your_smiles_dataset.csv')  # 替换为您的文件路径
smiles_list = data['smiles'].tolist()
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')# 添加特殊字符(如果需要)
special_tokens = {'additional_special_tokens': ['[CH]', '[OH]', '[NH]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens)# 加载并调整模型
model = GPT2LMHeadModel.from_pretrained('gpt2')
model.resize_token_embeddings(len(tokenizer))# 编码 SMILES
encoded_smiles = [encode_smiles(smiles, tokenizer) for smiles in smiles_list]
dataset = SMILESDataset(encoded_smiles)# 3. 训练参数设定
training_args = TrainingArguments(output_dir='./gpt2-smiles',overwrite_output_dir=True,num_train_epochs=5,per_device_train_batch_size=16,save_steps=500,save_total_limit=2,logging_steps=100,prediction_loss_only=True,
)# 4. 初始化 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=dataset,
)# 5. 模型训练
trainer.train()# 6. 保存模型
model.save_pretrained('gpt2-smiles')
tokenizer.save_pretrained('gpt2-smiles')# 7. 定义生成函数
def generate_smiles(prompt, max_length=50, num_return_sequences=10, temperature=1.0):input_ids = tokenizer.encode(prompt, return_tensors='pt')output_sequences = model.generate(input_ids=input_ids,max_length=max_length,temperature=temperature,top_k=50,top_p=0.95,num_return_sequences=num_return_sequences,do_sample=True,repetition_penalty=1.2,eos_token_id=tokenizer.eos_token_id)generated_smiles = []for generated_sequence in output_sequences:text = tokenizer.decode(generated_sequence, skip_special_tokens=True)generated_smiles.append(text)return generated_smiles# 8. 定义验证函数
def validate_smiles(smiles):mol = Chem.MolFromSmiles(smiles)return mol is not None# 9. 生成与验证
prompt = "CCO"  # 乙醇的 SMILES
generated_smiles = generate_smiles(prompt)valid_smiles = [smiles for smiles in generated_smiles if validate_smiles(smiles)]
print("生成的有效 SMILES:")
for smi in valid_smiles:print(smi)

运行步骤

  1. 准备数据:确保 your_smiles_dataset.csv 文件存在,并包含 smiles 列。
  2. 配置环境:安装所需库,并确保硬件支持(建议使用 GPU)。
  3. 执行脚本:运行上述 Python 脚本,完成模型训练与 SMILES 生成。
  4. 查看结果:生成的有效 SMILES 将在控制台输出。
6.5.1 代码结构概述
  • 数据准备:加载和编码 SMILES 数据。
  • 模型加载与微调:加载预训练 GPT-2 模型,进行微调。
  • 生成与验证:生成新的 SMILES,并使用 RDKit 验证其合法性。
6.5.2 关键代码解析
  • 添加特殊字符:根据 SMILES 的特点,添加可能未在 GPT-2 中出现的特殊字符,以提高模型生成能力。
  • 模型微调:使用自定义数据集对预训练模型进行微调,使其更适合 SMILES 生成任务。
  • 生成策略:结合温度、top-k、top-p 等参数,控制生成文本的多样性与质量。
  • 合法性验证:通过 RDKit 检查生成的 SMILES 是否对应有效的化学结构,过滤无效结果。
6.5.3 运行与结果展示

运行脚本后,模型将进行训练,并在训练完成后生成新的 SMILES 字符串。示例输出可能如下:

生成的有效 SMILES:
CCOCC
CCOCN
CCOCCO
CCOCCN
...

注意事项

  • 数据质量:高质量、多样性的 SMILES 数据集有助于生成更有效的分子结构。
  • 模型规模:根据数据集规模和复杂度,调整模型大小和训练参数,以获得最佳性能。
  • 后处理步骤:生成的 SMILES 可能需要进一步的筛选和优化,以满足特定的药物设计需求。

结语

通过上述详细的大纲和 Python 实现示例,您可以深入了解如何利用 GPT 模型进行生成式药物设计,特别是 SMILES 字符串的生成与应用。生成式人工智能在药物设计中展现出巨大的潜力,结合高效的模型训练与验证方法,可以加速新药物的发现与优化过程。希望本文能为您的学习与研究提供有价值的参考,如有更多问题,欢迎进一步交流!

相关文章:

AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用 1. 人工智能生成模型:解密 GPT 的工作原理 目录 引言 1.1 背景介绍 1.2 人工智能生成模型的兴起 1.3 GPT 系列模型的地位与影响 GPT 模型概述 2.1 什么是 GPT 2.2 GPT 的发展历程 2.3 GPT 与其…...

Python面试常见问题及答案4

一、内存管理相关 问题:Python中的垃圾回收机制是如何工作的? 答案:Python主要使用引用计数来进行垃圾回收,当对象的引用计数为0时,该对象就会被垃圾回收器回收。此外,Python还有一个循环垃圾收集器来处理循…...

开启第二阶段---蓝桥杯

一、12.10--数据类型的范围及转化 今天是刚开始,一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型,如果数值超出了 int 的范围,就会发生溢出错误。为了避免这个问题,可以将数字表示为 long 类型,方法…...

npm内存溢出

项目过大运行项目内存溢出 报错代码 运行内存溢出 increase-memory-limit ‘“node --max-old-space-size8192”’ 不是内部或外部命令,也不是可运行的程序 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of m…...

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…...

Android系统卡启动问题排查

Android系统启动正常来说会涉及到如下几个过程: 引导加载程序(Bootloader)Linux内核(Kernel),负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件,用于启动各…...

STP(生成树协议)

STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动…...

【前端面试】随机、结构赋值、博弈题

解构赋值(Destructuring Assignment)是 JavaScript ES6 引入的一项非常有用的特性,它允许我们快速地从数组或对象中提取值,并将它们赋给变量。这种方式使得代码更加简洁、易读,并且能够减少重复的访问和赋值操作。 1.…...

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器,旨在简化 Node.js 和其他工具的安装和管理,在 2019 年出世,仍在积极开发中。Volta 采用了与 nvm 不同的方法:它不是管理 Node.js 的多个版本,而是管理项目及其依赖项。当…...

ubuntu 磁盘空间满,找不到占用文件的目录

解决方法: 检查磁盘空间: 执行 df -h 查看各分区磁盘使用情况。 查找大文件或目录: 执行 du -sh /* 2>/dev/null 查找根目录下的大文件或目录,再逐一进入子目录使用相同命令查找。 清理缓存和临时文件: 清理 /t…...

1. 机器学习基本知识(5)——练习题(参考答案)

20.🔗本章代码笔记📓链接(需要🪜):(01_the_machine_learning_landscape.ipynb - Colab (google.com)) 如果你不想通过上面的官方网址下载本章的笔记,还可以在本篇博文的…...

spark-sql 备忘录

wordcount sc.textFile("../data/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(__).collect 读取json 文件 并通过sql 执行 join 查询 public static void main(String[] args) {SparkSession session SparkSession.builder().master(&qu…...

基于softmax回归的多分类

基于softmax回归的多分类任务是机器学习领域中的一种常见应用。softmax回归,又称多项逻辑回归或多类逻辑回归,是逻辑回归在多分类问题上的推广。以下是对基于softmax回归的多分类任务的详细解释: 一、softmax回归的原理 softmax回归的核心思想是通过softmax函数将输入数据…...

bs4基本运用

1. bs4基本使用 1.1. 简介 bs4的全称为 BeautifulSoup。和lxml一样,是一个html的解析器,主要功能也是解析数据和提取数据 。 本模块作为了解模块,实际开发中很少用这个模块去解析数据,大家可能会想为什么这个模块会逐渐被淘汰&…...

MySQL 时区参数 time_zone 详解

文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型:一种分布式系统中的消息传递方案,由消息队列、生产者和消费者组成消息队列:负责存储和管理消息的中间件,也称为消息代理(Message Broker)生产者:负责 产…...

Docker:国内加速源

阿里云docker加速云&#xff1a; sudo tee /etc/docker/daemon.json <<EOF { “registry-mirrors”: [“https://euf11uji.mirror.aliyuncs.com”] } EOFhttps://docker.mozhu.dev/ sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": [&qu…...

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…...

ubuntu+ros新手笔记(四):gazebo无法加载

以下为ChatGPT 的解决方案&#xff0c;对我来说是可行的&#xff01;&#xff01; 我按照第2步操作就解决辣&#xff01;&#xff01; 我的提问&#xff1a; 在ubuntu 22.04 和ros2 humble环境下&#xff0c;gazebo加载不了 ChatGPT 回答&#xff1a; 在 Ubuntu 22.04 和 …...

vue季度选择器(antd2.0 版本无此控件,单独写一个)

vue季度选择器 效果显示 效果显示 <template><div><a-popoverplacement"bottom"overlayClassName"season-picker"trigger"click"v-model"showSeason"><template #content><div class"season-picker-b…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...