PhysGNN实战:5分钟搞定城市热网预测模型(附代码)

Origin 8.0:生物医学数据分析与可视化实用指南 Origin提供了丰富的图形元素自定义选项,用户可以根据需求对图形进行美化。下面是一个简单的例子:在已经绘制好的图形上,右键选择。在对话框中,对坐标轴、图层、图例、文本标签等进行详细设置。选择不同的样式和颜色,以达到美化的效果。下面是一个简单的代码示例,用于自定义图形元素的样式:# 载入数据newbook;impasc;# 绘制一个基础图形# 自定义图形颜色代码逻辑说明:%C是一个系统变量,代表当前图形的颜色索引。 阅读详情

PhysGNN实战:5分钟搞定城市热网预测模型(附代码)

最近和几位做智慧城市和能源系统的朋友聊天,大家不约而同地提到了一个共同的痛点:如何在复杂的管网系统中,既快又准地预测关键参数,比如城市供热管道的温度分布。传统仿真软件精度高但速度慢,迭代一次要几小时;纯数据驱动的AI模型虽然快,但预测结果常常“不讲物理”,比如在管道交汇处算出个违反热力学第一定律的温度值,让人哭笑不得。这让我想起了去年在NeurIPS上看到的一个研究热点——物理图神经网络(PhysGNN),它恰好瞄准了这个“精度”与“物理一致性”难以兼得的死结。今天,我们不谈艰深的论文公式,就从一行代码开始,手把手带你搭建一个能用于城市热网温度预测的PhysGNN模型,看看它如何将物理定律“编码”进神经网络,让预测结果既聪明又守规矩。

1. 为什么城市热网预测需要PhysGNN?

城市供热网络是一个典型的图结构系统。你可以把它想象成一张巨大的网:热源厂是根节点,密密麻麻的管道是边,千家万户的换热站和建筑是叶子节点。热量从热源出发,沿着管道流动,其温度变化受到水流速度、管道材质、保温层状况、环境温度以及复杂的拓扑连接关系的共同影响。这是一个强物理约束与复杂图结构深度耦合的问题。

传统的纯数据驱动方法,比如用普通的图神经网络(GNN)来学习节点(换热站)和边(管道)的特征,很容易陷入一个陷阱:模型可能完美地拟合了历史数据中的统计规律,却完全忽略了最基本的物理法则。例如,它可能预测出某段管道的热损失为负值(即凭空产生热量),或者在下游流量增加时,预测上游温度反而升高。这种预测在数学上或许误差很小,但在物理上是荒谬的,无法用于实际的调度与故障诊断。

物理信息神经网络(PINN)的引入,就是为了把物理定律(如热传导方程、质量守恒方程)作为“软约束”加入到损失函数中,强迫神经网络去寻找符合物理规律的解。但传统PINN在处理这种非结构化的、拓扑复杂的管网系统时,往往力不从心,难以高效地建模成千上万个节点之间动态的、非线性的相互影响。

PhysGNN的核心思想,正是将GNN对图结构的强大表征能力,与PINN对物理规律的严格嵌入能力,进行深度融合。 它不是简单的“GNN+PINN”拼凑,而是在架构层面进行设计,让物理信息在图的节点与边之间进行传播和修正。这带来的直接好处是:

  • 预测精度更高:物理规律提供了极强的归纳偏置,帮助模型在数据稀缺的区域也能做出合理推断。
  • 模型泛化性更强:学习到的是普适的物理机制,而非特定数据集的表面模式,因此对未见过的工作工况或局部拓扑变化更具鲁棒性。
  • 结果可解释性提升:模型的决策过程与物理过程对齐,我们可以分析是哪个物理项(如导热损失、对流项)主导了某处的预测偏差。

下面的表格对比了几种主流方法在城市热网预测任务上的特点:

方法优势劣势适用场景
计算流体动力学(CFD)仿真精度极高,物理完全一致计算耗时极长(小时级),建模复杂,难以快速迭代精细设计与事故复盘
纯数据驱动GNN推理速度快(毫秒级),擅长捕捉复杂关联缺乏物理约束,可能产生“物理无效”预测,数据需求量大数据充足、规律稳定的短期预测
传统PINN嵌入物理规律,结果物理一致处理复杂图结构效率低,难以规模化规则几何域内的物理场求解
PhysGNN (本方案)兼顾速度与物理一致性,泛化能力强模型设计更复杂,训练需要平衡数据与物理损失实时调度、故障预警、数字孪生系统

提示:选择模型时,如果你的首要需求是在线、实时的态势感知与快速推演,那么PhysGNN在精度、速度和可靠性之间的平衡优势就非常突出。

2. 实战准备:数据、环境与核心概念

让我们暂时抛开理论,先看看要跑通一个PhysGNN模型需要准备什么。假设你手头有一份城市热网某个时段的数据。

2.1 数据长什么样?

你的数据很可能包含两个部分:

  1. 图结构数据:描述热网“怎么连”。通常是一个节点列表和边列表。节点属性可能包括节点类型(热源、泵站、用户)、基础温度、海拔等;边属性可能包括管道长度、直径、粗糙度、保温材料等。
  2. 时空特征数据:描述热网“状态如何随时间变化”。这是一个时序数据,例如每个节点每小时记录的入口温度、出口温度、压力、流量;每条边上的水温差、热损耗率等。

在代码中,我们常用PyTorch Geometric (PyG)库来处理图数据。一个Data对象就包含了这一切:

import torch
from torch_geometric.data import Data

# 假设有100个节点,4维特征(如类型、基础温度等)
x = torch.randn(100, 4)
# 边索引,表示200条管道连接
edge_index = torch.randint(0, 100, (2, 200))
# 边特征,如管道长度、直径
edge_attr = torch.randn(200, 2)
# 节点目标值:我们想预测的未来时刻温度
y = torch.randn(100, 1)

data = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y)

2.2 快速搭建Python环境

为了高效实验,建议使用Conda创建一个独立环境。以下命令能帮你快速准备好所需的核心库:

conda create -n physgnn python=3.9
conda activate physgnn
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  # 根据CUDA版本调整
pip install torch-geometric
pip install pytorch-lightning  # 简化训练循环
pip install numpy pandas matplotlib scikit-learn

注意:安装torch-geometric可能需要额外安装对应PyTorch版本的CUDA相关库,请参考其官方文档。

2.3 理解PhysGNN的“物理损失”

这是PhysGNN区别于普通GNN的灵魂所在。我们不仅要求模型预测值y_pred接近真实观测值y_true(数据损失),还要求它满足我们已知的物理方程F(物理损失)。

对于城市热网,一个高度简化的能量守恒方程可以表述为: 某个节点的热量变化 = 流入热量 - 流出热量 - 热损失 我们可以用代码将这个方程转化为一个损失项。假设对于节点i,其预测温度为T_i,相邻管道流量为Q_ij,环境温度为T_env,管道热损系数为U,那么一个简化的物理残差R_i可以是:

def physics_loss(T_pred, Q, T_env, U, edge_index):
    # T_pred: 节点预测温度
    # Q: 边上的流量(有向)
    # edge_index: 边连接 [2, num_edges]
    src, dst = edge_index
    # 计算净流入热量(简化版)
    heat_in = torch.zeros_like(T_pred)
    for s, d in zip(src, dst):
        heat_in[d] += Q[s, d] * (T_pred[s] - T_pred[d])  # 假设比热容为1
    # 计算热损失
    heat_loss = U * (T_pred - T_env)
    # 物理残差:稳态下,净流入应等于热损失(这里忽略蓄热)
    residual = heat_in - heat_loss
    # 物理损失定义为残差的均方
    physics_loss = torch.mean(residual**2)
    return physics_loss

在训练时,总损失就是数据损失和物理损失的加权和: total_loss = alpha * data_loss + beta * physics_loss 调整alpha和beta的权重,就是在平衡“拟合数据”和“遵守物理”之间的优先级。

3. 构建PhysGNN模型:代码逐行解析

现在,我们构建一个简易但完整的PhysGNN模型。这里采用一个经典的架构:用GNN作为主干网络来学习节点嵌入,然后利用这些嵌入来预测目标值,同时在计算损失时加入物理约束。

import torch.nn as nn
import torch.nn.functional as F
from torch_geometric.nn import GCNConv, global_mean_pool
import pytorch_lightning as pl

class SimplePhysGNN(pl.LightningModule):
    def __init__(self, node_in_feats, edge_in_feats, hidden_dim=64, alpha=1.0, beta=0.1):
        super().__init__()
        self.save_hyperparameters()
        # GNN编码器:处理图结构
        self.conv1 = GCNConv(node_in_feats, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, hidden_dim)
        # 边特征处理层(可选)
        self.edge_encoder = nn.Linear(edge_in_feats, hidden_dim)
        # 预测头:从节点嵌入预测目标值(如温度)
        self.predictor = nn.Sequential(
            nn.Linear(hidden_dim, hidden_dim//2),
            nn.ReLU(),
            nn.Linear(hidden_dim//2, 1) # 输出一个标量,例如温度
        )
        self.alpha = alpha # 数据损失权重
        self.beta = beta   # 物理损失权重

    def forward(self, data):
        x, edge_index, edge_attr = data.x, data.edge_index, data.edge_attr
        # 1. 通过GNN传递消息,更新节点特征
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, p=0.2, training=self.training)
        x = self.conv2(x, edge_index)
        # 2. 预测目标值
        out = self.predictor(x)
        return out.squeeze() # 假设输出形状为 [num_nodes]

    def _calculate_physics_loss(self, predictions, data):
        """计算基于能量守恒的物理损失(简化示例)"""
        # 这里需要根据你的具体物理方程实现
        # 例如,使用前面定义的 physics_loss 函数
        # 此处为占位,假设我们有一个计算好的残差
        # 在实际中,你需要访问 data 中的流量、环境温度等参数
        T_pred = predictions
        # 假设 data 中有这些属性
        Q = data.flow # 边流量
        T_env = data.env_temp # 环境温度
        U = data.heat_loss_coeff # 热损系数
        # 调用 physics_loss 函数
        p_loss = physics_loss(T_pred, Q, T_env, U, data.edge_index)
        return p_loss

    def training_step(self, batch, batch_idx):
        y_pred = self(batch)
        y_true = batch.y
        # 数据损失 (MSE)
        data_loss = F.mse_loss(y_pred, y_true)
        # 物理损失
        physics_loss = self._calculate_physics_loss(y_pred, batch)
        # 总损失
        total_loss = self.alpha * data_loss + self.beta * physics_loss

        self.log('train_data_loss', data_loss)
        self.log('train_physics_loss', physics_loss)
        self.log('train_total_loss', total_loss)
        return total_loss

    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
        return optimizer

这个SimplePhysGNN类做了以下几件事:

  1. 初始化:定义了两个图卷积层(GCNConv)、一个边特征编码器和一个预测头。alpha和beta是控制两种损失权重的超参数。
  2. 前向传播(forward):输入图数据,经过GNN层得到节点的高级表示,最后通过全连接层输出每个节点的预测值。
  3. 物理损失计算(_calculate_physics_loss):这里预留了接口。你需要根据你的具体物理方程(如完整的热水力模型)来实现它。这是PhysGNN的“物理心脏”。
  4. 训练步骤(training_step):计算数据损失和物理损失,加权求和得到总损失,并记录日志。
  5. 优化器配置:使用Adam优化器。

提示:物理损失函数的设计是PhysGNN应用成败的关键。它需要准确反映系统的核心物理机制,但又不至于过于复杂导致训练困难。通常从最简化的方程开始,逐步增加复杂度。

4. 模型训练、调参与结果可视化

有了模型,下一步就是喂数据训练,并观察效果。

4.1 训练循环与关键监控

使用PyTorch Lightning,训练变得非常简洁。但我们需要密切关注两个损失的下降情况:

from torch_geometric.loader import DataLoader
import pytorch_lightning as pl

# 假设我们有一个数据集列表 `dataset`
train_loader = DataLoader(dataset[:800], batch_size=32, shuffle=True)
val_loader = DataLoader(dataset[800:], batch_size=32)

# 初始化模型
model = SimplePhysGNN(node_in_feats=4, edge_in_feats=2, alpha=1.0, beta=0.5)

# 训练
trainer = pl.Trainer(max_epochs=100, accelerator='gpu', devices=1)
trainer.fit(model, train_loader, val_loader)

训练时,务必在TensorBoard或日志中同时查看train_data_loss和train_physics_loss:

  • 如果data_loss下降而physics_loss居高不下,说明模型在“硬背”数据,但违背物理规律,需要增大beta。
  • 如果physics_loss下降而data_loss很大,说明物理约束过强,模型无法拟合真实数据,可能需要检查物理方程的正确性或减小beta。
  • 理想状态是两者协同下降。

4.2 超参数调优:平衡的艺术

PhysGNN的训练涉及几组关键超参数,手动调整费时费力。一个实用的策略是使用网格搜索或随机搜索,重点关注以下组合:

超参数典型范围/选项影响
物理损失权重 beta[0.01, 0.1, 0.5, 1.0, 5.0]核心参数。控制物理约束的强度。太小则模型偏向纯GNN,太大可能难以收敛。
GNN层数2, 3, 4层数过多可能导致过平滑,过少则可能无法捕获远距离节点依赖。
隐藏层维度32, 64, 128影响模型容量。维度越大,拟合能力越强,但也更容易过拟合。
学习率[1e-4, 5e-4, 1e-3]影响训练稳定性和收敛速度。PhysGNN因包含物理损失,损失曲面可能更复杂,建议从小学习率开始。
物理方程复杂度简化版 -> 完整版从最简单的守恒方程开始,确保模型能训练,再逐步引入更精确的项(如摩擦损失、动态蓄热项)。

你可以写一个简单的调参脚本,循环不同的beta值进行训练,并在验证集上评估一个复合指标,例如: 复合指标 = RMSE(预测 vs 真实) + gamma * 物理残差均值 其中gamma是一个缩放因子,用于平衡误差和物理违反程度。

4.3 结果可视化:看见“物理”如何起作用

训练完成后,可视化是理解模型行为的关键。不要只看整体的均方根误差(RMSE),而要深入细节:

  1. 预测 vs 真实对比图:选取一条主干管道或一个关键节点,绘制其随时间变化的预测温度曲线与真实值曲线。观察模型在波峰、波谷、突变点处的表现。

    import matplotlib.pyplot as plt
    # 假设 test_data 是测试集的一个样本
    with torch.no_grad():
        pred = model(test_data).cpu().numpy()
        true = test_data.y.cpu().numpy()
    plt.figure(figsize=(10,5))
    plt.plot(pred, label='Predicted Temp', linestyle='--')
    plt.plot(true, label='True Temp')
    plt.xlabel('Node Index')
    plt.ylabel('Temperature')
    plt.legend()
    plt.title('Temperature Prediction along Pipeline Nodes')
    plt.show()
    
  2. 误差空间分布图:将每个节点的预测误差(绝对值)映射到热网的地理信息图或拓扑结构图上。用颜色深浅表示误差大小。这能直观揭示模型在网络的哪些区域表现不佳(例如,是否在管网末端、负荷突变处误差更大)。

  3. 物理残差分布图:计算并绘制每个节点物理方程残差的分布直方图。一个训练良好的PhysGNN模型,其物理残差应该接近于零,且分布集中。如果残差分布很广,说明模型预测在很多地方严重违反了物理规律,即使数据误差小,这个模型也是不可信的。

  4. “假如”分析:利用训练好的模型进行推演。例如,模拟某条管道保温层破损(热损系数U增大)后,全网温度的分布变化。对比PhysGNN和纯GNN的模拟结果,PhysGNN的结果应该更符合直觉(如破损点下游温度明显降低),而纯GNN可能产生反物理的异常变化。

5. 进阶:从Demo到工程部署的挑战与技巧

用上面的代码跑通一个Demo相对容易,但要将其部署到实际生产环境,解决真实的城市热网预测问题,还需要考虑更多工程细节。

挑战一:数据质量与融合 实际数据往往存在大量噪声、缺失和异常值。供热系统的传感器数据可能因为通信中断、校准漂移而出错。在构建模型前,必须进行严格的数据清洗和验证。此外,如何有效融合多源异构数据(如SCADA实时数据、气象数据、GIS地理信息、维修历史记录)也是一大挑战。一个常见的做法是使用不同的编码器(如CNN处理气象图,RNN处理时序,GNN处理拓扑)提取特征,再进行跨模态融合。

挑战二:物理模型的保真度与简化 我们之前使用了极度简化的热平衡方程。实际的热网水力热力模型是一组复杂的非线性偏微分方程。完全嵌入这些方程会使物理损失项极其复杂,训练不稳定。需要在模型精度和训练可行性之间做权衡:

  • 分层嵌入:先嵌入核心守恒律(质量、能量守恒),再逐步加入次要效应(如摩擦损失、泵的特性曲线)。
  • 代理模型:用另一个轻量级神经网络来学习高保真仿真器(如Modelica、Fluent仿真结果)的输入输出映射,然后将这个“代理仿真器”作为物理损失的一部分。这相当于用数据驱动的“老师”来指导GNN“学生”遵守物理。

挑战三:动态图与时空预测 城市热网的拓扑并非一成不变(阀门开关、支路启停),且状态随时间演变。我们需要的是时空图神经网络。可以将LSTM、GRU或Transformer时序模块与GNN结合,或者使用专门的时空图卷积层。物理约束也需要从静态扩展到动态,例如在损失函数中加入时间导数项,以符合瞬态能量守恒。

挑战四:模型效率与部署 对于需要实时或准实时预测的场景(如每15分钟预测一次未来2小时全网温度),模型推理速度至关重要。一些优化技巧包括:

  • 模型剪枝与量化:在训练后移除不重要的神经元或权重,并将浮点数转换为低精度整数,以减小模型体积、提升推理速度。
  • 图结构预处理:对静态的管网拓扑图进行预计算,如生成归一化的拉普拉斯矩阵,避免在推理时重复计算。
  • 边缘部署:考虑将轻量化的模型部署在靠近数据源的边缘服务器或网关设备上,减少数据传输延迟。

最后,分享一个我在早期实验中踩过的坑:一开始我将物理损失权重beta设得太大,导致模型优化完全被物理项主导,预测结果虽然物理上“完美平滑”,但却完全偏离了真实测量值,数据损失根本降不下来。后来采用了一个动态调整策略——在训练初期使用较小的beta,让模型先学会拟合数据的基本模式;随着训练进行,再逐步增大beta,让物理约束慢慢“收紧”,引导模型向既拟合数据又遵守物理的方向收敛,效果稳定了很多。记住,PhysGNN不是魔法,它需要你精心设计物理与数据之间的对话机制。

SiLan_EAP_AOI_Test_Case.xlsx 立即下载

相关推荐

SpringBoot和VueDevOps 发布审批与回滚管理系统源码

包含前后端源码、SQL初始化脚本和启动说明。JDK 17、Spring Boot、Vue;默认H2演示数据库。

[黎阳之光] 智慧城市事件感知与处置联动实战教程:视频孪生异常检测、分级预警与跨部门协同一次讲透

视频孪生要做的是把这条链条改造成“自动发现、分级预警、图上派单、闭环核查”,让事件在图上流转,而不是在电话里流转。工单建议包含五个字段组:事件基本信息(类型、位置、发现时间、来源)、识别证据(视频截图、算法置信度)、责任信息(网格、单位、处置人)、处置过程(派单、到场、处置、核查时间戳)、考核结果(是否超时、是否一次办结)。人员聚集这类高敏感事件,阈值要按场景分档:商业街 50 人、学校门口 30 人、地铁口 80 人,用场景画像分别配置,全市“一刀切”必然误报不断。

m0_75019831的博客 255

制造业重点关注的17个Agent智能体落地场景方案.pptx

制造业重点关注的17个Agent智能体落地场景方案.pptx

智慧园区智慧城市整体解决方案合集

本文系统阐述智慧园区建设的背景、需求与解决方案,聚焦“1+N”IOC运营中心架构,整合安防、能耗、环境、设备等多维度数据,构建统一平台与数字孪生体系。通过AI智能分析、LBS无感巡更、智慧照明、碳排管理及企业服务生态,实现园区高效运营、安全可控与绿色低碳。方案兼顾运营方、企业与员工多方价值,推动园区向智能化、集约化、可持续方向演进。

weixin_41039677的博客 76

STM32 FreeRTOS 多任务实战手册:优先级反转、任务栈与 FromISR 坑位

任务莫名其妙卡死、优先级翻转、栈溢出查不到现场——RTOS 的问题几乎都不在 API 调用,而在调度时序和临界区边界。 【10 个专题,每个含复现步骤 / 测量数据 / 判据 / 落地代码】 1. STM32 NVIC中断优先级详解 2. STM32 FreeRTOS 软件定时器实测 3. STM32 FreeRTOS 消息队列 ISR 收发实测 4. STM32 FreeRTOS 优先级反转实测 5. STM32 FreeRTOS StreamBuffer 流缓冲区串口DMA不 6. STM32 FreeRTOS 事件组实测 7. STM32 FreeRTOS 任务栈溢出排查实测 8. STM32 FreeRTOS 堆内存管理实测 9. STM32 FreeRTOS CPU占用率统计实测 10. STM32 移植LwIP+FreeRTOS双任务协同 【这份教程解决什么】 · 每类问题都从「现象 → 可疑层 → 实测判据 → 根因 → 修复动作」走一遍,不停留在寄存器配置说明。 · 代码块与实测表格按专题编号,可直接对照自己的工程定位;目录按专题编号,方便对照查阅。 【适合谁】正在把裸机工程迁到 RTOS、或已经被优先级反转/栈溢出/中断里调 API 坑过的嵌入式工程师。 【形态】PDF 教程,10 个专题 + 速查目录,含代码块与实测数据表。

科技中介服务机构如何构建智能化服务平台以提升服务效率与专业度?.docx

科技中介服务机构如何构建智能化服务平台以提升服务效率与专业度?

多目标粒子群算法求解综合能源系统最优容量配置研究(Matlab代码实现)

内容概要:本文研究了多目标粒子群算法在综合能源系统最优容量配置中的应用,通过Matlab代码实现求解多目标优化问题。文中系统构建了涵盖经济性、环保性和能源利用效率的多目标优化框架,详细阐述了综合能源系统中各类设备的数学模型,并采用改进的多目标粒子群算法进行高效求解,最终获得Pareto最优解集,为综合能源系统的科学规划与可持续发展提供了坚实的理论支撑与实用的技术路径。; 适合人群:具备一定电力系统、优化算法及Matlab编程基础的研究生、科研人员及相关工程技术人员。; 使用场景及目标:①掌握多目标优化问题在综合能源系统容量配置中的建模方法;②学习多目标粒子群算法的实现过程及其在能源系统规划中的具体应用;③通过Matlab代码实践提升算法编程与仿真分析能力。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建、约束条件处理及Pareto解集的生成过程,同时可尝试调整算法参数以观察优化结果的变化,深化对算法性能的理解。

政府科技管理者如何高效完成科技成果评价与价值挖掘?.docx

政府科技管理者如何高效完成科技成果评价与价值挖掘?

科技中介服务机构如何借助智能工具提升服务的专业性与便捷性?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者在推动科技成果转化时,如何高效识别具有高转化潜力的科技成果?.docx

政府科技管理者在推动科技成果转化时,如何高效识别具有高转化潜力的科技成果?

政府科技管理者在推动科技成果落地过程中,如何高效识别和筛选具备高转化价值的科技成果?.docx

政府科技管理者在推动科技成果落地过程中,如何高效识别和筛选具备高转化价值的科技成果?

港股十档行情tick数据,包含逐笔成交与买卖委托快照 逐笔记录含成交时间、价格、成交量、成交方向及委托单类型 十档委托快照提供买卖各十个价位的挂单价格与挂单数量,可观察盘口深度变化 分钟数据以一分钟为

港股十档行情tick数据,包含逐笔成交与买卖委托快照。逐笔记录含成交时间、价格、成交量、成交方向及委托单类型。十档委托快照提供买卖各十个价位的挂单价格与挂单数量,可观察盘口深度变化。分钟数据以一分钟为单位,包含开盘价、最高价、最低价、收盘价、成交量及成交额。历史行情覆盖近十五年,提供完整日线csv表格,字段包含日期、开盘价、最高价、最低价、收盘价、成交量、成交额,部分还包含调整因子或前收盘价。所有数据均为非实时历史数据。 数据源:CMES金融数据库

RAG 评估 Lite 实战:Recall@k/MRR/Hit Rate,零 Key 离线可跑(Python 源码)

RAG 评估 Lite 实战包。在黄金集上计算 Recall@k、MRR、Hit Rate,并给出 Precision@k 与 nDCG@k。标准库检索器产出排序,评估器输出 Markdown/JSON 报告。零第三方依赖、零 API Key,含中文黄金集、样例与冒烟。MIT。作者 blog.youkuaiyun.com/mtl1994

产业园区如何精准识别和匹配优质科技成果资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【人工智能工程】完结JEV 决策大模型实战,让 AI 从会聊天到能决策

内容概要:本文介绍了JEV决策大模型的核心理念与工程实践,强调将其作为“快判断”层从通用大模型中剥离使用。JEV不生成文本,而是针对明确的状态和问题,输出结构化、带概率的决策结果,适用于高频、原子化的判断任务。文章详细阐述了JEV的工作机制、与通用大模型的本质区别、典型应用场景(如Agent工具路由)、questions的设计方法、能力边界以及兜底机制的重要性,并指出其在成本、延迟和输出确定性方面的优势。; 适合人群:具备一定AI工程实践经验的研发人员、系统架构师,尤其是正在构建Agent、自动化决策系统或优化大模型调用链的技术团队;; 使用场景及目标:①优化高频、轻量级判断任务(如工单分类、内容初筛、RAG相关性判定)的效率与成本;②实现主模型与决策模块的职责分离,提升系统整体稳定性与可维护性;③学习如何设计高质量的判断问题与概率校准机制; 阅读建议:此资源聚焦于决策模型的工程化落地,建议结合实际业务中的判断流程进行POC验证,重点关注questions设计、阈值校准与兜底策略的构建,避免盲目神化JEV的能力。

塔式熔盐光热朗肯循环电站建模及Simulink仿真研究

内容概要:本文围绕塔式熔盐光热朗肯循环电站的建模与Simulink仿真展开系统性研究,重点构建了太阳能集热场、熔盐储热系统及朗肯循环发电单元的数学模型,并基于Simulink平台搭建了完整的集成化仿真系统。研究深入分析了系统的能量转换机制、热力循环特性与动态响应行为,通过设置不同太阳辐照强度、负载变化等工况进行仿真,验证了系统在变工况条件下的运行稳定性与调节能力。同时,系统探讨了熔盐流量、储热容量、换热器效率等关键参数对电站整体热效率与输出功率的影响规律,提出了优化运行策略与参数匹配方案,旨在提升光热电站的能量利用率、运行灵活性与供电可靠性。; 适合人群:具备一定电力系统、热力学或新能源工程背景,从事光热发电、综合能源系统建模与仿真的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于塔式光热电站的教学演示与原理讲解,帮助学生理解光-热-电转换全过程;②为光热系统的设计优化、动态性能评估、控制策略开发(如温度控制、功率调节)提供高保真仿真平台与数据支撑;③支持新型储热调度策略与系统集成方案的验证与测试。; 阅读建议:建议读者结合提供的Simulink模型文件同步操作,深入理解各子系统模块(如集热场、储罐、蒸汽发生器、汽轮机等)的建模逻辑与参数设置方法,重点关注能量流、质量流与控制信号的耦合机制,可进一步在此基础上开发先进控制算法或进行多能互补系统集成研究。

A股分钟数据涵盖股票、ETF、可转债及指数四大类 每条数据记录包含精确到分钟的时间戳,以及开盘价、最高价、最低价、收盘价、成交量、成交额六个核心字段 部分数据还提供前收盘价作为参考 股票与ETF数据细

A股分钟数据涵盖股票、ETF、可转债及指数四大类。每条数据记录包含精确到分钟的时间戳,以及开盘价、最高价、最低价、收盘价、成交量、成交额六个核心字段。部分数据还提供前收盘价作为参考。股票与ETF数据细分至1分钟、5分钟等周期,可转债在交易时段内逐笔生成分钟快照,指数数据则同步覆盖上证、深证等主要宽基指数,便于观察市场整体走势。 数据源:CMES金融数据库

《计算机科学概论(第13版)》5-12章

定序是按给定语句的顺序应用每个算法步骤。(primitive):建立一组定义明确的构建块,利用它们来构造和执行算法的表示。可以消除歧义,不会引起误解,就像咱们传统的自然语言(用英语来沟通交流)。(programming language):原语的集合以及说明如何组合这些原语来表示比较复杂的想法的规则集合。用程序设计语言描述的算法可以在计算机上执行。每个原语都有自己的语法和语义,语法指的是原语的符号表示,语义是指该原语的含义。伪代码:用户开发过程中非正式表达想法的符号系统。

输入知识,消化知识,输出知识,分享知识,教人让我学习更好,业精于勤荒于嬉,行成于思毁于随 1036
上一篇: 从“陶陶摘苹果”到C++数组遍历:信息学奥赛编程启蒙第一课
下一篇: CMake项目实战:如何用cxxopts轻松搞定C++命令行参数解析(附完整代码)
linux6sysadmin
博客等级 码龄4年 59粉丝 1615原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值