gap of projection of complete graphs is not so large??
This commit is contained in:
		@@ -5,6 +5,7 @@ from sage.matroids.all import *
 | 
				
			|||||||
from sage.graphs.all import *
 | 
					from sage.graphs.all import *
 | 
				
			||||||
import gurobipy as gp
 | 
					import gurobipy as gp
 | 
				
			||||||
from gurobipy import GRB
 | 
					from gurobipy import GRB
 | 
				
			||||||
 | 
					from fractions import Fraction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env = gp.Env(empty=True)
 | 
					env = gp.Env(empty=True)
 | 
				
			||||||
env.setParam("OutputFlag",0)
 | 
					env.setParam("OutputFlag",0)
 | 
				
			||||||
@@ -57,5 +58,5 @@ for N in range(2,10):
 | 
				
			|||||||
            if gap > maxgap:
 | 
					            if gap > maxgap:
 | 
				
			||||||
                maxgap = gap
 | 
					                maxgap = gap
 | 
				
			||||||
                maxcol = v
 | 
					                maxcol = v
 | 
				
			||||||
 | 
					        frac=str(Fraction(maxgap).limit_denominator(m))
 | 
				
			||||||
        print(f"K_{{{N},{M}}}, gap = {maxgap}, column = {maxcol}")
 | 
					        print(f"K_{{{N},{M}}}   gap ≈ {frac:<8} column = {maxcol}")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										61
									
								
								complete.sage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								complete.sage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					# 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
 | 
				
			||||||
 | 
					from fractions import Fraction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env = gp.Env(empty=True)
 | 
				
			||||||
 | 
					env.setParam("OutputFlag",0)
 | 
				
			||||||
 | 
					env.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def representative_vectors(m, n):
 | 
				
			||||||
 | 
					    for w1 in range(m+1):
 | 
				
			||||||
 | 
					        for w2 in range(n+1):
 | 
				
			||||||
 | 
					            v = [0]*(m+n)
 | 
				
			||||||
 | 
					            v[:w1] = [1]*w1
 | 
				
			||||||
 | 
					            v[m:m+w2] = [1]*w2
 | 
				
			||||||
 | 
					            yield tuple(v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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(3,11):
 | 
				
			||||||
 | 
					    g=graphs.CompleteGraph(N)
 | 
				
			||||||
 | 
					    A=g.incidence_matrix()
 | 
				
			||||||
 | 
					    n,m = A.dimensions()
 | 
				
			||||||
 | 
					    maxgap = 0
 | 
				
			||||||
 | 
					    for v in representative_vectors(N,0):
 | 
				
			||||||
 | 
					        # cnt=cnt+1
 | 
				
			||||||
 | 
					        v_col=matrix(v).transpose()
 | 
				
			||||||
 | 
					        A_t=A.augment(v_col)
 | 
				
			||||||
 | 
					        # print(A_t)
 | 
				
			||||||
 | 
					        MM=Matroid(matrix=A_t,field=GF(2))/m     #contract the last element
 | 
				
			||||||
 | 
					        # print(M)
 | 
				
			||||||
 | 
					        bases=MM.bases()
 | 
				
			||||||
 | 
					        strength=cogirthip(bases,integral=false)
 | 
				
			||||||
 | 
					        cogirth =cogirthip(bases,integral=true)
 | 
				
			||||||
 | 
					        gap = cogirth/strength
 | 
				
			||||||
 | 
					        if gap > maxgap:
 | 
				
			||||||
 | 
					            maxgap = gap
 | 
				
			||||||
 | 
					            maxcol = v
 | 
				
			||||||
 | 
					    frac=str(Fraction(maxgap).limit_denominator(m))
 | 
				
			||||||
 | 
					    print(f"K_{N}   gap ≈ {frac:<8} column = {maxcol}")
 | 
				
			||||||
		Reference in New Issue
	
	Block a user