From a0d3fc7c89e3542e3992ae8616de535d8139e1a8 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Tue, 25 Aug 2026 15:41:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=9F=E5=90=88=E5=90=8E=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=B1=82=E8=A7=A3=E5=99=A8=E6=80=BB=E6=AC=A1?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 117004 -> 117052 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 4 ++-- .../nmCalculation/nmCalculationAutoFitLM.h | 1 + .../nmCalculation/nmCalculationAutoFitPSO.h | 1 + .../nmCalculation/nmCalculationAutoFitLM.cpp | 6 ++++++ .../nmCalculation/nmCalculationAutoFitPSO.cpp | 7 ++++++- .../nmSubWxs/nmWxAutomaticFittingStart.cpp | 10 +++++++--- 7 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 837aac1b49a26efb4ae8668ef02c31b6eca4f4dd..bf175abad676ea5318c025f10666a7f2a0fcc157 100644 GIT binary patch delta 5597 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 %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)); } }