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)
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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)
예제 #8
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=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)
예제 #11
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
    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)
예제 #13
0
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)
예제 #17
0
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]))
예제 #18
0
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)
예제 #22
0
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])
예제 #24
0
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)
예제 #25
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
예제 #28
0
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)
예제 #29
0
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)
예제 #32
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'
예제 #33
0
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')
예제 #37
0
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)