MemUsage / CPU 优化模型的 GLPK 使用
MemUsage / CPU Usage of GLPK for optimization models
我正在使用名为 GLPK 的求解器优化 2 个 pyomo 能量模型。
当您让求解器通过以下方式写入其输出时:result = optim.solve(model, tee=True)
求解器在 cmd 中给出的输出为:
GLPSOL: GLPK LP/MIP Solver, v4.65
Parameter(s) specified in the command line:
--write /home/okan/Desktop/urbs-oemof/tmpk76ybo_5.glpk.raw --wglp /home/okan/Desktop/urbs-oemof/tmp8qv9hajy.glpk.glp
--cpxlp /home/okan/Desktop/urbs-oemof/tmpa9k8e86c.pyomo.lp
Reading problem data from '/home/okan/Desktop/urbs-oemof/tmpa9k8e86c.pyomo.lp'...
1519 rows, 1155 columns, 3894 non-zeros
9618 lines were read
Writing problem data to '/home/okan/Desktop/urbs-oemof/tmp8qv9hajy.glpk.glp'...
7210 lines were written
GLPK Simplex Optimizer, v4.65
1519 rows, 1155 columns, 3894 non-zeros
Preprocessing...
1159 rows, 1011 columns, 2979 non-zeros
Scaling...
A: min|aij| = 4.705e-03 max|aij| = 7.964e+02 ratio = 1.693e+05
GM: min|aij| = 4.065e-01 max|aij| = 2.460e+00 ratio = 6.052e+00
EQ: min|aij| = 1.652e-01 max|aij| = 1.000e+00 ratio = 6.052e+00
Constructing initial basis...
Size of triangular part is 1156
0: obj = 1.914903944e+07 inf = 8.143e+06 (60)
68: obj = 7.130756139e+10 inf = 0.000e+00 (0)
* 266: obj = 2.358801019e+10 inf = 1.920e-10 (0) 1
OPTIMAL LP SOLUTION FOUND
Time used: 0.0 secs
Memory used: 1.6 Mb (1728515 bytes)
Writing basic solution to '/home/okan/Desktop/urbs-oemof/tmpk76ybo_5.glpk.raw'...
2683 lines were written
我想比较两个模型的 GLPK Memory used
和 Time used
。我如何将此 Memory used
和 Time used
作为 python 中的浮点值?有办法吗?或者你还能给我什么,最终做同样的事情?
我不知道是否有更直接的方法,但这是我从求解器日志中检索信息的方式。:
解决问题,同时将求解器日志文件保存在您以后可以获取的位置。
results = opt.solve(model, logfile='MySolverLogFile.txt')
- 用 python 文件 reader 打开日志文件并检索整个文件作为字符串。
- 在字符串中搜索您的关键字。确保你进行了非常严格的搜索。这意味着,如果您的内存使用情况是
"Memory used: "
,不要只搜索 "Memory"
,搜索整个单词,包括双点和 space 以避免出现错误.
- 通过将文本 "Memory used: " 后找到的值存储到变量中,使其成为已用内存量。
如果您对其进行编码使其接受其他关键字,您将能够检索许多其他信息。但是,如果您更改求解器,则必须更改从求解器日志中检索这些信息的方式。
第 1 步:
result = optim.solve(model, logfile='log.txt', tee=False)
步骤 2、3 和 4:
with open('log.txt', 'r') as log:
mem = log.read().replace('\n', ' ')
mem = float(mem[mem.find('Memory used:')+12:
mem.find('Mb')])
我正在使用名为 GLPK 的求解器优化 2 个 pyomo 能量模型。
当您让求解器通过以下方式写入其输出时:result = optim.solve(model, tee=True)
求解器在 cmd 中给出的输出为:
GLPSOL: GLPK LP/MIP Solver, v4.65
Parameter(s) specified in the command line:
--write /home/okan/Desktop/urbs-oemof/tmpk76ybo_5.glpk.raw --wglp /home/okan/Desktop/urbs-oemof/tmp8qv9hajy.glpk.glp
--cpxlp /home/okan/Desktop/urbs-oemof/tmpa9k8e86c.pyomo.lp
Reading problem data from '/home/okan/Desktop/urbs-oemof/tmpa9k8e86c.pyomo.lp'...
1519 rows, 1155 columns, 3894 non-zeros
9618 lines were read
Writing problem data to '/home/okan/Desktop/urbs-oemof/tmp8qv9hajy.glpk.glp'...
7210 lines were written
GLPK Simplex Optimizer, v4.65
1519 rows, 1155 columns, 3894 non-zeros
Preprocessing...
1159 rows, 1011 columns, 2979 non-zeros
Scaling...
A: min|aij| = 4.705e-03 max|aij| = 7.964e+02 ratio = 1.693e+05
GM: min|aij| = 4.065e-01 max|aij| = 2.460e+00 ratio = 6.052e+00
EQ: min|aij| = 1.652e-01 max|aij| = 1.000e+00 ratio = 6.052e+00
Constructing initial basis...
Size of triangular part is 1156
0: obj = 1.914903944e+07 inf = 8.143e+06 (60)
68: obj = 7.130756139e+10 inf = 0.000e+00 (0)
* 266: obj = 2.358801019e+10 inf = 1.920e-10 (0) 1
OPTIMAL LP SOLUTION FOUND
Time used: 0.0 secs
Memory used: 1.6 Mb (1728515 bytes)
Writing basic solution to '/home/okan/Desktop/urbs-oemof/tmpk76ybo_5.glpk.raw'...
2683 lines were written
我想比较两个模型的 GLPK Memory used
和 Time used
。我如何将此 Memory used
和 Time used
作为 python 中的浮点值?有办法吗?或者你还能给我什么,最终做同样的事情?
我不知道是否有更直接的方法,但这是我从求解器日志中检索信息的方式。:
解决问题,同时将求解器日志文件保存在您以后可以获取的位置。
results = opt.solve(model, logfile='MySolverLogFile.txt')
- 用 python 文件 reader 打开日志文件并检索整个文件作为字符串。
- 在字符串中搜索您的关键字。确保你进行了非常严格的搜索。这意味着,如果您的内存使用情况是
"Memory used: "
,不要只搜索"Memory"
,搜索整个单词,包括双点和 space 以避免出现错误. - 通过将文本 "Memory used: " 后找到的值存储到变量中,使其成为已用内存量。
如果您对其进行编码使其接受其他关键字,您将能够检索许多其他信息。但是,如果您更改求解器,则必须更改从求解器日志中检索这些信息的方式。
第 1 步:
result = optim.solve(model, logfile='log.txt', tee=False)
步骤 2、3 和 4:
with open('log.txt', 'r') as log:
mem = log.read().replace('\n', ' ')
mem = float(mem[mem.find('Memory used:')+12:
mem.find('Mb')])