-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmip_02_extract_matrices.py
31 lines (27 loc) · 1.24 KB
/
mip_02_extract_matrices.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import subprocess
import sys
import os
try:
os.mkdir('mip_matrices')
except:
pass
CMR_BUILD = './build'
CMR_EXTRACT_GUROBI = CMR_BUILD + '/cmr-extract-gurobi'
CMR_K_ARY = CMR_BUILD + '/cmr-k-ary'
CMR_MATRIX = CMR_BUILD + '/cmr-matrix'
for mip in sys.argv[1:]:
if mip[-7:] == '.mps.gz':
base = mip[:-7]
else:
base = mip
base = os.path.basename(base)
subprocess.call(f'{CMR_EXTRACT_GUROBI} {mip} -o sparse > {base}.sparse', shell=True)
subprocess.call(f'head -n 1 {base}.sparse > mip_matrices/{base}.original.header', shell=True)
subprocess.call(f'{CMR_K_ARY} {base}.sparse -R {base}.submat -i sparse -t', shell=True)
print(f'Extracting actual submatrix of {base}.sparse according to {base}.submat.', flush=True)
subprocess.call(f'{CMR_MATRIX} {base}.sparse -S {base}.submat -i sparse -d - | gzip > mip_matrices/{base}.ternary.sparse.gz', shell=True)
subprocess.call(f'{CMR_K_ARY} {base}.sparse -R {base}.submat -i sparse -b', shell=True)
print(f'Extracting actual submatrix of {base}.sparse according to {base}.submat.', flush=True)
subprocess.call(f'{CMR_MATRIX} {base}.sparse -S {base}.submat -i sparse -d - | gzip > mip_matrices/{base}.binary.sparse.gz', shell=True)
os.unlink(f'{base}.sparse')
os.unlink(f'{base}.submat')