当前位置: 首页 > 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…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...