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

news2024/12/16 7:53:58

人工智能生成式药物设计:基于 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 Dataset

class SMILESDataset(Dataset):
    def __init__(self, encoded_smiles):
        self.input_ids = encoded_smiles

    def __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_smiles

    def __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 Chem

def 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_smiles

    def __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 字符串的生成与应用。生成式人工智能在药物设计中展现出巨大的潜力,结合高效的模型训练与验证方法,可以加速新药物的发现与优化过程。希望本文能为您的学习与研究提供有价值的参考,如有更多问题,欢迎进一步交流!

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

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

相关文章

Python机器学习笔记(七、深度学习-神经网络)

深度学习算法经过精确调整,只适用于特定的使用场景。先学习较为简单的深度学习算法,用于分类和回归的多层感知机(multilayer perceptron,MLP),它可以作为研究更复杂的深度学习方法的起点。MLP 也被称为&…

Kylin麒麟操作系统 | Nginx服务部署

目录 一、理论储备1. Nginx概述2. Nginx与Apache的区别3. Nginx的服务配置 二、任务实施任务1 Nginx的编译安装1. Server配置2. 客户端测试 任务2 Nginx反向代理1. Server1配置2. Server2配置3. 客户端测试 一、理论储备 1. Nginx概述 Nginx是一个轻量级的web服务器&#xff…

【html网页页面012】html+css制作品牌主题宏宝莱网页含视频、留言表单(7页面附效果及源码)

品牌主题宏宝莱网页制作 🥤1、写在前面🍧2、涉及知识🌳3、网页效果完整效果(7页):代码目录结构:page1、首页page2、衍生品page3、包装设计page4、视频介绍page5、留言板page6、联系我们page7、详情页(三层页…

机器学习之交叉熵

交叉熵(Cross-Entropy)是机器学习中用于衡量预测分布与真实分布之间差异的一种损失函数,特别是在分类任务中非常常见。它源于信息论,反映了两个概率分布之间的距离。 交叉熵的数学定义 对于分类任务,假设我们有&#…

0001.基于springmvc简易酒店管理系统后台

一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习,虽然版本比较老但是部署方便,tomcat环境即可启用;代码简洁,前后端代码提供可统一学习;祝愿您能成尽快为一位合格的程序员,愿世界没有BUG; …

无限次使用 cursor pro

github地址 cursor-vip 使用方式 在 MacOS/Linux 中,请打开终端; 在 Windows 中,请打开 Git Bash。 然后执行以下命令来安装: 部分电脑可能会误报毒,需要关闭杀毒软件/电脑管家/安全防护再进行 方式1:通过…

AI 语言模型产业的投资困境与发展困境分析

https://benn.substack.com/p/do-ai-companies-work 巨额投资与成本困境 大型语言模型(LLM)的开发成本惊人。根据报道,OpenAI 正在筹集 65 亿美元资金,每年约消耗 70 亿美元用于研究、开发新的 AI 服务和扩充团队。Anthropic 预计…

tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)

这里我用的edge的插件闪击翻译。这里我英语不好,所以用这个可以顺便学习下英语。 任务一:What is Offensive Security?(什么是进攻性安全?) 很简单啊,通过阅读,知道以下哪个选项更能代表您模拟黑客操作…

[论文阅读] |智能体长期记忆与反思

写在前面:10月份的时候,联发科天玑9400发布,搭载这款旗舰 5G 智能体 AI 芯片的荣耀MagicOS9.0实现了一句话让手机自动操作美团点咖啡。很快商场实体店里便能看到很多品牌手机已经升级为智能体语音助手。下一步,这些智能体或许便能…

CQRS Design Pattern in Microservices - CQRS模式

原文链接 CQRS Design Pattern in Microservices - GeeksforGeeks 【文章看起来像是AI写的。。。 😂😂😂】 简介 实现步骤 1,识别有界上下文:(Identify Bounded Contexts:) 2,命…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

RPC远程服务调用详解和gRPC简介

RPC (Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达…

计算机网络知识点全梳理(三.TCP知识点总结)

目录 TCP基本概念 为什么需要TCP 什么是TCP 什么是TCP链接 如何唯一确定一个 TCP 连接 TCP三次握手 握手流程 为什么是三次握手,而不是两次、四次 为什么客户端和服务端的初始序列号 ISN 不同 既然 IP 层会分片,为什么 TCP 层还需要 MSS TCP四…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…

前端成长之路:CSS元素显示模式

元素显示模式 网页中的标签非常的多,在不同的地方会使用到不同类型的标签,了解这些标签的特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)按照什么方式进行显示,比如:div标签会自己独占一行&a…

如何在 Ubuntu 22.04 上使用 vnStat 监控网络流量

简介 vnStat是一个免费的、开源的、基于控制台的Linux操作系统网络流量监控工具。通过vnStat,你可以在不同的时间段监控网络统计数据。它简单、轻量级,并且消耗的系统资源很小。vnStat允许你按小时、日、月、周和日生成网络流量数据。本教程将向你展示如…

解决pip下载慢

使用pip下载大量安装包,下载速度太慢了 1、问题现象 pip安装包速度太慢 2、解决方案 配置国内源 vi /root/.config/pip/pip.conf[global] timeout 6000 index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.com

RabbitMQ中的Publish-Subscribe模式

在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件。RabbitMQ 是一个功能强大且广泛使用的开源消息代理,支持多种消息传递模式。其中,Publish/Subscribe(发布/订阅&#xff0…

专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。

考研落幕,本人本中游211,如愿以偿考入浙江大学,专业课842信号系统与数字电路140,总分410,和考前多次模考预期差距不大(建议大家平时做好定期模考测试,直接从实战分数中,找到复习的脉…

Unity类银河战士恶魔城学习总结(P178 Archer s arrow 弓箭手的箭)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节制作了一个弓箭手的箭 Arrow_Controller.cs 1.OnTriggerEnter2D方法 功能:检测箭矢与其他对象的碰撞。逻辑&#xff1…