def main(): import sys import random import tableutils m = 12 # Number of time intervals n = 7 # Number of shifts n0 = 4 # Number of full-time shifts header = ['Shift ' + str(j) for j in range(n)] left = ['{0:02}h'.format(i * 2) for i in range(m)] + ['Cost'] if len(sys.argv) <= 1: print('Usage is main [data|run|runo] [seed]') return elif len(sys.argv) >= 2: random.seed(int(sys.argv[2])) C = gen_data(m, n, n0) if sys.argv[1] == 'data': tableutils.printmat(tableutils.wrapmat(C, left, header + ['Need']), False, 2) elif sys.argv[1] in ['run', 'runo']: if sys.argv[1] == 'run': rc, Val, x = solve_model(C, n0) else: rc, Val, x = solve_model(C, n0, None, None, True) tableutils.printmat( tableutils.wrapmat([x], ['Nb:' + str(sum(x))], ['$' + str(Val)] + header), True, 0)
def main(): if len(sys.argv)==1: return elif len(sys.argv)==3: random.seed(int(sys.argv[2])) nbfoods=5 nbnutrients=4 header=['']+['N'+str(i) for i in range(nbnutrients)]+['Min','Max','Cost','Solution'] table=gen_diet_problem(nbfoods,nbnutrients) rc,value,solution=solve_diet(table) T=[0]*nbnutrients C=0 for food in range(nbfoods): C=C+solution[food]*table[food][nbnutrients+2] for nutrient in range(nbnutrients): T[nutrient] = T[nutrient]+solution[food]*table[food][nutrient] for i in range(nbnutrients): T[i]=int(round(T[i],0)) T=T+['','',round(C,2),''] table=table+[T] for i in range(0,nbfoods): table[i]=table[i]+[round(solution[i],2)] wrapmat(table,['F'+str(i) for i in range(nbfoods)]+['Min','Max','Sol'],header); printmat(formatmat(wrapmat(table,['F'+str(i) for i in range(nbfoods)]+['Min','Max','Sol'],header),True,4))
def main(): import sys import random import tableutils m = 4 n = 3 if len(sys.argv) <= 1: print('Usage is main [data|run] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) D = gen_data(m, n) if sys.argv[1] == 'data': T = [] for i in range(m): T.append( [str(D[i][j][0]) + '-' + str(D[i][j][1]) for j in range(n)]) left = ['J' + str(i) for i in range(m)] header = ['Job'] + ['Machine-Duration' for _ in range(n)] T = tableutils.wrapmat(T, left, header) tableutils.printmat(T, True) elif sys.argv[1] == 'run': rc, Val, x = solve_model(D) T = [[ tableutils.set2string((x[i][D[i][k][0]], D[i][k][0], D[i][k][1])) for k in range(n) if D[i][k][1] > 0 ] for i in range(m)] T = tableutils.wrapmat(T, ['Job:' + str(i) for i in range(m)], ['(S; M; D)' for _ in range(n)]) tableutils.printmat(T, True)
def main(): import sys import random import tableutils n = 7 header = [] if len(sys.argv) <= 1: print('Usage is main [data|run0|run1] [seed]') return elif len(sys.argv) >= 2: random.seed(int(sys.argv[2])) C, S, T = gen_data(n) for i in range(n): h = 'N' + str(i) if i in S: h = h + '-S' elif i in T: h = h + '-T' header.append(h) if sys.argv[1] == 'data': tableutils.printmat(tableutils.wrapmat(C, header, header)) elif sys.argv[1][0:3] == 'run': rc, Fout, Fin, x = solve_model(C, S, T, sys.argv[1][3:4] == '1') tableutils.printmat( tableutils.wrapmat( x, header, [str(int(Fout)) + '-' + str(int(Fin))] + header))
def main(): if len(sys.argv) == 1: return elif len(sys.argv) == 3: random.seed(int(sys.argv[2])) nbfoods = 5 nbnutrients = 4 header = [''] + ['N' + str(i) for i in range(nbnutrients) ] + ['Min', 'Max', 'Cost', 'Solution'] table = gen_diet_problem(nbfoods, nbnutrients) rc, value, solution = solve_diet(table) T = [0] * nbnutrients C = 0 for food in range(nbfoods): C = C + solution[food] * table[food][nbnutrients + 2] for nutrient in range(nbnutrients): T[nutrient] = T[nutrient] + solution[food] * table[food][nutrient] for i in range(nbnutrients): T[i] = int(round(T[i], 0)) T = T + ['', '', round(C, 2), ''] table = table + [T] for i in range(0, nbfoods): table[i] = table[i] + [round(solution[i], 2)] wrapmat(table, ['F' + str(i) for i in range(nbfoods)] + ['Min', 'Max', 'Sol'], header) printmat( formatmat( wrapmat(table, ['F' + str(i) for i in range(nbfoods)] + ['Min', 'Max', 'Sol'], header), True, 4))
def main(): import sys import random import tableutils n=7 if len(sys.argv)<=1: print('Usage is main [data|run|large] [seed]') return elif len(sys.argv)>=3: random.seed(int(sys.argv[2])) C=gen_data(n) if sys.argv[1]=='data': tableutils.printmat(tableutils.wrapmat(C,[str(i) for i in range(n)],['Order','Nb items','% Width'])) elif sys.argv[1]=='run': start = time.clock() rc,nb,rolls,w=solve_model(C) end = time.clock() if rc != 0: print 'Infeasible' else: R = [[str(rolls[i][0]) , tableutils.set2string(tableutils.flatten(rolls[i][1:]))] for i in range(nb)] tableutils.printmat(tableutils.wrapmat(R,[str(i) for i in range(nb)],['rolls','Waste '+str(sum(w)),'Cut widths']),True,0) elif sys.argv[1]=='large': #C = [[44, 81], [3,70],[48,68]] start = time.clock() C,y,rolls=solve_large_model(C) end = time.clock() nb = len(rolls) #tableutils.printmat(C) #tableutils.printmat([y]) #tableutils.printmat(rolls) R = [[str(rolls[i][0]) , tableutils.set2string(tableutils.flatten(rolls[i][1:]))] for i in range(nb)] tableutils.printmat(tableutils.wrapmat(R,[str(i) for i in range(nb)],['rolls','Waste '+str(sum(rolls[i][0] for i in range(nb))),'Cut widths ']),True,0)
def main(): import sys import random import tableutils nbcourse=7 nbsets=6 nbinstructor=5 nbpairs=2 if len(sys.argv)<=1: print('Usage is main [section|sets|instructor|pairs|run] [seed]') return elif len(sys.argv)>=3: random.seed(int(sys.argv[2])) S,nbsection=gen_section(nbcourse) R=gen_sets(nbsection,nbsets) I=gen_instructor(nbinstructor,nbsets,nbcourse,nbpairs) P=gen_pairs(nbpairs,nbsection) if sys.argv[1]=='section': tableutils.printmat(tableutils.wrapmat(S,[],['Id','Course id','Meeting Time']),True,0) elif sys.argv[1]=='sets': RR=[] for i in range(len(R)): RR.append([R[i][0],tableutils.set2string(R[i][1])]) tableutils.printmat(tableutils.wrapmat(RR,[],['Id','Sections']),True,0) elif sys.argv[1]=='instructor': RI=[] for i in range(len(I)): RI.append([I[i][0], tableutils.set2string(I[i][1]), tableutils.set2string(I[i][2]), tableutils.set2string(I[i][3]), tableutils.set2string(I[i][4])]) tableutils.printmat(tableutils.wrapmat(RI,[],['Id','Load','Course weights','Set weights','Pair weights']),True,0) elif sys.argv[1]=='pairs': RP=[] for i in range(len(P)): X=[str('(')+str(e[0])+str(' ')+str(e[1])+str(')') for e in P[i][1]] RP.append([P[i][0],tableutils.set2string(X)]) tableutils.printmat(tableutils.wrapmat(RP,[],['Id','Section pairs']),True,0) elif sys.argv[1]=='run': rc,x,xs,v=solve_model(S,I,R,P) #tableutils.printmat(x) #print(xs) XS=[] for i in range(len(xs)): XS.append([xs[i][0], ['{0:2}'.format(e[0])+' : ('+'{0:2}'.format(e[1][0])+' '+'{0:2}'.format(e[1][1])+' '+'{0:2}'.format(e[1][2])+')' for e in xs[i][1]]]) tableutils.printmat(tableutils.wrapmat(XS,[],['Instructor','Section (WC WR WP)']),True,1)
def main(): import sys import random import tableutils n=6 if len(sys.argv)<=1: print('Usage is main [data|run] [seed]') return elif len(sys.argv)>2: random.seed(int(sys.argv[2])) D,S=gen_data(n) if sys.argv[1]=='data': T=tableutils.wrapmat(D,[str(i) for i in range(n)],['','nb of packages','Unit weight']) T.insert(0,['','Truck weight limit',S]) tableutils.printmat(T,True) elif sys.argv[1] in ['run', 'nrun']: start = time.clock() if sys.argv[1]=='nrun': rc,Val,P2T,T2P=solve_model(D,S) else: rc,Val,P2T,T2P=solve_model_break_symmetry(D,S) end = time.clock() #print 'Elapsed time ', end-start, ' optimal value ', Val print 'Truck, Packges (id weight)' for row in T2P: if (len(row[1])): print '{0},"{1}"'.format(row[0],row[1])
def main(): import sys import random import tableutils m=12 n=7 if len(sys.argv)<=1: print('Usage is main [dcost|fcost|run] [seed]') return elif len(sys.argv)>=2: random.seed(int(sys.argv[2])) D=gen_dcost(m,n) F=gen_fcost(m) if sys.argv[1]=='dcost': for i in range(m): D[i].insert(0,'Plant '+str(i)) D[-1].insert(0,'Demand') D.insert(0,['From/To']+['City'+str(i) for i in range(n)]+['Supply']) tableutils.printmat(D) elif sys.argv[1]=='fcost': F=[F] F.insert(0,['Plant']+[str(i) for i in range(m)]) F[1].insert(0,'Cost') tableutils.printmat(F) elif sys.argv[1]=='run': rc,Value,x,y=solve_model(D,F) T=[] for i in range(m): if y[i]: T.append(['Plant '+str(i)]+x[i]) T=tableutils.wrapmat(T,[],['']+['City '+str(j) for j in range(n)]) tableutils.printmat(T)
def main(): t = 'k out of n' n = 9 seed(100) bound = [randint(5, 15) for _ in range(n)] tableutils.printmat([['Max sum of'] + bound]) for k in range(1, n + 1): s = pywraplp.Solver(t, pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING) x = [s.NumVar(0, bound[i], '') for i in range(n)] y = [s.NumVar(0, bound[i], '') for i in range(n)] Costx = sum(x[i] for i in range(n)) Costy = sum(y[i] for i in range(n)) s.Maximize(Costx + Costy) k_out_of_n(s, k, x, '==') ldg = sosn(s, k, y) rc = s.Solve() if rc != 0: print('Error', rc) sy = SolVal(y) sx = SolVal(x) yy = [[' ', 'x'][e > 0] for e in sy] xx = [[' ', 'x'][e > 0] for e in sx] tableutils.printmat( tableutils.wrapmat( [xx, yy], ['{0}/{1}'.format(k, n), 'Adjacent {0}/{1}'.format(k, n)], None), 0, False) return rc
def main(): import sys import random import tableutils m = 10 n = 7 if len(sys.argv) <= 1: print('Usage is main [dcost|fcost|run] [seed]') return elif len(sys.argv) >= 2: random.seed(int(sys.argv[2])) D = gen_dcost(m, n) F = gen_fcost(m) if sys.argv[1] == 'dcost': for i in range(m): D[i].insert(0, 'Plant ' + str(i)) D[-1].insert(0, 'Demand') D.insert(0, ['From/To'] + ['City' + str(i) for i in range(n)] + ['Supply']) tableutils.printmat(D) elif sys.argv[1] == 'fcost': F = [F] F.insert(0, ['Plant'] + [str(i) for i in range(m)]) F[1].insert(0, 'Cost') tableutils.printmat(F) elif sys.argv[1] == 'run': rc, Value, x, y, Fcost, Dcost = solve_model(D, F) T = [] for i in range(m): if y[i]: T.append(['Plant ' + str(i)] + x[i]) T = tableutils.wrapmat(T, [], [''] + ['City ' + str(j) for j in range(n)]) tableutils.printmat(T)
def main(): t = 'k out of n' n = 12 seed(100) bound = [randint(5,15) for _ in range(n)] tableutils.printmat([['Max sum of']+bound]) for k in range(1,n+1): s = pywraplp.Solver(t,pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING) x = [s.NumVar(0,bound[i],'') for i in range(n)] y = [s.NumVar(0,bound[i],'') for i in range(n)] Costx = sum(x[i] for i in range(n)) Costy = sum(y[i] for i in range(n)) s.Maximize(Costx+Costy) k_out_of_n(s,k,x,'==') ldg=sosn(s,k,y) rc = s.Solve() if rc != 0: print 'Error', rc sy = SolVal(y) sx = SolVal(x) yy = [[' ','x'][e>0] for e in sy] xx = [[' ','x'][e>0] for e in sx] tableutils.printmat(tableutils.wrapmat([xx,yy], ['{0}/{1}'.format(k,n),'Adjacent {0}/{1}'.format(k,n)], None),0,False) return rc
def main(): import sys import random import tableutils m=15 n=40 k=3 if len(sys.argv)<=1: print('Usage is main [data|run] [seed]') return elif len(sys.argv)>2: random.seed(int(sys.argv[2])) D=gen_data(m,n,k) if sys.argv[1]=='data': T=[] for i in range(m): T.append([tableutils.set2string(D[i])]) T=tableutils.wrapmat(T,[str(i) for i in range(m)],['Crew #','Crew ID']) tableutils.printmat(T,True) elif sys.argv[1]=='run': rc,Val,S=solve_model(D,None) T=[] #for i in range(len(C)): # if len(C[i]): # T.append(['Crew id '+str(i),tableutils.set2string(C[i])]) T.insert(0,['Rosters chosen',tableutils.set2string(S)]) tableutils.printmat(T,True)
def main(): import sys import random import tableutils n = 13 header = ['P' + str(i) for i in range(n)] if len(sys.argv) <= 1: print('Usage is main [data|run|all|tree|pm] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) C = gen_data(n) if sys.argv[1] == 'data': for i in range(n): C[i].insert(0, 'P' + str(i)) C.insert(0, [''] + header) tableutils.printmat(C) elif sys.argv[1] == 'run': rc, Value, Path, Cost, Cumul = solve_model(C) Path.insert(0, 'Points') Cost.insert(0, 'Distance') Cumul.insert(0, 'Cumulative') T = [Path, Cost, Cumul] tableutils.printmat(T, True) elif sys.argv[1] == 'all': rc, Paths, Costs = solve_all_pairs(C) tableutils.printmat(tableutils.wrapmat(Costs, header, header)) elif sys.argv[1] == 'tree': rc, Val, Tree = solve_tree_model(C) if rc != 0: print 'Infeasible' else: tableutils.printmat( tableutils.wrapmat(Tree, [], ['From', 'To', 'Distance']), True, 0) elif sys.argv[1] == 'pm': D = [[0, 3], [1, 6], [2, 3], [3, 2], [4, 2], [5, 7], [6, 7], [7, 5], [8, 2], [9, 7], [10, 4], [11, 5]] t = [0, 3, 0, 3, 9, 0, 9, 16, 21, 21, 21, 3] rc, Path = critical_tasks(D, t) if rc != 0: print 'Infeasible' else: print Path
def main(): import sys import random import tableutils n=13 header = ['P'+str(i) for i in range(n)] if len(sys.argv)<=1: print('Usage is main [data|run|all|tree|pm] [seed]') return elif len(sys.argv)>2: random.seed(int(sys.argv[2])) C=gen_data(n) if sys.argv[1]=='data': for i in range(n): C[i].insert(0,'P'+str(i)) C.insert(0,['']+header) tableutils.printmat(C) elif sys.argv[1]=='run': rc,Value,Path,Cost,Cumul=solve_model(C) Path.insert(0,'Points') Cost.insert(0,'Distance') Cumul.insert(0,'Cumulative') T=[Path,Cost,Cumul] tableutils.printmat(T,True) elif sys.argv[1]=='all': rc, Paths, Costs = solve_all_pairs(C) tableutils.printmat(tableutils.wrapmat(Costs,header,header)) elif sys.argv[1]=='tree': rc, Val,Tree = solve_tree_model(C) if rc != 0: print 'Infeasible' else: tableutils.printmat(tableutils.wrapmat(Tree,[],['From','To','Distance']),True,0) elif sys.argv[1]=='pm': D=[[0,3],[1,6],[2,3],[3,2],[4,2],[5,7],[6,7],[7,5],[8,2],[9,7],[10,4],[11,5]] t=[0,3,0,3,9,0,9,16,21,21,21,3] rc,Path = critical_tasks(D,t) if rc != 0: print 'Infeasible' else: print Path
def main(): import sys import random import tableutils m=12 n=7 n0=4 header = ['Shift '+str(j) for j in range(n)] left = ['{0:02}h'.format(i*2) for i in range(m)]+['Cost'] if len(sys.argv)<=1: print('Usage is main [data|run|runo] [seed]') return elif len(sys.argv)>=2: random.seed(int(sys.argv[2])) C=gen_data(m,n,n0) if sys.argv[1]=='data': tableutils.printmat(tableutils.wrapmat(C,left,header+['Need']),False,2) elif sys.argv[1] in ['run', 'runo']: if sys.argv[1]=='run': rc,Val,x=solve_model(C,n0) else: rc,Val,x=solve_model(C,n0,None,None,True) tableutils.printmat(tableutils.wrapmat([x],['Nb:'+str(sum(x))],['$'+str(Val)]+header),True,0)
def main(): import sys import random import tableutils n=7 header=[] if len(sys.argv)<=1: print('Usage is main [data|run0|run1] [seed]') return elif len(sys.argv)>=2: random.seed(int(sys.argv[2])) C,S,T=gen_data(n) for i in range(n): h='N'+str(i) if i in S: h=h+'-S' elif i in T: h=h+'-T' header.append(h) if sys.argv[1]=='data': tableutils.printmat(tableutils.wrapmat(C,header,header)) elif sys.argv[1][0:3]=='run': rc,Fout,Fin,x=solve_model(C,S,T,sys.argv[1][3:4]=='1') tableutils.printmat(tableutils.wrapmat(x,header,[str(int(Fout))+'-'+str(int(Fin))]+header))
def main(): import sys import random import tableutils n = 3 if len(sys.argv) <= 1: print('Usage is main [data|run] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) D, S = gen_data(n) if sys.argv[1] == 'data': T = tableutils.wrapmat(D, [str(i) for i in range(n)], ['', 'nb of packages', 'Unit weight']) T.insert(0, ['', 'Truck weight limit', S]) T.append(['Total', sum(e[0] for e in D), sum(e[0] * e[1] for e in D)]) tableutils.printmat(T, True) elif sys.argv[1] in ['run', 'run0', 'nrun', 'nrun0']: start = time.clock() if sys.argv[1] in ['nrun', 'nrun0']: rc, Val, P2T, T2P = solve_model(D, S, False) else: rc, Val, P2T, T2P = solve_model(D, S, True) end = time.clock() #print 'Elapsed time ', end-start, ' optimal value ', Val if rc != 0: print('Infeasible') else: if sys.argv[1] in ['run', 'nrun']: w = sum(e[2] for row in T2P for e in row[1]) t = sum(1 for row in T2P for e in row[1] if len(row) > 0) print('Trucks {0}, Packages {2} ({1})'.format(Val, w, t)) print('(id weight), (id weight)*') for row in T2P: if (len(row[1])): print('{0:2} ({2}),"{1}"'.format( row[0], row[1], sum(e[2] for e in row[1]))) else: print('Weight, Truck id') for row in P2T: print('{0},"{1}"'.format(row[0], row[1]))
def main(): import sys import random import tableutils n=10 if len(sys.argv)<=1: print('Usage is main [data|display|run|path|star] [seed]') return elif len(sys.argv)>2: random.seed(int(sys.argv[2])) C,Points=gen_data(n) header = ['P (x y)']+['P'+str(i) for i in range(n)] left = ['P'+str(i)+' '+str(Points[i][0])+' '+str(Points[i][1])+' ' for i in range(n)] if sys.argv[1]=='data': tableutils.printmat(tableutils.wrapmat(C,left,header),False,1) elif sys.argv[1]=='display': subtours=[] tours = [] count = 0 display = [] while count < 10 and len(tours) != 1: rc,Value,tours=solve_model_eliminate(C,subtours) subtours.extend(tours) display.append(['{0}-({1})'.format(count,int(Value))]+[tour for tour in tours]) count += 1 display.insert(0,['Iter (value)','Tour(s)']) for row in display: l='' for i in range(1,len(row)): l=l+' '+str(row[i]) if i < len(row)-1: l=l+';' print '{0}, "{1}"'.format(row[0],l) elif sys.argv[1]=='run': rc,Value,tours=solve_model(C) T=[tours] Cost=[0] for i in range(n): Cost.append(C[tours[i]][tours[(i+1)%len(tours)]]) T.append(Cost) tableutils.printmat(T,True) elif sys.argv[1]=='path': rc,Value,path=solve_model_p(C) T=[['Nodes']+path] Cost=['Distance',0] Tcost=['Cumulative',0] for i in range(n-1): Cost.append(C[path[i]][path[(i+1)]]) Tcost.append(Tcost[-1]+Cost[-1]) #Cost.append('Total:'+str(Value)) T.append(Cost) T.append(Tcost) tableutils.printmat(T,True) elif sys.argv[1]=='star': rc,Value,Tour=solve_model_star(C) Tour.append(Tour[0]) T=[Tour] Cost=['Total dist '+str(int(Value)),0] for i in range(len(Tour)-1): Cost.append(C[Tour[i]][Tour[(i+1)%len(Tour)]]) Tour.insert(0,'NB '+str(len(Tour))) T.append(Cost) tableutils.printmat(T,True)
def main(): import sys import random import tableutils nbcourse = 7 nbsets = 6 nbinstructor = 5 nbpairs = 2 if len(sys.argv) <= 1: print('Usage is main [section|sets|instructor|pairs|run] [seed]') return elif len(sys.argv) >= 3: random.seed(int(sys.argv[2])) S, nbsection = gen_section(nbcourse) R = gen_sets(nbsection, nbsets) I = gen_instructor(nbinstructor, nbsets, nbcourse, nbpairs) P = gen_pairs(nbpairs, nbsection) if sys.argv[1] == 'section': tableutils.printmat( tableutils.wrapmat(S, [], ['Id', 'Course id', 'Meeting Time']), True, 0) elif sys.argv[1] == 'sets': RR = [] for i in range(len(R)): RR.append([R[i][0], tableutils.set2string(R[i][1])]) tableutils.printmat(tableutils.wrapmat(RR, [], ['Id', 'Sections']), True, 0) elif sys.argv[1] == 'instructor': RI = [] for i in range(len(I)): RI.append([ I[i][0], tableutils.set2string(I[i][1]), tableutils.set2string(I[i][2]), tableutils.set2string(I[i][3]), tableutils.set2string(I[i][4]) ]) tableutils.printmat( tableutils.wrapmat(RI, [], [ 'Id', 'Load', 'Course weights', 'Set weights', 'Pair weights' ]), True, 0) elif sys.argv[1] == 'pairs': RP = [] for i in range(len(P)): X = [ str('(') + str(e[0]) + str(' ') + str(e[1]) + str(')') for e in P[i][1] ] RP.append([P[i][0], tableutils.set2string(X)]) tableutils.printmat( tableutils.wrapmat(RP, [], ['Id', 'Section pairs']), True, 0) elif sys.argv[1] == 'run': rc, x, xs, v = solve_model(S, I, R, P) #tableutils.printmat(x) #print(xs) XS = [] for i in range(len(xs)): XS.append([ xs[i][0], [ '{0:2}'.format(e[0]) + ' : (' + '{0:2}'.format(e[1][0]) + ' ' + '{0:2}'.format(e[1][1]) + ' ' + '{0:2}'.format(e[1][2]) + ')' for e in xs[i][1] ] ]) tableutils.printmat( tableutils.wrapmat(XS, [], ['Instructor', 'Section (WC WR WP)']), True, 1)
def main(): import sys import random import tableutils n = 10 if len(sys.argv) <= 1: print('Usage is main [data|display|run|path|star] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) C, Points = gen_data(n) header = ['P (x y)'] + ['P' + str(i) for i in range(n)] left = [ 'P' + str(i) + ' ' + str(Points[i][0]) + ' ' + str(Points[i][1]) + ' ' for i in range(n) ] if sys.argv[1] == 'data': tableutils.printmat(tableutils.wrapmat(C, left, header), False, 1) elif sys.argv[1] == 'display': subtours = [] tours = [] count = 0 display = [] while count < 10 and len(tours) != 1: rc, Value, tours = solve_model_eliminate(C, subtours) subtours.extend(tours) display.append(['{0}-({1})'.format(count, int(Value))] + [tour for tour in tours]) count += 1 display.insert(0, ['Iter (value)', 'Tour(s)']) for row in display: l = '' for i in range(1, len(row)): l = l + ' ' + str(row[i]) if i < len(row) - 1: l = l + ';' print('{0}, "{1}"'.format(row[0], l)) elif sys.argv[1] == 'run': rc, Value, tours = solve_model(C) T = [tours] Cost = [0] for i in range(n): Cost.append(C[tours[i]][tours[(i + 1) % len(tours)]]) T.append(Cost) tableutils.printmat(T, True) elif sys.argv[1] == 'path': rc, Value, path = solve_model_p(C) T = [['Nodes'] + path] Cost = ['Distance', 0] Tcost = ['Cumulative', 0] for i in range(n - 1): Cost.append(C[path[i]][path[(i + 1)]]) Tcost.append(Tcost[-1] + Cost[-1]) #Cost.append('Total:'+str(Value)) T.append(Cost) T.append(Tcost) tableutils.printmat(T, True) elif sys.argv[1] == 'star': rc, Value, Tour = solve_model_star(C) Tour.append(Tour[0]) T = [Tour] Cost = ['Total dist ' + str(int(Value)), 0] for i in range(len(Tour) - 1): Cost.append(C[Tour[i]][Tour[(i + 1) % len(Tour)]]) Tour.insert(0, 'NB ' + str(len(Tour))) T.append(Cost) tableutils.printmat(T, True)
def main(): import sys, random, tableutils, time if len(sys.argv) <= 1: print( 'Usage is main [maxrook|rook|queen|bishop|sudoku|sudokus|smm|lady] [seed]' ) return elif len(sys.argv) >= 2: n = int(sys.argv[2]) header = [i + 1 for i in range(n)] if sys.argv[1] == 'maxrook': rc, x = solve_maxrook(n) tableutils.printmat(tableutils.wrapmat(x, header, header)) elif sys.argv[1] == 'rook': rc, x = solve_maxpiece(n, 'R') tableutils.printmat(tableutils.wrapmat(x, header, header)) elif sys.argv[1] == 'queen': rc, x = solve_maxpiece(n, 'Q') tableutils.printmat(tableutils.wrapmat(x, header, header)) elif sys.argv[1] == 'bishop': rc, x = solve_maxpiece(n, 'B') tableutils.printmat(tableutils.wrapmat(x, header, header)) elif sys.argv[1] == 'sudoku': G = [[None, None, None, 2, 6, None, 7, None, 1], [6, 8, None, None, 7, None, None, 9, None], [1, 9, None, None, None, 4, 5, None, None], [8, 2, None, 1, None, None, None, 4, None], [None, None, 4, 6, None, 2, 9, None, None], [None, 5, None, None, None, 3, None, 2, 8], [None, None, 9, 3, None, None, None, 7, 4], [None, 4, None, None, 5, None, None, 3, 6], [7, None, 3, None, 1, 8, None, None, None]] f = open('sudoku17.txt') #f = open('top1465.txt') G = [[0 for _ in range(9)] for _ in range(9)] for i in range(n): l = f.readline() l = f.readline() f.close() for i in range(9): for j in range(9): G[i][j] = int( l[i * 9 + j]) if l[i * 9 + j] >= '1' and l[i * 9 + j] <= '9' else None rc, x = solve_sudoku(G) #tableutils.printmat(tableutils.wrapmat(x,header,header)) if rc != 0: tableutils.printmat(G) else: xx = [] for i in range(len(G)): row = [] for j in range(len(G[0])): if G[i][j]: row.append('*' + str(G[i][j]) + '*') else: row.append(x[i][j]) xx.append(row) tableutils.printmat(xx, False, 0) elif sys.argv[1] == 'sudokus': #f = open('sudoku17.txt') count = 0 with open('top1465.txt') as f: for l in f: count += 1 #if count > 10: # break G = [[0 for _ in range(9)] for _ in range(9)] for i in range(9): for j in range(9): G[i][j] = int(l[i * 9 + j]) if l[ i * 9 + j] >= '1' and l[i * 9 + j] <= '9' else None start = time.clock() rc, x = solve_sudoku(G) end = time.clock() if rc != 0: print(count, 'WTF!!!!!!!') print('{0:06d},{1:8.0f}'.format(count, (end - start) * 1000)) elif sys.argv[1] == 'smm': rc, x = solve_smm() if rc == 0: x = [['S', 'E', 'N', 'D', 'M', 'O', 'R', 'Y'], x] tableutils.printmat(x, True, 0) else: print('Infeasible') elif sys.argv[1] == 'smm': rc, x = solve_smm() if rc == 0: x = [['S', 'E', 'N', 'D', 'M', 'O', 'R', 'Y'], x] tableutils.printmat(x, True, 0) else: print('Infeasible') elif sys.argv[1] == 'lady': STA = [ "The lady is in an odd-numbered room.", "This room is empty.", "Either sign 5 is right or sign 7 is wrong.", "Sign 1 is wrong.", "Either sign 2 or sign 4 is right.", "Sign 3 is wrong.", "The lady is not in room 1.", "This room contains a tiger and room 9 is empty.", "This room contains a tiger and sign 6 is wrong." ] rc, S, R = solve_lady_or_tiger() if rc == 0: x = [] for i in range(9): x.append([ i + 1, STA[i], ['False', 'True'][int(S[i])], ['', 'Lady', 'Tiger'][int(R[i][0])] ]) tableutils.printmat(x) else: print('Infeasible')
def main(): import sys, random, tableutils, time if len(sys.argv)<=1: print('Usage is main [maxrook|rook|queen|bishop|sudoku|sudokus|smm|lady] [seed]') return elif len(sys.argv)>=2: n = int(sys.argv[2]) header = [i+1 for i in range(n)] if sys.argv[1]=='maxrook': rc,x = solve_maxrook(n) tableutils.printmat(tableutils.wrapmat(x,header,header)) elif sys.argv[1]=='rook': rc,x = solve_maxpiece(n,'R') tableutils.printmat(tableutils.wrapmat(x,header,header)) elif sys.argv[1]=='queen': rc,x = solve_maxpiece(n,'Q') tableutils.printmat(tableutils.wrapmat(x,header,header)) elif sys.argv[1]=='bishop': rc,x = solve_maxpiece(n,'B') tableutils.printmat(tableutils.wrapmat(x,header,header)) elif sys.argv[1]=='sudoku': G = [[None,None,None,2 ,6 ,None,7 ,None,1 ], [6 ,8 ,None,None,7 ,None,None,9 ,None], [1 ,9 ,None,None,None,4 ,5 ,None,None], [8 ,2 ,None,1 ,None,None,None,4, None], [None,None,4 ,6 ,None,2 ,9 ,None,None], [None,5 ,None,None,None,3 ,None,2 ,8 ], [None,None,9 ,3 ,None,None,None,7 ,4 ], [None,4 ,None,None,5 ,None,None,3 ,6 ], [7 ,None,3 ,None,1 ,8 ,None,None,None]] f = open('sudoku17.txt') #f = open('top1465.txt') G=[[0 for _ in range(9)] for _ in range(9)] for i in range(n): l = f.readline() l=f.readline() f.close() for i in range(9): for j in range(9): G[i][j] = int(l[i*9+j]) if l[i*9+j]>='1' and l[i*9+j]<='9' else None rc,x = solve_sudoku(G) #tableutils.printmat(tableutils.wrapmat(x,header,header)) if rc != 0: tableutils.printmat(G) else: xx=[] for i in range(len(G)): row=[] for j in range(len(G[0])): if G[i][j]: row.append('*'+str(G[i][j])+'*') else: row.append(x[i][j]) xx.append(row) tableutils.printmat(xx,False,0) elif sys.argv[1]=='sudokus': #f = open('sudoku17.txt') count = 0 with open('top1465.txt') as f: for l in f: count += 1 #if count > 10: # break G=[[0 for _ in range(9)] for _ in range(9)] for i in range(9): for j in range(9): G[i][j] = int(l[i*9+j]) if l[i*9+j]>='1' and l[i*9+j]<='9' else None start = time.clock() rc,x = solve_sudoku(G) end = time.clock() if rc != 0: print count, 'WTF!!!!!!!' print '{0:06d},{1:8.0f}'.format(count,(end-start)*1000) elif sys.argv[1]=='smm': rc,x = solve_smm() if rc == 0: x = [['S', 'E', 'N', 'D', 'M', 'O', 'R', 'Y'],x] tableutils.printmat(x,True,0) else: print 'Infeasible' elif sys.argv[1]=='smm': rc,x = solve_smm() if rc == 0: x = [['S', 'E', 'N', 'D', 'M', 'O', 'R', 'Y'],x] tableutils.printmat(x,True,0) else: print 'Infeasible' elif sys.argv[1]=='lady': STA=["The lady is in an odd-numbered room.", "This room is empty.", "Either sign 5 is right or sign 7 is wrong.", "Sign 1 is wrong.", "Either sign 2 or sign 4 is right.", "Sign 3 is wrong.", "The lady is not in room 1.", "This room contains a tiger and room 9 is empty.", "This room contains a tiger and sign 6 is wrong."] rc,S,R = solve_lady_or_tiger() if rc == 0: x=[] for i in range(9): x.append([i+1,STA[i],['False','True'][int(S[i])], ['','Lady','Tiger'][int(R[i][0])]]) tableutils.printmat(x) else: print 'Infeasible'