|
|
|
|
|
project: # 项目基础信息
|
|
|
|
|
|
name: pta_surrogate # 项目名称或流量制度族名称
|
|
|
|
|
|
|
|
|
|
|
|
paths:
|
|
|
|
|
|
project_root: ".."
|
|
|
|
|
|
data_dir: "data"
|
|
|
|
|
|
temp_dir: "data/temp"
|
|
|
|
|
|
samples_dir: "data/samples"
|
|
|
|
|
|
processed_dir: "data/processed"
|
|
|
|
|
|
models_dir: "models"
|
|
|
|
|
|
|
|
|
|
|
|
cpp:
|
|
|
|
|
|
training_exe: "../Training/Release/training.exe"
|
|
|
|
|
|
runner_exe: "../Training/Release/runner.exe"
|
|
|
|
|
|
hx_dll: "../Training/Release/HX_NWTM.dll"
|
|
|
|
|
|
license_dat: "../../Bin/Res/license/HXNWTM_license.dat"
|
|
|
|
|
|
|
|
|
|
|
|
dataset_runtime:
|
|
|
|
|
|
auto_build_dataset_bin: true # 缺少 dataset.bin 时是否自动调用 training.exe 生成
|
|
|
|
|
|
use_runner_server: true # 是否使用常驻 runner 进程加速批量正演
|
|
|
|
|
|
runner_timeout_sec: 240 # 单次 C++ 正演求解超时时间,单位秒
|
|
|
|
|
|
|
|
|
|
|
|
streaming_hdf5: # HDF5 样本文件流式写入设置
|
|
|
|
|
|
write_batch_size: 2000 # HDF5 每累计多少条样本批量写入一次
|
|
|
|
|
|
chunk_rows: 2048 # HDF5 数据分块行数,影响读写效率
|
|
|
|
|
|
compression: null # HDF5 压缩方式,null 表示不压缩
|
|
|
|
|
|
|
|
|
|
|
|
parallel: # 并行样本生成设置
|
|
|
|
|
|
n_workers: 36 # 并行生成样本的工作进程数量
|
|
|
|
|
|
max_in_flight: 48 # 同时提交但尚未完成的最大任务数
|
|
|
|
|
|
checkpoint_every_n: 5000 # 每生成多少条样本输出一次检查点
|
|
|
|
|
|
checkpoint_every_sec: 180.0 # 每隔多少秒输出一次检查点
|
|
|
|
|
|
|
|
|
|
|
|
generation: # 数据集生成规模与随机性设置
|
|
|
|
|
|
n_samples: 10000 # 目标有效样本数量
|
|
|
|
|
|
random_seed: 42 # 随机种子,用于复现实验
|
|
|
|
|
|
max_rounds: 999999 # 最大采样轮数,防止生成过程无限循环
|
|
|
|
|
|
max_total_requested: 6000000 # 最多请求求解器计算的候选样本数
|
|
|
|
|
|
max_fail_examples_per_reason: 50 # 每类失败原因最多保存的示例数量
|
|
|
|
|
|
|
|
|
|
|
|
params: # 储层与井筒物理参数采样设置
|
|
|
|
|
|
all_physical_param_names: ["k", "skin", "wellboreC", "phi", "h", "Cf"] # 写入数据集的完整物理参数列表
|
|
|
|
|
|
active_param_names: ["k", "skin", "wellboreC", "phi", "h"] # 参与采样变化的物理参数列表
|
|
|
|
|
|
log_params: ["k", "wellboreC", "h"] # 采样时采用对数尺度的物理参数
|
|
|
|
|
|
ranges: # 各物理参数采样范围
|
|
|
|
|
|
k: [1.0e-4, 100.0] # 渗透率采样范围
|
|
|
|
|
|
skin: [-10.0, 10.0] # 表皮系数采样范围
|
|
|
|
|
|
wellboreC: [1.0e-4, 2.0] # 井筒储集系数采样范围
|
|
|
|
|
|
phi: [1.0e-2, 0.50] # 孔隙度采样范围
|
|
|
|
|
|
h: [2.0, 100.0] # 储层厚度采样范围
|
|
|
|
|
|
Cf: [1.0e-6, 5.0e-3] # 岩石压缩系数采样范围
|
|
|
|
|
|
fixed_params: # 固定不参与采样的物理参数
|
|
|
|
|
|
Cf:
|
|
|
|
|
|
enabled: true # 是否启用该功能或固定该参数
|
|
|
|
|
|
value: 4.315e-4 # 固定参数取值
|
|
|
|
|
|
sampling_method: "sobol" # 参数空间采样方法,如 Sobol、LHS 或 uniform
|
|
|
|
|
|
targeted_sampling: # 困难区域定向采样设置
|
|
|
|
|
|
enabled: true # 是否启用该功能或固定该参数
|
|
|
|
|
|
strategies: # 按参数分别定义定向采样策略
|
|
|
|
|
|
k:
|
|
|
|
|
|
components: # 分段采样组件列表
|
|
|
|
|
|
- {prob: 0.55, range: [1.0e-4, 1.0e-1], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.30, range: [1.0e-1, 1.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.15, range: [1.0, 100.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
skin:
|
|
|
|
|
|
components: # 分段采样组件列表
|
|
|
|
|
|
- {prob: 0.35, range: [-10.0, -3.0], scale: "linear"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.30, range: [-3.0, 3.0], scale: "linear"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.35, range: [3.0, 10.0], scale: "linear"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
wellboreC:
|
|
|
|
|
|
components: # 分段采样组件列表
|
|
|
|
|
|
- {prob: 0.60, range: [1.0e-4, 5.0e-2], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.25, range: [5.0e-2, 5.0e-1], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
- {prob: 0.15, range: [5.0e-1, 2.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度
|
|
|
|
|
|
|
|
|
|
|
|
curve_processing: # 双对数曲线清洗与重采样设置
|
|
|
|
|
|
n_time_points: 160 # 每条双对数曲线统一重采样的时间点数
|
|
|
|
|
|
min_valid_points: 40 # 有效曲线至少需要的原始点数
|
|
|
|
|
|
feature_epsilon: 1.0e-12 # 取对数和除法时使用的最小保护值
|
|
|
|
|
|
use_slope_feature: true # 是否额外拼接压力曲线斜率特征
|
|
|
|
|
|
max_time_cap: 3000.0 # 曲线重采样允许的最大时间上限
|
|
|
|
|
|
min_time_floor: 1.0e-6 # 曲线重采样允许的最小时间下限
|
|
|
|
|
|
fixed_time_range: null # 固定重采样时间范围,null 表示按样本自身范围
|
|
|
|
|
|
max_nonpos_deriv_frac: 0.80 # 允许非正压力导数点占比的最大阈值
|
|
|
|
|
|
p_log10_max: 6.0 # 压力曲线最大值的 log10 上限,用于过滤异常样本
|
|
|
|
|
|
d_log10_max: 6.0 # 导数曲线最大值的 log10 上限,用于过滤异常样本
|
|
|
|
|
|
outlier_factor: 3.0 # 异常值过滤系数,当前主要作为保留配置
|
|
|
|
|
|
|
|
|
|
|
|
schedule: # 流量制度生成与写入设置
|
|
|
|
|
|
write_schedule_to_params_bin: true # 写入 params.bin 时是否附带流量制度
|
|
|
|
|
|
max_points: 512 # 单个流量制度最多保留的流量段数量
|
|
|
|
|
|
generation_mode: "family_random" # 流量制度生成模式
|
|
|
|
|
|
|
|
|
|
|
|
case_schedule: # 固定基准流量制度
|
|
|
|
|
|
timeQ: [12.0, 12.0, 12.0, 48.0, 72.0] # 各流量段持续时间序列
|
|
|
|
|
|
q: [158.987, 190.785, 222.582, 238.481, 0.0] # 各流量段产量序列,末段为 0 通常表示关井
|
|
|
|
|
|
default_section_index: 5 # 默认用于计算双对数曲线的流动段索引
|
|
|
|
|
|
|
|
|
|
|
|
section_policy: # 流动段索引选择策略
|
|
|
|
|
|
mode: "fixed_last" # 流动段索引选择策略名称
|
|
|
|
|
|
fixed_value: 5 # 固定流动段索引取值
|
|
|
|
|
|
|
|
|
|
|
|
case_neighborhood: # 基准流量制度邻域扰动设置
|
|
|
|
|
|
dt_jitter_rel: 0.30 # 流量段持续时间相对扰动幅度
|
|
|
|
|
|
q_jitter_rel: 0.25 # 产量相对扰动幅度
|
|
|
|
|
|
shutin_dt_jitter_rel: 0.20 # 关井段持续时间相对扰动幅度
|
|
|
|
|
|
keep_monotonic_prod: false # 扰动后是否保持生产段产量单调
|
|
|
|
|
|
keep_last_q_zero: true # 是否强制最后一个流量段产量为 0
|
|
|
|
|
|
min_dt: 0.05 # 流量段最小持续时间
|
|
|
|
|
|
q_min: 10.0 # 扰动后产量下限
|
|
|
|
|
|
q_max: 5000.0 # 扰动后产量上限
|
|
|
|
|
|
|
|
|
|
|
|
family_random: # 随机流量制度族生成设置
|
|
|
|
|
|
families: # 流量制度类型及抽样概率
|
|
|
|
|
|
- {name: "flat_tail_shutin", prob: 0.10} # 平稳生产后关井的流量制度族
|
|
|
|
|
|
- {name: "inc_tail_shutin", prob: 0.40} # 递增生产后关井的流量制度族
|
|
|
|
|
|
- {name: "dec_tail_shutin", prob: 0.15} # 递减生产后关井的流量制度族
|
|
|
|
|
|
- {name: "mild_step_tail_shutin", prob: 0.35} # 轻微阶跃变化后关井的流量制度族
|
|
|
|
|
|
n_prod_sections_range: [3, 5] # 生产流量段数量范围
|
|
|
|
|
|
prod_total_time_range: [24.0, 220.0] # 生产阶段总持续时间范围
|
|
|
|
|
|
shutin_dt_range: [12.0, 140.0] # 关井段持续时间范围
|
|
|
|
|
|
q_range: [50.0, 500.0] # 随机生成产量范围
|
|
|
|
|
|
duration_lognormal_mu: 1.6 # 生产段持续时间对数正态分布均值参数
|
|
|
|
|
|
duration_lognormal_sigma: 0.7 # 生产段持续时间对数正态分布标准差参数
|
|
|
|
|
|
max_rel_step: 2.0 # 相邻生产段产量最大相对跳变倍数
|
|
|
|
|
|
mult_noise_sigma: 0.05 # 产量乘性随机扰动强度
|
|
|
|
|
|
step_jump_rel_range: [1.20, 1.60] # 阶跃型流量制度的跳变幅度范围
|
|
|
|
|
|
|
|
|
|
|
|
canonicalize_for_model: # 输入模型前的流量制度规范化设置
|
|
|
|
|
|
remove_shutin: false # 模型编码前是否移除关井段
|
|
|
|
|
|
q_thr: 1.0e-6 # 判断关井或零产量的阈值
|
|
|
|
|
|
merge_same_q: true # 是否合并相邻近似相同产量的流量段
|
|
|
|
|
|
merge_rel_tol: 1.0e-4 # 判断相邻产量相同的相对容差
|
|
|
|
|
|
|
|
|
|
|
|
timegrid_encoding: # 流量制度时间网格编码设置
|
|
|
|
|
|
n_u_points: 256 # 流量制度编码的统一时间网格点数
|
|
|
|
|
|
grid: "log" # 流量制度编码使用的时间网格类型
|
|
|
|
|
|
include_cum: true # 是否在流量编码中加入累计产量通道
|
|
|
|
|
|
include_dq: true # 是否在流量编码中加入产量变化量通道
|
|
|
|
|
|
include_shutin: false # 是否在流量编码中加入关井标志通道
|
|
|
|
|
|
q_eps: 1.0e-12 # 流量归一化时的最小保护值
|
|
|
|
|
|
normalize_mode: "global" # 流量制度编码归一化方式
|
|
|
|
|
|
q_global_max: 5000.0 # 全局产量归一化上限
|
|
|
|
|
|
cum_global_max: 25000000.0 # 累计产量归一化上限
|
|
|
|
|
|
shutin_thr: 1.0e-6 # 关井通道判定阈值
|
|
|
|
|
|
|
|
|
|
|
|
dataset_split: # 训练/验证/测试集划分设置
|
|
|
|
|
|
test_ratio: 0.15 # 测试集比例
|
|
|
|
|
|
val_ratio: 0.15 # 验证集比例
|
|
|
|
|
|
random_seed: 42 # 随机种子,用于复现实验
|
|
|
|
|
|
|
|
|
|
|
|
forward_model: # 正演代理模型结构配置
|
|
|
|
|
|
activation: "gelu" # 网络激活函数类型
|
|
|
|
|
|
norm: "layernorm" # 网络归一化层类型
|
|
|
|
|
|
dropout: 0.10 # Dropout 比例
|
|
|
|
|
|
hidden_dims: [512, 512, 256] # 正演代理模型 MLP 隐藏层维度
|
|
|
|
|
|
|
|
|
|
|
|
training: # 模型训练超参数设置
|
|
|
|
|
|
seed: 42 # 训练随机种子
|
|
|
|
|
|
learning_rate: 1.0e-3 # 初始学习率
|
|
|
|
|
|
weight_decay: 5.0e-4 # 权重衰减系数
|
|
|
|
|
|
batch_size: 256 # 训练批大小
|
|
|
|
|
|
epochs: 220 # 最大训练轮数
|
|
|
|
|
|
patience: 30 # 早停或调度器等待轮数
|
|
|
|
|
|
min_delta: 1.0e-6 # 认为验证集有改进所需的最小变化量
|
|
|
|
|
|
grad_clip_norm: 1.0 # 梯度裁剪范数上限
|
|
|
|
|
|
loss_beta: 0.5 # Huber/SmoothL1 损失的 beta 参数
|
|
|
|
|
|
scheduler: # 学习率调度器设置
|
|
|
|
|
|
type: "plateau" # 学习率调度器类型
|
|
|
|
|
|
factor: 0.5 # 学习率衰减倍数
|
|
|
|
|
|
patience: 8 # 早停或调度器等待轮数
|
|
|
|
|
|
threshold: 1.0e-6 # 调度器判定改进的阈值
|
|
|
|
|
|
cooldown: 0 # 学习率衰减后的冷却轮数
|
|
|
|
|
|
min_lr: 1.0e-6 # 学习率下限
|
|
|
|
|
|
T_max: 50 # 余弦退火调度周期参数
|
|
|
|
|
|
eta_min: 1.0e-6 # 余弦退火最小学习率
|