gap for projections of graphic matroids
This commit is contained in:
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
*.txt
|
||||||
|
*.json
|
||||||
|
*.bbl
|
||||||
|
*.thm
|
||||||
|
*.synctex.gz
|
||||||
|
*.sage.py
|
||||||
|
*.aux
|
||||||
|
*.blg
|
||||||
|
.DS_store
|
||||||
|
*.fls
|
||||||
|
*.fdb_latexmk
|
||||||
|
.vscode
|
||||||
|
__pycache__
|
||||||
55
projection.sage
Normal file
55
projection.sage
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# cogirth-packing gap of projections of graphic matroids
|
||||||
|
|
||||||
|
from sage.all import *
|
||||||
|
from sage.matroids.all import *
|
||||||
|
from sage.graphs.all import *
|
||||||
|
import gurobipy as gp
|
||||||
|
from gurobipy import GRB
|
||||||
|
|
||||||
|
env = gp.Env(empty=True)
|
||||||
|
env.setParam("OutputFlag",0)
|
||||||
|
env.start()
|
||||||
|
|
||||||
|
|
||||||
|
def cogirthip(bases, integral=true):
|
||||||
|
model = gp.Model("mip1",env=env)
|
||||||
|
# model.Params.LogToConsole = 0
|
||||||
|
groundset=frozenset()
|
||||||
|
for B in bases: groundset=groundset|frozenset(B)
|
||||||
|
x = dict()
|
||||||
|
if integral:
|
||||||
|
for e in groundset: x[e]=model.addVar(vtype=GRB.BINARY)
|
||||||
|
else:
|
||||||
|
for e in groundset: x[e]=model.addVar(vtype=GRB.CONTINUOUS,lb=0)
|
||||||
|
model.setObjective(gp.quicksum([x[e] for e in groundset]), GRB.MINIMIZE)
|
||||||
|
for B in bases:
|
||||||
|
model.addConstr(gp.quicksum([x[e] for e in B])>=1)
|
||||||
|
model.optimize()
|
||||||
|
return model.ObjVal
|
||||||
|
|
||||||
|
|
||||||
|
cnt=0 # actual number of instances tested
|
||||||
|
f = lambda g: g.is_connected()
|
||||||
|
for n in range(4,5):
|
||||||
|
for g in filter(f, graphs(n)):
|
||||||
|
g=graphs.CompleteGraph(4)
|
||||||
|
A=g.incidence_matrix()
|
||||||
|
n,m = A.dimensions()
|
||||||
|
# enumerate all vectors in F_2^n with even number of 1s
|
||||||
|
V = VectorSpace(GF(2), n)
|
||||||
|
for v in filter(lambda v: v.hamming_weight() % 2 == 0 and v!=0, V):
|
||||||
|
v_col=matrix(v).transpose()
|
||||||
|
A_t=A.augment(v_col)
|
||||||
|
# print(A_t)
|
||||||
|
M=Matroid(matrix=A_t,field=GF(2))/m #contract the last element
|
||||||
|
# print(M)
|
||||||
|
bases=M.bases()
|
||||||
|
strength=cogirthip(bases,integral=false)
|
||||||
|
cogirth =cogirthip(bases,integral=true)
|
||||||
|
gap = cogirth/strength
|
||||||
|
if gap > 2.01:
|
||||||
|
print(f"bad example! gap={gap}")
|
||||||
|
with open("projection.out", "a") as f:
|
||||||
|
f.write(str(A_t)+"\n\n")
|
||||||
|
else:
|
||||||
|
print(f"n={n},m={m},gap={gap}")
|
||||||
Reference in New Issue
Block a user