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));
}
}