コード例 #1
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)
コード例 #2
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))
コード例 #3
0
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)
コード例 #4
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))
コード例 #5
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))
コード例 #6
0
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)
コード例 #7
0
def main():
    import sys
    import random
    import tableutils
    nbcourse=7
    nbsets=6
    nbinstructor=5
    nbpairs=2
    if len(sys.argv)<=1:
        print('Usage is main [section|sets|instructor|pairs|run] [seed]')
        return
    elif len(sys.argv)>=3:
        random.seed(int(sys.argv[2]))
    S,nbsection=gen_section(nbcourse)
    R=gen_sets(nbsection,nbsets)
    I=gen_instructor(nbinstructor,nbsets,nbcourse,nbpairs)
    P=gen_pairs(nbpairs,nbsection)
    if sys.argv[1]=='section':
        tableutils.printmat(tableutils.wrapmat(S,[],['Id','Course id','Meeting Time']),True,0)
    elif sys.argv[1]=='sets':
        RR=[]
        for i in range(len(R)):
            RR.append([R[i][0],tableutils.set2string(R[i][1])])
        tableutils.printmat(tableutils.wrapmat(RR,[],['Id','Sections']),True,0)
    elif sys.argv[1]=='instructor':
        RI=[]
        for i in range(len(I)):
            RI.append([I[i][0],
                       tableutils.set2string(I[i][1]),
                       tableutils.set2string(I[i][2]),
                       tableutils.set2string(I[i][3]),
                       tableutils.set2string(I[i][4])])
        tableutils.printmat(tableutils.wrapmat(RI,[],['Id','Load','Course weights','Set weights','Pair weights']),True,0)
    elif sys.argv[1]=='pairs':
        RP=[]
        for i in range(len(P)):
            X=[str('(')+str(e[0])+str(' ')+str(e[1])+str(')') for e in P[i][1]]
            RP.append([P[i][0],tableutils.set2string(X)])
        tableutils.printmat(tableutils.wrapmat(RP,[],['Id','Section pairs']),True,0)
    elif sys.argv[1]=='run':
        rc,x,xs,v=solve_model(S,I,R,P)
        #tableutils.printmat(x)
        #print(xs)
        XS=[]
        for i in range(len(xs)):
            XS.append([xs[i][0], 
                       ['{0:2}'.format(e[0])+' : ('+'{0:2}'.format(e[1][0])+' '+'{0:2}'.format(e[1][1])+' '+'{0:2}'.format(e[1][2])+')' for e in xs[i][1]]])
        tableutils.printmat(tableutils.wrapmat(XS,[],['Instructor','Section (WC WR WP)']),True,1)
コード例 #8
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])
コード例 #9
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)
コード例 #10
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
コード例 #11
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)
コード例 #12
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
コード例 #13
0
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)
コード例 #14
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
コード例 #15
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
コード例 #16
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)
コード例 #17
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))
コード例 #18
0
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]))
コード例 #19
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)
コード例 #20
0
def main():
    import sys
    import random
    import tableutils
    nbcourse = 7
    nbsets = 6
    nbinstructor = 5
    nbpairs = 2
    if len(sys.argv) <= 1:
        print('Usage is main [section|sets|instructor|pairs|run] [seed]')
        return
    elif len(sys.argv) >= 3:
        random.seed(int(sys.argv[2]))
    S, nbsection = gen_section(nbcourse)
    R = gen_sets(nbsection, nbsets)
    I = gen_instructor(nbinstructor, nbsets, nbcourse, nbpairs)
    P = gen_pairs(nbpairs, nbsection)
    if sys.argv[1] == 'section':
        tableutils.printmat(
            tableutils.wrapmat(S, [], ['Id', 'Course id', 'Meeting Time']),
            True, 0)
    elif sys.argv[1] == 'sets':
        RR = []
        for i in range(len(R)):
            RR.append([R[i][0], tableutils.set2string(R[i][1])])
        tableutils.printmat(tableutils.wrapmat(RR, [], ['Id', 'Sections']),
                            True, 0)
    elif sys.argv[1] == 'instructor':
        RI = []
        for i in range(len(I)):
            RI.append([
                I[i][0],
                tableutils.set2string(I[i][1]),
                tableutils.set2string(I[i][2]),
                tableutils.set2string(I[i][3]),
                tableutils.set2string(I[i][4])
            ])
        tableutils.printmat(
            tableutils.wrapmat(RI, [], [
                'Id', 'Load', 'Course weights', 'Set weights', 'Pair weights'
            ]), True, 0)
    elif sys.argv[1] == 'pairs':
        RP = []
        for i in range(len(P)):
            X = [
                str('(') + str(e[0]) + str(' ') + str(e[1]) + str(')')
                for e in P[i][1]
            ]
            RP.append([P[i][0], tableutils.set2string(X)])
        tableutils.printmat(
            tableutils.wrapmat(RP, [], ['Id', 'Section pairs']), True, 0)
    elif sys.argv[1] == 'run':
        rc, x, xs, v = solve_model(S, I, R, P)
        #tableutils.printmat(x)
        #print(xs)
        XS = []
        for i in range(len(xs)):
            XS.append([
                xs[i][0],
                [
                    '{0:2}'.format(e[0]) + ' : (' + '{0:2}'.format(e[1][0]) +
                    ' ' + '{0:2}'.format(e[1][1]) + ' ' +
                    '{0:2}'.format(e[1][2]) + ')' for e in xs[i][1]
                ]
            ])
        tableutils.printmat(
            tableutils.wrapmat(XS, [], ['Instructor', 'Section (WC WR WP)']),
            True, 1)
コード例 #21
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)
コード例 #22
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')
コード例 #23
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'