diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm
index 2bab4b7..837aac1 100644
Binary files a/Bin/Config/Lang/cn/nmNum_cn.qm and b/Bin/Config/Lang/cn/nmNum_cn.qm differ
diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts
index 75552d4..1c8383d 100644
--- a/Bin/Config/Lang/cn/nmNum_cn.ts
+++ b/Bin/Config/Lang/cn/nmNum_cn.ts
@@ -638,6 +638,389 @@ Reason: %1
代理评分服务器标准错误输出(stderr):%1
+
+ nmCalculationAutoFitLM
+
+ === User Stop Request Received ===
+ === 用户停止请求已接收 ===
+
+
+ Gracefully stopping LM automatic fitting...
+ 正在平稳停止 LM 自动拟合...
+
+
+ Waiting for current solver evaluation to stop...
+ 正在等待当前求解器评估停止...
+
+
+ LM automatic fitting stop request processed
+ LM 自动拟合停止请求已处理
+
+
+ Stop request received but optimization is not running
+ 收到停止请求,但优化未运行
+
+
+ LM fitting trace: %1
+ LM 拟合跟踪:%1
+
+
+ LM fitting trace metadata: %1
+ LM 拟合跟踪元数据:%1
+
+
+ === LM Run Summary ===
+ === LM 运行摘要 ===
+
+
+ Stop reason: %1
+ 停止原因:%1
+
+
+ Result: %1, final error=%2, iterations=%3, evaluations=%4 (successful=%5, failed=%6)
+ 结果:%1,最终误差=%2,迭代次数=%3,评估次数=%4(成功=%5,失败=%6)
+
+
+ SUCCESS
+ 成功
+
+
+ FAILED
+ 失败
+
+
+ Artifacts: trace=%1
+ 产物:跟踪=%1
+
+
+ Artifacts: trace_meta=%1
+ 产物:跟踪元数据=%1
+
+
+ ERROR: Failed to load configuration from data manager
+ 错误:从数据管理器加载配置失败
+
+
+ Algorithm: LM
+ 算法:LM
+
+
+ Enabled parameters count: %1
+ 启用参数数量:%1
+
+
+ ERROR: No parameters enabled for optimization
+ 错误:没有启用优化参数
+
+
+ ERROR: Target LogLog data is empty or insufficient
+ 错误:目标双对数数据为空或不足
+
+
+ ERROR: Target LogLog data arrays have inconsistent sizes
+ 错误:目标双对数数据数组大小不一致
+
+
+ ERROR: Target well name is empty
+ 错误:目标井名称为空
+
+
+ Target data validation passed (%1 data points)
+ 目标数据验证通过(%1 个数据点)
+
+
+ === Evaluating Initial Solution (Elite Protection) ===
+ === 评估初始解 ===
+
+
+ Initial parameters:
+ 初始参数:
+
+
+ Starting initial solution evaluation...
+ 开始初始解评估...
+
+
+ Initial solution evaluation successful
+ 初始解评估成功
+
+
+ Initial Error: %1
+ 初始误差:%1
+
+
+ Initial solution evaluation failed
+ 初始解评估失败
+
+
+ Exception during initial solution evaluation
+ 初始解评估期间出现异常
+
+
+ Critical exception in automatic fitting: %1
+ 自动拟合发生严重异常:%1
+
+
+ CRITICAL ERROR: %1
+ 严重错误:%1
+
+
+ Unknown critical exception in automatic fitting
+ 自动拟合发生未知严重异常
+
+
+ CRITICAL ERROR: Unknown exception in automatic fitting
+ 严重错误:自动拟合发生未知异常
+
+
+ Applying optimized parameters to model...
+ 正在将优化参数应用到模型...
+
+
+ Final full-field calculation skipped after user stop
+ 用户停止后已跳过最终全场计算
+
+
+ Running final full-field calculation with optimized parameters...
+ 正在使用优化参数运行最终全场计算...
+
+
+ Final full-field calculation completed successfully
+ 最终全场计算成功完成
+
+
+ Final full-field calculation stopped by user
+ 最终全场计算已被用户停止
+
+
+ Optimized parameters were found, but the final full-field calculation failed
+ 已找到优化参数,但最终全场计算失败
+
+
+ ERROR: Final full-field calculation failed
+ 错误:最终全场计算失败
+
+
+ === Optimization Results ===
+ === 优化结果 ===
+
+
+ Final error: %1
+ 最终误差:%1
+
+
+ Total iterations: %1
+ 总迭代次数:%1
+
+
+ Total evaluations: %1 (successful: %2)
+ 总评估次数:%1(成功:%2)
+
+
+ Optimized parameters:
+ 优化参数:
+
+
+ Parameters and full-field results applied successfully to data manager
+ 参数和全场计算结果已成功应用到数据管理器
+
+
+ Optimized parameters applied to data manager
+ 优化参数已应用到数据管理器
+
+
+ ERROR: Failed to apply final parameters: %1
+ 错误:应用最终参数失败:%1
+
+
+ ERROR: Unknown error applying final parameters
+ 错误:应用最终参数时出现未知错误
+
+
+ Target achieved. Best error: %1, Iterations: %2
+ 达到目标。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING SUCCESSFUL ===
+ === LM 自动拟合成功 ===
+
+
+ Automatic fitting converged to a stable solution. Best error: %1, Iterations: %2
+ 自动拟合已收敛到稳定解。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING CONVERGED ===
+ === LM 自动拟合已收敛 ===
+
+
+ Automatic fitting reached a local optimum. Best error: %1, Iterations: %2
+ 自动拟合达到局部最优。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING - LOCAL OPTIMUM ===
+ === LM 自动拟合 - 局部最优 ===
+
+
+ Max iterations reached. Best error: %1, Iterations: %2
+ 达到最大迭代次数。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING - MAX ITERATIONS ===
+ === LM 自动拟合 - 达到最大迭代次数 ===
+
+
+ Best error: %1, Iterations: %2
+ 最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING STOPPED BY USER ===
+ === LM 自动拟合已被用户停止 ===
+
+
+ Automatic fitting failed due to consecutive failures. Best error: %1, Iterations: %2
+ 自动拟合因连续失败而终止。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING FAILED ===
+ === LM 自动拟合失败 ===
+
+
+ Automatic fitting ended unexpectedly. Best error: %1, Iterations: %2
+ 自动拟合意外结束。最佳误差:%1,迭代次数:%2
+
+
+ === LM AUTOMATIC FITTING - UNKNOWN END ===
+ === LM 自动拟合 - 未知结束 ===
+
+
+ No valid parameters are available for trust-region fitting
+ 没有可用于 LM 拟合的有效参数
+
+
+ The initial solution and parameter-range midpoint are both invalid
+ 初始解和参数范围中点均无效
+
+
+ === Starting LM Main Loop ===
+ === 开始 LM 主循环 ===
+
+
+ LM starting point error: %1; evaluation budget: %2
+ LM 起点误差:%1;最大评估次数:%2
+
+
+ No effective improvement for %1 consecutive steps; rebuilding sensitivity model for confirmation
+ 连续 %1 次无有效改善,正在重建灵敏度模型进行确认
+
+
+ Effective improvement threshold: max(%1, %2% of baseline error); %3 consecutive ineffective steps trigger convergence confirmation
+ 有效改善阈值:取 %1 与基准误差的 %2% 中较大值;连续 %3 次无有效改善后进行收敛确认
+
+
+ Sensitivity probe accepted: error reduced to %1
+ 已接受灵敏度试算点,误差降至 %1
+
+
+ Sensitivity model rebuilt: %1/%2 parameter columns valid
+ 灵敏度模型重建完成:%1/%2 个参数列有效
+
+
+ Sensitivity rebuild produced no effective improvement; local convergence detected
+ 灵敏度重建后仍无有效改善,判定为局部收敛
+
+
+ vertical deviation
+ 上下偏差
+
+
+ horizontal deviation
+ 左右偏差
+
+
+ shape deviation
+ 形状偏差
+
+
+ total error
+ 总误差
+
+
+ Iteration %1: focus=%2, parameters=%3, error=%4, result=%5
+ 迭代 %1:关注=%2,参数个数=%3,误差=%4,结果=%5
+
+
+ accepted
+ 接受
+
+
+ rejected
+ 拒绝
+
+
+ No initial solution for elite protection
+ 没有可用于精英保护的初始解
+
+
+ === Final Result Validation (Elite Protection) ===
+ === 最终结果验证 ===
+
+
+ Comparing results: Initial=%1, Final=%2
+ 比较结果:初始=%1,最终=%2
+
+
+ Improvement: %1 (%2%)
+ 改善:%1(%2%)
+
+
+ Elite protection triggered: final result is invalid or worse than initial
+ 触发精英保护:最终结果无效或差于初始解
+
+
+ Restoring initial solution as final result
+ 正在恢复初始解作为最终结果
+
+
+ Initial solution restored successfully
+ 初始解恢复成功
+
+
+ Final result validated - solution is not worse than initial
+ 最终结果验证通过,拟合结果不差于初始解
+
+
+ Target error achieved
+ 达到目标误差
+
+
+ Algorithm converged to stable solution
+ 算法已收敛到稳定解
+
+
+ Local optimum detected
+ 检测到局部最优
+
+
+ Maximum iterations reached
+ 达到最大迭代次数
+
+
+ Stopped by user request
+ 根据用户请求停止
+
+
+ Too many consecutive failures
+ 连续失败次数过多
+
+
+ Optimization failed
+ 优化失败
+
+
+ Unknown reason
+ 未知原因
+
+
nmCalculationSolver
@@ -3446,6 +3829,12 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We
PSO求解完成:
+
+ %1 Optimization completed:
+
+ %1 拟合完成:
+
+
Best Error: %1
@@ -3476,6 +3865,12 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We
PSO拟合被用户强行终止:
+
+ %1 Optimization stopped by user:
+
+ %1 拟合已被用户停止:
+
+
Current parameters have been applied to the model.
当前参数已应用到模型。
@@ -3678,6 +4073,10 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We
GA auto fitting started
遗传法自动拟合开始
+
+ %1 auto fitting started
+ %1 自动拟合开始
+
%1 fitting parameters set: MaxIterations=%2, TargetAccuracy=%3, TargetWell=%4
%1 拟合参数设置:最大迭代次数=%2,目标精度=%3,目标井=%4
diff --git a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp
index cccb04c..efff34d 100644
--- a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp
@@ -803,7 +803,11 @@ void nmCalculationAutoFitLM::initializeTraceFile()
writeTraceHeader();
writeTraceMetaFile();
- emit logMessageGenerated(tr("LM automatic fitting trace: %1").arg(m_traceFilePath));
+ emit logMessageGenerated(tr("LM fitting trace: %1").arg(m_traceFilePath));
+ if(!m_traceMetaFilePath.isEmpty()) {
+ emit logMessageGenerated(
+ tr("LM fitting trace metadata: %1").arg(m_traceMetaFilePath));
+ }
}
void nmCalculationAutoFitLM::closeTraceFile()
@@ -990,7 +994,7 @@ void nmCalculationAutoFitLM::emitRunSummary(bool success, StopReasonLM finalReas
emit logMessageGenerated(tr("Stop reason: %1").arg(getStopReasonDescription(finalReason)));
emit logMessageGenerated(
tr("Result: %1, final error=%2, iterations=%3, evaluations=%4 (successful=%5, failed=%6)")
- .arg(success ? "SUCCESS" : "FAILED")
+ .arg(success ? tr("SUCCESS") : tr("FAILED"))
.arg(m_globalBestFitness, 0, 'e', 4)
.arg(m_currentIteration + 1)
.arg(m_totalEvaluations)
@@ -1179,7 +1183,7 @@ bool nmCalculationAutoFitLM::startAutoFitting()
return false;
}
- emit logMessageGenerated(tr("Algorithm: Finite Difference + LM"));
+ emit logMessageGenerated(tr("Algorithm: LM"));
const int enabledParams = getEnabledParameterCount();
emit logMessageGenerated(tr("Enabled parameters count: %1").arg(enabledParams));
@@ -1209,8 +1213,8 @@ bool nmCalculationAutoFitLM::startAutoFitting()
}
emit logMessageGenerated(
- tr("Candidate evaluation mode: solve all wells, retain target well '%1' only")
- .arg(m_targetWellName));
+ tr("Target data validation passed (%1 data points)")
+ .arg(m_targetLogLogData[0].size()));
// resetOptimizer() 会清空运行状态,因此先保存从 DataManager 提取的初始值。
QVector savedInitialValues = m_initialValues;
@@ -1235,6 +1239,8 @@ bool nmCalculationAutoFitLM::startAutoFitting()
emit logMessageGenerated(paramStr);
try {
+ emit logMessageGenerated(
+ tr("Starting initial solution evaluation..."));
QTime initialEvalTimer;
initialEvalTimer.start();
m_totalEvaluations++;
@@ -1747,8 +1753,9 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting()
}
restoreEvaluationState(current);
+ emit logMessageGenerated(tr("=== Starting LM Main Loop ==="));
emit logMessageGenerated(
- tr("Trust-region initial error: %1; evaluation budget: %2")
+ tr("LM starting point error: %1; evaluation budget: %2")
.arg(current.fitness, 0, 'e', 4)
.arg(maximumEvaluations));
@@ -2459,10 +2466,21 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting()
: QString("rejected_%1").arg(componentName),
&candidate.breakdown);
+ QString componentDisplayName = componentName;
+ if(componentName == "vertical") {
+ componentDisplayName = tr("vertical deviation");
+ } else if(componentName == "horizontal") {
+ componentDisplayName = tr("horizontal deviation");
+ } else if(componentName == "shape") {
+ componentDisplayName = tr("shape deviation");
+ } else if(componentName == "total") {
+ componentDisplayName = tr("total error");
+ }
+
emit logMessageGenerated(
tr("Iteration %1: focus=%2, parameters=%3, error=%4, result=%5")
.arg(iteration + 1)
- .arg(componentName)
+ .arg(componentDisplayName)
.arg(selectedColumns.size())
.arg(candidate.fitness, 0, 'e', 4)
.arg(accepted ? tr("accepted") : tr("rejected")));