模型代码增加参数

feature/Model-20260625
lvjunjie 4 weeks ago
parent 11833dc5a1
commit 5e731a3a3b

@ -63,6 +63,7 @@ DEFAULT_SINGLE_CASE = {
"wellboreC": 0.01,
"phi": 0.0245,
"h": 9.144,
"Ct": 1.0e-3,
"Cf": 0.0004315,
},
}
@ -100,6 +101,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--wellboreC", type=float, default=DEFAULT_SINGLE_CASE["params"]["wellboreC"])
parser.add_argument("--phi", type=float, default=DEFAULT_SINGLE_CASE["params"]["phi"])
parser.add_argument("--h", type=float, default=DEFAULT_SINGLE_CASE["params"]["h"])
parser.add_argument("--Ct", type=float, default=DEFAULT_SINGLE_CASE["params"]["Ct"])
parser.add_argument("--Cf", type=float, default=DEFAULT_SINGLE_CASE["params"]["Cf"])
parser.add_argument(
"--well-index",
@ -301,6 +303,7 @@ def build_params_from_args(args: argparse.Namespace, cfg: Config, schedule: Sche
wellboreC=float(args.wellboreC),
phi=float(args.phi),
h=float(args.h),
Ct=float(args.Ct),
Cf=resolve_cf(args, cfg),
schedule=schedule,
)
@ -412,7 +415,7 @@ def predict_surrogate_curve(
# 构建参数特征向量
# 顺序必须与训练阶段保持一致
params_vec = np.asarray(
[params.k, params.skin, params.wellboreC, params.phi, params.h, params.Cf],
[params.k, params.skin, params.wellboreC, params.phi, params.h, params.Ct, params.Cf],
dtype=np.float32,
).reshape(1, -1)
# 将流量制度 schedule 编码成模型输入向量
@ -464,7 +467,7 @@ def plot_comparison(
fig.suptitle(
"Solver vs Surrogate\n"
f"k={params.k:.6g}, skin={params.skin:.6g}, wellboreC={params.wellboreC:.6g}, "
f"phi={params.phi:.6g}, h={params.h:.6g}, Cf={params.Cf:.6g}\n"
f"phi={params.phi:.6g}, h={params.h:.6g}, Ct={params.Ct:.6g}, Cf={params.Cf:.6g}\n"
f"sectionIndex={schedule.sectionIndex}, timeQ={schedule.timeQ}, q={schedule.q}\n"
f"use_schedule={use_schedule}, model={model_path.name}, "
f"Overall RMSE={overall['rmse']:.4f}, MAE={overall['mae']:.4f}, "
@ -578,6 +581,7 @@ def main() -> None:
"wellboreC": params.wellboreC,
"phi": params.phi,
"h": params.h,
"Ct": params.Ct,
"Cf": params.Cf,
},
"schedule": {

@ -50,6 +50,7 @@ THETA_STAR = {
"wellboreC": 0.03024150790038185,
"phi": 0.2736409306526184,
"h": 21.499309979069142,
"Ct": 1.0e-3,
"Cf": 4.315e-4,
}
@ -91,6 +92,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--wellboreC", type=float, default=THETA_STAR["wellboreC"])
parser.add_argument("--phi", type=float, default=THETA_STAR["phi"])
parser.add_argument("--h", type=float, default=THETA_STAR["h"])
parser.add_argument("--Ct", type=float, default=THETA_STAR["Ct"])
parser.add_argument("--Cf", type=float, default=THETA_STAR["Cf"])
return parser.parse_args()
@ -120,6 +122,7 @@ def make_theta_params(args: argparse.Namespace, schedule: Schedule) -> Params:
wellboreC=float(args.wellboreC),
phi=float(args.phi),
h=float(args.h),
Ct=float(args.Ct),
Cf=float(args.Cf),
schedule=schedule,
)
@ -469,6 +472,7 @@ def main() -> None:
"wellboreC": cand.wellboreC,
"phi": cand.phi,
"h": cand.h,
"Ct": cand.Ct,
"Cf": cand.Cf,
"solver_objective": solver_obj["dual_log_objective"],
"solver_p_obj": solver_obj["log_pressure_objective"],
@ -490,6 +494,7 @@ def main() -> None:
"wellboreC": cand.wellboreC,
"phi": cand.phi,
"h": cand.h,
"Ct": cand.Ct,
"Cf": cand.Cf,
}
)
@ -542,6 +547,7 @@ def main() -> None:
"wellboreC": float(args.wellboreC),
"phi": float(args.phi),
"h": float(args.h),
"Ct": float(args.Ct),
"Cf": float(args.Cf),
},
"n_q_cases_generated": int(len(q_cases)),

@ -39,7 +39,7 @@ from src.data.params import Params, Schedule
from src.evaluation.autofit_objective import dual_log_objective
PARAM_COLUMNS = ["k", "skin", "wellboreC", "phi", "h", "Cf"]
PARAM_COLUMNS = ["k", "skin", "wellboreC", "phi", "h", "Ct", "Cf"]
DEFAULT_KEEP_FRACS = [0.5, 0.6, 0.7]
@ -165,6 +165,7 @@ def params_from_row(row: dict) -> Params:
wellboreC=values["wellboreC"],
phi=values["phi"],
h=values["h"],
Ct=values["Ct"],
Cf=values["Cf"],
)

@ -34,7 +34,7 @@ from src.data.params import Params, Schedule
from src.evaluation.autofit_objective import dual_log_objective
PARAM_COLUMNS = ["k", "skin", "wellboreC", "phi", "h", "Cf"]
PARAM_COLUMNS = ["k", "skin", "wellboreC", "phi", "h", "Ct", "Cf"]
def parse_args() -> argparse.Namespace:
@ -44,7 +44,7 @@ def parse_args() -> argparse.Namespace:
"--candidates",
required=True,
type=str,
help="候选粒子 CSV包含 particle_id,k,skin,wellboreC,phi,h,Cf",
help="候选粒子 CSV包含 particle_id,k,skin,wellboreC,phi,h,Ct,Cf",
)
parser.add_argument(
"--trace-meta",
@ -127,6 +127,7 @@ def params_from_row(row: dict) -> Params:
wellboreC=to_float(row.get("wellboreC")),
phi=to_float(row.get("phi")),
h=to_float(row.get("h")),
Ct=to_float(row.get("Ct")),
Cf=to_float(row.get("Cf")),
)

@ -44,6 +44,7 @@ DEFAULT_CASE = {
"wellboreC": 0.01,
"phi": 0.0245,
"h": 9.144,
"Ct": 1.0e-3,
"Cf": 0.0004315,
},
}
@ -82,6 +83,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--wellboreC", type=float, default=DEFAULT_CASE["params"]["wellboreC"])
parser.add_argument("--phi", type=float, default=DEFAULT_CASE["params"]["phi"])
parser.add_argument("--h", type=float, default=DEFAULT_CASE["params"]["h"])
parser.add_argument("--Ct", type=float, default=DEFAULT_CASE["params"]["Ct"])
parser.add_argument("--Cf", type=float, default=DEFAULT_CASE["params"]["Cf"])
return parser.parse_args()
@ -151,6 +153,7 @@ def build_params_from_args(args: argparse.Namespace, schedule: Schedule) -> Para
wellboreC=float(args.wellboreC),
phi=float(args.phi),
h=float(args.h),
Ct=float(args.Ct),
Cf=float(args.Cf),
schedule=schedule,
)
@ -197,7 +200,7 @@ def predict_surrogate_curve(
param_transform = param_feature_transform_from_meta(processed.get("meta", {}))
params_vec = np.asarray(
[params.k, params.skin, params.wellboreC, params.phi, params.h, params.Cf],
[params.k, params.skin, params.wellboreC, params.phi, params.h, params.Ct, params.Cf],
dtype=np.float32,
).reshape(1, -1)
schedule_vec = build_schedule_vector(cfg, schedule).reshape(1, -1)
@ -314,6 +317,7 @@ def _sample_local_candidates(cfg: Config, base: Params, n: int, seed: int, span_
"wellboreC": float(base.wellboreC),
"phi": float(base.phi),
"h": float(base.h),
"Ct": float(base.Ct),
"Cf": float(base.Cf),
}
@ -352,6 +356,7 @@ def _sample_local_candidates(cfg: Config, base: Params, n: int, seed: int, span_
wellboreC=cand["wellboreC"],
phi=cand["phi"],
h=cand["h"],
Ct=cand["Ct"],
Cf=cand["Cf"],
schedule=base.schedule,
)
@ -367,6 +372,7 @@ def _params_to_dict(params: Params) -> dict:
"wellboreC": float(params.wellboreC),
"phi": float(params.phi),
"h": float(params.h),
"Ct": float(params.Ct),
"Cf": float(params.Cf),
}
@ -487,6 +493,7 @@ def main() -> None:
"wellboreC": cand.wellboreC,
"phi": cand.phi,
"h": cand.h,
"Ct": cand.Ct,
"Cf": cand.Cf,
"solver_objective": solver_obj["dual_log_objective"],
"solver_p_obj": solver_obj["log_pressure_objective"],
@ -505,7 +512,7 @@ def main() -> None:
"[warn] candidate attempt "
f"{attempt_idx} skipped: {exc} | "
f"k={cand.k:.6g}, skin={cand.skin:.6g}, C={cand.wellboreC:.6g}, "
f"phi={cand.phi:.6g}, h={cand.h:.6g}, Cf={cand.Cf:.6g}"
f"phi={cand.phi:.6g}, h={cand.h:.6g}, Ct={cand.Ct:.6g}, Cf={cand.Cf:.6g}"
)
finally:
if shared_runner is None:
@ -544,6 +551,7 @@ def main() -> None:
"wellboreC": target_params.wellboreC,
"phi": target_params.phi,
"h": target_params.h,
"Ct": target_params.Ct,
"Cf": target_params.Cf,
},
"schedule": {
@ -580,6 +588,7 @@ def main() -> None:
"wellboreC",
"phi",
"h",
"Ct",
"Cf",
"solver_objective",
"solver_p_obj",
@ -600,7 +609,7 @@ def main() -> None:
with open(failed_csv_path, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(
f,
fieldnames=["attempt_id", "reason", "k", "skin", "wellboreC", "phi", "h", "Cf"],
fieldnames=["attempt_id", "reason", "k", "skin", "wellboreC", "phi", "h", "Ct", "Cf"],
)
writer.writeheader()
writer.writerows(failed_rows)

@ -255,7 +255,7 @@ def main() -> None:
print(
f"[target {target_id:03d}] "
f"k={target_params.k:.6g}, skin={target_params.skin:.6g}, "
f"C={target_params.wellboreC:.6g}, phi={target_params.phi:.6g}, h={target_params.h:.6g}, "
f"C={target_params.wellboreC:.6g}, phi={target_params.phi:.6g}, h={target_params.h:.6g}, Ct={target_params.Ct:.6g}, "
f"section={target_params.schedule.sectionIndex}, spans={span_fracs}"
)
@ -303,6 +303,7 @@ def main() -> None:
"wellboreC": cand.wellboreC,
"phi": cand.phi,
"h": cand.h,
"Ct": cand.Ct,
"Cf": cand.Cf,
"solver_objective": solver_obj["dual_log_objective"],
"solver_p_obj": solver_obj["log_pressure_objective"],
@ -329,6 +330,7 @@ def main() -> None:
"target_wellboreC": target_params.wellboreC,
"target_phi": target_params.phi,
"target_h": target_params.h,
"target_Ct": target_params.Ct,
"target_Cf": target_params.Cf,
"target_sectionIndex": int(target_params.schedule.sectionIndex),
"target_timeQ_json": json.dumps(target_params.schedule.timeQ),

@ -415,7 +415,7 @@ def _worker_simulate_parallel(args):
wellboreC=float(params_dict["wellboreC"]),
phi=float(params_dict["phi"]),
h=float(params_dict["h"]),
Ct=float(params_dict.get("Ct", 1.0e-3)),
Ct=float(params_dict["Ct"]),
Cf=float(params_dict["Cf"]),
schedule=None,
)

@ -73,8 +73,8 @@ class Params:
wellboreC: float
phi: float
h: float
Ct: float = 1.0e-3
Cf: float = 4.315e-4
Ct: float
Cf: float
schedule: Optional[Schedule] = None
def to_dict(self) -> Dict[str, float]:

@ -187,10 +187,7 @@ def preprocess_dataset(
schedule_meta_names = _decode_attr_list(f.attrs.get("schedule_meta_names"))
source_name_vocab = _decode_attr_list(f.attrs.get("source_name_vocab"))
if param_names is None:
if x_params.shape[1] == 6:
param_names = ["k", "skin", "wellboreC", "phi", "h", "Cf"]
elif x_params.shape[1] == 7:
param_names = ["k", "skin", "wellboreC", "phi", "h", "Ct", "Cf"]
param_names = ["k", "skin", "wellboreC", "phi", "h", "Ct", "Cf"]
schedule_meta = _ensure_2d("schedule_meta", f["schedule_meta"][:]) if "schedule_meta" in f else None
family_name = _read_optional_string_dataset(f, "family_name")

Loading…
Cancel
Save