diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 837aac1..bf175ab 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 1c8383d..78fc121 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -4170,8 +4170,8 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We === %1 拟合会话开始于 %2 === - Total fitting time: %1 s (%2 min %3 s) - 拟合总耗时:%1 s (%2 min %3 s) + Total fitting time: %1 s (%2 min %3 s), total solver calls: %4 + 拟合总耗时:%1 s (%2 min %3 s),共调用求解器 %4 次 Fitting Curve diff --git a/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h b/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h index 5621d10..71e22de 100644 --- a/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h +++ b/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h @@ -83,6 +83,7 @@ public: QString getLastError() const; bool isRunning() const; int getCurrentIteration() const; + int getTotalEvaluations() const; void resetOptimizer(); void setTargetWellName(const QString& wellName); diff --git a/Include/nmNum/nmCalculation/nmCalculationAutoFitPSO.h b/Include/nmNum/nmCalculation/nmCalculationAutoFitPSO.h index e59db09..cc794be 100644 --- a/Include/nmNum/nmCalculation/nmCalculationAutoFitPSO.h +++ b/Include/nmNum/nmCalculation/nmCalculationAutoFitPSO.h @@ -99,6 +99,7 @@ public: QString getLastError() const; bool isRunning() const; int getCurrentIteration() const; + int getTotalEvaluations() const; void resetOptimizer(); void setPSOTargetWellName(const QString& wellName); diff --git a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp index efff34d..e0a15e6 100644 --- a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp @@ -716,6 +716,12 @@ int nmCalculationAutoFitLM::getCurrentIteration() const return m_currentIteration; } +int nmCalculationAutoFitLM::getTotalEvaluations() const +{ + // 返回本轮拟合实际调用真实求解器的总次数,供完成日志展示。 + return m_totalEvaluations; +} + QVector nmCalculationAutoFitLM::getBestSolution() const { // 返回紧凑的“启用参数向量”,顺序与 m_enabledParamIndices 一致。 diff --git a/Src/nmNum/nmCalculation/nmCalculationAutoFitPSO.cpp b/Src/nmNum/nmCalculation/nmCalculationAutoFitPSO.cpp index d0deda2..bb098bb 100644 --- a/Src/nmNum/nmCalculation/nmCalculationAutoFitPSO.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationAutoFitPSO.cpp @@ -778,6 +778,12 @@ int nmCalculationAutoFitPSO::getCurrentIteration() const return m_currentIteration; } +int nmCalculationAutoFitPSO::getTotalEvaluations() const +{ + // 返回本轮拟合实际调用真实求解器的总次数,供完成日志展示。 + return m_totalEvaluations; +} + QVector nmCalculationAutoFitPSO::getBestSolution() const { // 返回紧凑的“启用参数向量”,顺序与 m_enabledParamIndices 一致。 @@ -3597,7 +3603,6 @@ void nmCalculationAutoFitPSO::updateParticle(int particleIndex) particle.evaluatedThisIteration = true; particle.lastEvaluationSuccess = true; particle.screeningDecision = "initial_solution_cache"; - emit logMessageGenerated(tr("Particle 1 reused the verified initial solution")); } else { QTime evalTimer; evalTimer.start(); diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFittingStart.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFittingStart.cpp index 4ae62a2..edd6ccd 100644 --- a/Src/nmNum/nmSubWxs/nmWxAutomaticFittingStart.cpp +++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFittingStart.cpp @@ -787,12 +787,16 @@ void nmWxAutomaticfittingStart::onFittingFinished(bool success, const QString& m int minutes = static_cast(seconds / 60.0); double remainSec = seconds - minutes * 60.0; + const int totalEvaluations = m_autoFitterLM + ? m_autoFitterLM->getTotalEvaluations() + : (m_autoFitterPSO ? m_autoFitterPSO->getTotalEvaluations() : 0); - // 同时给总秒数和分秒 - addLogMessage(tr("Total fitting time: %1 s (%2 min %3 s)") + // 同时显示总秒数、分秒和本轮真实求解器调用次数。 + addLogMessage(tr("Total fitting time: %1 s (%2 min %3 s), total solver calls: %4") .arg(seconds, 0, 'f', 2) .arg(minutes) - .arg(remainSec, 0, 'f', 2)); + .arg(remainSec, 0, 'f', 2) + .arg(totalEvaluations)); } }