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 = 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, C = gen_data(m, n, k) if sys.argv[1] == 'data': T = [] for i in range(m): T.append([tableutils.set2string(D[i])]) T = tableutils.splitwrapmat(T, [str(i) for i in range(m)], ['Roster #', 'Crew IDs']) 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 {0:}'.format(int(Val)), tableutils.set2string(S)]) tableutils.printmat(T, True)
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(): 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 = 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(): 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 = 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(): 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=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=10 degree=2 if len(sys.argv)<=1: print('Usage is main [data|run] [seed]') return elif len(sys.argv)>=2: random.seed(int(sys.argv[2])) C=gen_data(lambda t: 1.8*t*t - 1.5*t + 0.3, n) if sys.argv[1]=='data': C.insert(0,['$t_i$','$f_i$']) tableutils.printmat(C,True) elif sys.argv[1]=='run': rc0,v,G=solve_model(C,degree,0) rc1,v,G1=solve_model(C,degree,1) T=[] error=0 for i in range(n): fti = sum(G[j]*C[i][0]**j for j in range(degree+1)) fti1 = sum(G1[j]*C[i][0]**j for j in range(degree+1)) error += abs(fti - C[i][1]) T.append([C[i][0], C[i][1], fti, abs(C[i][1]-fti), fti1, abs(C[i][1]-fti1)]) T.insert(0,['$t_i$','$f_i$', '$f_{sum}(t_i)$', '$e_i^{sum}$', '$f_{max}(t_i)$', '$e_i^{max}$']) 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(): import sys import random import tableutils m=15 n=25 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,C=gen_data(m,n) if sys.argv[1]=='data': T=[] for i in range(m): T.append([tableutils.set2string(D[i])]) T=tableutils.splitwrapmat(T,['S'+str(i) for i in range(m)],['Supplier','Part numbers']) tableutils.printmat(T,True) elif sys.argv[1]=='run': rc,Val,S,P=solve_model(D,None) T=[] for i in range(len(P)): T.append([tableutils.set2string(P[i])]) T.insert(0,[tableutils.set2string(S)]) T=tableutils.splitwrapmat(T,['All']+['Part #'+str(j) for j in range(n)],['Parts','Suppliers']) tableutils.printmat(T,True)
def main(): import sys import random import tableutils n=7 if len(sys.argv)<=1: print('Usage is main [data|run|non|ncvx] [seed] [bound] [False]') return elif len(sys.argv)>=3: random.seed(int(sys.argv[2])) (C,B)=gen_data(n,sys.argv[4]=='True') if len(sys.argv)>=4: B=int(sys.argv[3]) if sys.argv[1]=='data': C.insert(0,['(From','To]', 'Unit cost', '(Total cost','Total cost]']) tableutils.printmat(C,True) elif sys.argv[1]=='run': Data=[(C[i][0], C[i][3]) for i in range(n)] Data.append((C[n-1][1],C[n-1][4])) G=minimize_piecewise_linear_convex(Data,B) G=[[i for i in range(n+1)],G] G[0].append('Solution') G[1].append('\sum \delta='+str(sum(G[1][i] for i in range(n+1)))) G.append([Data[i][0] for i in range(n+1)]) G[2].append('x='+str(sum(G[1][i]*G[2][i] for i in range(n+1)))) G.append([Data[i][1] for i in range(n+1)]) G[3].append('Cost='+str("{0:.2f}".format(sum(G[1][i]*G[3][i] for i in range(n+1))))) G[0].insert(0,'Interval') G[1].insert(0,'$\delta_i$') G[2].insert(0,'$x_i$') G[3].insert(0,'$f(x_i)$') tableutils.printmat(G,True) elif sys.argv[1]=='ncvx': Data=[(C[i][0], C[i][3]) for i in range(n)] Data.append((C[n-1][1],C[n-1][4])) rc,G,H=minimize_piecewise_linear(Data,B) if rc == 0: G=[[i for i in range(n+1)],G] G[0].append('Solution') G[1].append('\sum \delta='+str(sum(G[1][i] for i in range(n+1)))) G.append([Data[i][0] for i in range(n+1)]) G[2].append('x='+str(sum(G[1][i]*G[2][i] for i in range(n+1)))) G.append(H) G[3].extend(['','\sum \delta='+str(sum(G[3][i] for i in range(n-1)))]) G.append([Data[i][1] for i in range(n+1)]) G[4].append('f(x)='+str("{0:.2f}".format(sum(G[1][i]*G[4][i] for i in range(n+1))))) tableutils.printmat(G,True) else: print 'Infeasible',rc,G,H elif sys.argv[1]=='non': G=verbose_minimize_non_linear(my_function,2,8,0.05) m=len(G) G.insert(0,['Interval']+[i for i in range(len(G[0]))]) G[0].append('$x^*$') G[0].append('$f(x^*)$') for i in range(1,m,3): G[i].insert(0,'$x_i$') G[i+1].insert(0,'$f(x_i)$') G[i+2].insert(0,'$\delta_i$') tableutils.printmat(G,True,3)
def main(): n = 12 m = 2 if len(sys.argv) <= 1: print('Usage is main [gen|run] [seed]') return elif len(sys.argv) >= 2: if len(sys.argv) >= 3: random.seed(int(sys.argv[2])) A, B, a = gen_features(n, m) C = [[A[i][0], A[i][1], B[i][0], B[i][1]] for i in range(len(A))] if sys.argv[1] == 'gen': C.insert(0, ['A-Radius', 'A-Perimeter', 'B-Radius', 'B-Perimeter']) tableutils.printmat(C, True) elif sys.argv[1] == 'plane': a = [a] a.insert(0, ['a1', 'a2', 'a0']) tableutils.printmat(a) elif sys.argv[1] == 'run': rc, Value, G = solve_classification(A, B) T = [[[rc, Value], G]] tableutils.printmat(T) elif sys.argv[1] == 'margins': rc, a = solve_margins_classification(A, B) if rc == 0: low = min([A[i][0] for i in range(len(A))] + [B[i][0] for i in range(len(B))]) high = 1 + max([A[i][0] for i in range(len(A))] + [B[i][0] for i in range(len(B))]) T = [[x, a[2] / a[1] - a[0] / a[1] * x] for x in range(low, high)] else: T = [['Infeasible']] 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 = 8 if len(sys.argv) <= 1: print('Usage is main [data|run] [seed]') return elif len(sys.argv) >= 2: random.seed(int(sys.argv[2])) C = transship_dist.gen_data(n) if sys.argv[1] == 'data': for i in range(n): C[i].insert(0, 'N' + str(i)) C[-1].insert(0, 'Demand') C.insert(0, ['From/To'] + ['N' + str(i) for i in range(n)] + ['Supply']) tableutils.printmat(C) elif sys.argv[1] == 'run': rc, V, G = transship_dist.solve_model(C) if rc != 0: print('Infeasible') else: T = [] for i in range(n): T.append([0 for j in range(n + 1)]) tot = 0 for j in range(n): T[i][j] = int(G[i][j]) tot += int(G[i][j]) T[i][-1] = tot TT = [] for j in range(n): TT.append(sum([T[i][j] for i in range(n)])) TT.insert(0, 'In') T.append(TT) for i in range(n): T[i].insert(0, 'N' + str(i)) T.insert(0, ['From/To'] + ['N' + str(i) for i in range(n)] + ['Out']) tableutils.printmat(T)
def main(): import sys import random import tableutils n = 5 m = 3 C = [] if len(sys.argv) <= 1: print('Usage is main [data|run|pairs] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) C, Cap = gen_data(n, m) if sys.argv[1] == 'data': for j in range(m): for i in range(n): C[j][i].insert(0, 'N' + str(i)) C[j][-1].insert(0, 'Demand') C[j].insert(0, ['Comm ' + str(j)] + ['N' + str(i) for i in range(n)] + ['Supply']) tableutils.printmat(C[j]) elif sys.argv[1] == 'run': rc, Val, x = solve_model(C, Cap, True) for j in range(m): for i in range(n): x[j][i].insert(0, 'N' + str(i)) x[j].insert(0, ['Comm ' + str(j)] + ['N' + str(i) for i in range(n)]) tableutils.printmat(x[j]) elif sys.argv[1] == 'pairs': n = 13 S = [0, 2] if len(sys.argv) > 2: random.seed(int(sys.argv[2])) C = shortest_path.gen_data(n) rc, Paths, Costs = solve_all_pairs(C, S) for i in range(len(S)): print('{0}-Target'.format(S[i]), 'Cost', '[Path]') for v in range(n): if v != S[i]: print(v, Costs[i][v], '{0}'.format(Paths[i][v]))
def main(): import sys import random import tableutils m = 3 n = 7 if len(sys.argv) <= 1: print('Usage is main [data|run] [seed]') return elif len(sys.argv) >= 2: random.seed(int(sys.argv[2])) C = gen_data(m, n) if sys.argv[1] == 'data': for i in range(m): C[i].insert(0, 'Plant ' + str(i)) C[-1].insert(0, 'Demand') C.insert(0, ['From/To'] + ['City ' + str(i) for i in range(n)] + ['Supply']) tableutils.printmat(C) elif sys.argv[1] == 'run': rc, Value, G = solve_model(C) T = [] for i in range(m): T.append([0 for j in range(n + 1)]) tot = 0 for j in range(n): T[i][j] = int(G[i][j]) tot += int(G[i][j]) T[i][-1] = tot TT = [] for j in range(n): TT.append(sum([T[i][j] for i in range(m)])) TT.insert(0, 'Total') T.append(TT) for i in range(m): T[i].insert(0, 'Plant ' + str(i)) T.insert(0, ['From/To'] + ['City ' + str(i) for i in range(n)] + ['Total']) tableutils.printmat(T)
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=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 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(): 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(): import sys import random import tableutils n=5 m=3 C=[] if len(sys.argv)<=1: print('Usage is main [data|run|pairs] [seed]') return elif len(sys.argv)>2: random.seed(int(sys.argv[2])) C,Cap=gen_data(n,m) if sys.argv[1]=='data': for j in range(m): for i in range(n): C[j][i].insert(0,'N'+str(i)) C[j][-1].insert(0,'Demand') C[j].insert(0,['Comm '+str(j)]+['N'+str(i) for i in range(n)]+['Supply']) tableutils.printmat(C[j]) elif sys.argv[1]=='run': rc,Val,x=solve_model(C,Cap,True) for j in range(m): for i in range(n): x[j][i].insert(0,'N'+str(i)) x[j].insert(0,['Comm '+str(j)]+['N'+str(i) for i in range(n)]) tableutils.printmat(x[j]) elif sys.argv[1]=='pairs': n=13 S=[0,2] if len(sys.argv)>2: random.seed(int(sys.argv[2])) C = shortest_path.gen_data(n) rc,Paths,Costs=solve_all_pairs(C,S) for i in range(len(S)): print '{0}-Target'.format(S[i]),'Cost','[Path]' for v in range(n): if v != S[i]: print v,Costs[i][v],'{0}'.format(Paths[i][v])
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 = 12 if len(sys.argv) <= 1: print('Usage is main [data|run] [seed]') return elif len(sys.argv) >= 3: random.seed(int(sys.argv[2])) C = gen_data(n) if sys.argv[1] == 'data': T = [] for i in range(n): TT = [C[i][0], C[i][1]] s = '{' for j in C[i][2]: s = s + ' ' + str(j) s = s + ' }' TT.append(s) T.append(TT) T.insert(0, ['Task', 'Duration', 'Preceding tasks']) tableutils.printmat(T, True) elif sys.argv[1] == 'run' or sys.argv[1] == 'runclp': if sys.argv[1] == 'run': rc, V, G = solve_model(C) else: rc, V, G = solve_model_clp(C) T = [] TT = ['Task'] + [C[i][0] for i in range(n)] T.append(TT) TT = ['Start'] + [int(G[i]) for i in range(n)] T.append(TT) TT = ['End'] + [int(G[i] + C[i][1]) for i in range(n)] T.append(TT) 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=8 m=3 if len(sys.argv)<=1: print('Usage is main [raw|ref|run] [seed]') return elif len(sys.argv)>=3: random.seed(int(sys.argv[2])) C=gen_raw(n) D=gen_refined(m) if sys.argv[1]=='raw': for i in range(n): C[i].insert(0,'R'+str(i)) C.insert(0,['Gas','Octane', 'Availability','Cost']) tableutils.printmat(C) elif sys.argv[1]=='ref': for i in range(m): D[i].insert(0,'F'+str(i)) D.insert(0,['Gas','Octane','Min demand.', 'Max demand.','Price']) tableutils.printmat(D) elif sys.argv[1]=='run': rc,Value,G=solve_gas(C,D) Price=0.0 Cost=0.0 T=[] for i in range(n+2): T=T+[[0]*(2+m)] for i in range(n): for j in range(m): T[i][j] = round(G[i][j],2) T[i][m]=round(sum([G[i][j] for j in range(m)]),2) T[i][m+1]=round(sum([G[i][j]*C[i][2] for j in range(m)]),2) Price += sum([G[i][j]*D[j][3] for j in range(m)]) for j in range(m): T[n][j]=round(sum(G[i][j] for i in range(n)),2) T[n+1][j]=round(sum([G[i][j]*D[j][3] for i in range(n)]),2) Cost += sum([G[i][j]*C[i][2] for i in range(n)]) T.insert(0,['F0','F1','F2','Barrels','Cost']) for i in range(len(T)): if i == 0: T[i].insert(0,"") elif i <= n: T[i].insert(0,"R"+str(i-1)) elif i == n+1: T[i].insert(0,"Barrels") else: T[i].insert(0,"Price") T[2+n][2+m]='{0:.2f}'.format(Price-Cost) tableutils.printmat(T)
def main(): import sys import random import tableutils nbdiv = 2 nbteam = [6, 7, 8] if len(sys.argv) <= 1: print('Usage is main [data|run|big] [seed]') return elif len(sys.argv) >= 3: random.seed(int(sys.argv[2])) D, T = gen_data(nbdiv, nbteam) if sys.argv[1] == 'data': R = [['(Intra Inter G/W Weeks)', tableutils.set2string(T)]] for i in range(len(D)): R.append( ['Division ' + str(i) + ' teams', tableutils.set2string(D[i])]) tableutils.printmat(R) elif sys.argv[1] in ['run', 'big', 'bug']: if sys.argv[1] == 'big': D, T = gen_data(4, [6]) T = (3, 2, 1, 52) R = [['(Intra Inter G/W Weeks)', tableutils.set2string(T)]] for i in range(len(D)): R.append([ 'Division ' + str(i) + ' teams', tableutils.set2string(D[i]) ]) tableutils.printmat(R) rc, v, Cal = solve_model_big(D, T) elif sys.argv[1] == 'bug': D = [[0, 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]] T = (3, 1, 2, 28) rc, v, Cal = solve_model_big(D, T) else: rc, v, Cal = solve_model(D, T) if rc != 0: print('Infeasible') else: R = [['Week', 'Matches']] nbWeeks = T[3] week = 0 for matches in Cal: RR = [] for match in matches: RR.append(str(match[0]) + ' vs ' + str(match[1])) RR.insert(0, week) R.append(RR) week += 1 tableutils.printmat(R, True, 0)
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 nbdiv=2 nbteam=[6,7,8] if len(sys.argv)<=1: print('Usage is main [data|run|big] [seed]') return elif len(sys.argv)>=3: random.seed(int(sys.argv[2])) D,T=gen_data(nbdiv,nbteam) if sys.argv[1]=='data': R=[['(Intra Inter G/W Weeks)',tableutils.set2string(T)]] for i in range(len(D)): R.append(['Division '+str(i)+' teams',tableutils.set2string(D[i])]) tableutils.printmat(R) elif sys.argv[1]=='run' or sys.argv[1]=='big': if sys.argv[1]=='big': D,T=gen_data(4,[6]) T=(3,2,1,52) R=[['(Intra Inter G/W Weeks)',tableutils.set2string(T)]] for i in range(len(D)): R.append(['Division '+str(i)+' teams',tableutils.set2string(D[i])]) tableutils.printmat(R) rc,v,Cal=solve_model_big(D,T) else: rc,v,Cal=solve_model(D,T) if rc != 0: print 'Infeasible' else: R=[['Week', 'Matches', str(v)]] nbWeeks=T[3] week = 0 for matches in Cal: RR=[] for match in matches: RR.append(str(match[0]) + ' vs ' + str(match[1])) RR.insert(0,week) R.append(RR) week+=1 tableutils.printmat(R,True,0)
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 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 m = 9 n = 7 k = 5 if len(sys.argv) <= 1: print('Usage is main [content|target|cost|inventory|run] [seed]') return elif len(sys.argv) > 2: random.seed(int(sys.argv[2])) C = gen_data_content(m, n) T = gen_data_target(C) K = gen_data_cost(m, k) I = gen_data_inventory(m) if sys.argv[1] == 'content': for j in range(m): C[j].insert(0, 'O' + str(j)) C.insert(0, [''] + ['A' + str(i) for i in range(n)]) tableutils.printmat(C, False, 1) elif sys.argv[1] == 'target': T.insert(0, [''] + ['A' + str(i) for i in range(n)]) T[1].insert(0, 'Min') T[2].insert(0, 'Max') tableutils.printmat(T, True, 1) elif sys.argv[1] == 'cost': for j in range(m): K[j].insert(0, 'O' + str(j)) K.insert(0, [''] + ['Month ' + str(i) for i in range(k)]) tableutils.printmat(K) elif sys.argv[1] == 'inventory': for j in range(m): I[j].insert(0, 'O' + str(j)) I.insert(0, ['Oil', 'Held']) tableutils.printmat(I) elif sys.argv[1] == 'run': Demand = 5000 Limits = [500, 2000] Cost = 5 rc, Value, B, L, H, P, A, CP, CS = solve_model(C, T, K, I, Demand, Cost, Limits) if len(B): A.append([0 for l in range(len(A[0]))]) for j in range(len(A) - 1): for l in range(len(A[0])): A[j][l] = A[j][l] / P[l] A[-1][l] += A[j][l] for j in range(m): B[j].insert(0, 'O' + str(j)) L[j].insert(0, 'O' + str(j)) H[j].insert(0, 'O' + str(j)) for l in range(n): A[l].insert(0, 'A' + str(l)) A[-1].insert(0, 'Total') B.insert(0, ['Buy qty'] + ['Month ' + str(i) for i in range(k)]) L.insert(0, ['Blend qty'] + ['Month ' + str(i) for i in range(k)]) H.insert(0, ['Hold qty'] + ['Month ' + str(i) for i in range(k)]) A.insert(0, ['Acid %'] + ['Month ' + str(i) for i in range(k)]) P = [P] P[0].insert(0, 'Prod qty') CP = [CP] CP[0].insert(0, 'P. Cost') CS = [CS] CS[0].insert(0, 'S. Cost') tableutils.printmat(B, True, 1) tableutils.printmat(L, True, 1) tableutils.printmat(H, True, 1) tableutils.printmat(P, True, 1) tableutils.printmat(CP, True, 2) tableutils.printmat(CS, True, 2) tableutils.printmat(A, True, 1)
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 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)