gpt4 book ai didi

c++ - 如何复制 SoPlex 模型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:22 26 4
gpt4 key购买 nike

我正在使用 SoPlex 设置 lp 并解决它。然后我尝试复制原始 lp 并修改它。我的代码如下所示:

int main()
{
using namespase soplex;
SoPlex spx;
// add columns
// add rows
auto status = spx.optimize();

SoPlex copy(spx);
// modify some columns

status = copy.optimize();

return 0;
}

当我在 valgrind 中运行我的代码时,我注意到 SoPlex 复制构造函数中的方法分配的内存没有被释放。

SoPlex 内部是否存在内存泄漏,或者我没有正确使用它?

最佳答案

您正在正确使用复制功能。 SoPlex 中确实存在内存泄漏,将在下一个版本中修复。

与此同时,您可以尝试为 SoPlex-4.0.1 应用此补丁:

diff --git a/src/soplex/slufactor.cpp b/src/soplex/slufactor.cpp
index ae41604..a3314d8 100644
--- a/src/soplex/slufactor.cpp
+++ b/src/soplex/slufactor.cpp
@@ -1230,8 +1230,6 @@ SLUFactor::SLUFactor(const SLUFactor& old)
l.rperm = 0;

solveCount = 0;
- solveTime = TimerFactory::createTimer(timerType);
- factorTime = TimerFactory::createTimer(timerType);

try
{
@@ -1326,16 +1324,23 @@ void SLUFactor::freeAll()

if(l.rperm)
spx_free(l.rperm);
+
+ if(solveTime)
+ {
+ solveTime->~Timer();
+ spx_free(solveTime);
+ }
+
+ if(factorTime)
+ {
+ factorTime->~Timer();
+ spx_free(factorTime);
+ }
}

SLUFactor::~SLUFactor()
{
freeAll();
-
- solveTime->~Timer();
- factorTime->~Timer();
- spx_free(solveTime);
- spx_free(factorTime);
}

static Real betterThreshold(Real th)
diff --git a/src/soplex/spxbasis.cpp b/src/soplex/spxbasis.cpp
index 6370e89..40d201b 100644
--- a/src/soplex/spxbasis.cpp
+++ b/src/soplex/spxbasis.cpp
@@ -1363,6 +1363,7 @@ SPxBasis::~SPxBasis()
factor = 0;
}

+ theTime->~Timer();
spx_free(theTime);
}

关于c++ - 如何复制 SoPlex 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55463066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com