MemUsage / CPU Использование GLPK для моделей оптимизации - PullRequest
0 голосов
/ 14 января 2019

Я оптимизирую две модели энергии пиомо с помощью решателя под названием GLPK.

Когда вы разрешаете solver записывать свой вывод через: 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

Я хотел бы сравнить Memory used и Time used GLPK от обеих моделей. Как бы я получить это Memory used и Time used как значения с плавающей точкой в ​​Python? Есть ли способ? или что еще вы могли бы предложить мне, в конце концов делает то же самое?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Шаг 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')])
0 голосов
/ 17 января 2019

Я не знаю, есть ли более прямой путь, но именно так я получаю информацию из журналов решателя .:

  1. Решите проблему, сохранив файл журнала решателя в месте, которое вы сможете получить позже.

    results = opt.solve(model, logfile='MySolverLogFile.txt')
    
  2. Открыть файл журнала с помощью программы чтения файлов Python и получить весь файл в виде строки.
  3. Поиск в строке по вашему ключевому слову. Убедитесь, что вы делаете очень строгий поиск. Это означает, что если ваша память используется как "Memory used: ", не только ищите "Memory", ищите все слово, включая двойные точки и пробел, чтобы избежать неправильных вхождений.
  4. Задайте значение, найденное после текста «Используемая память:» количество использованной памяти, сохранив его в переменной.

Вы сможете получить много другой информации, если вы закодируете ее так, чтобы она принимала другие ключевые слова. Но если вы смените солвер, вам придется изменить способ получения этой информации из журнала солвера.

...