Exemple #1
0
def sort_bricks_flex(bricks, model):
    build_que = list(bricks)

    # separate layers
    layers = [0]
    for i in range(0, len(bricks) - 1):
        if bricks[i]['z'] != bricks[i + 1]['z']:
            layers.append(i + 1)
    layers.append(len(bricks))

    # find non-disassemblable
    sub_bricks = []
    remaining_bricks = []
    for i in range(0, len(layers) - 1):
        temp_bricks, opt = dis.sort_bricks_dis(bricks[layers[i]:layers[i + 1]],
                                               copy.deepcopy(model))
        if opt == 'n':
            sub_bricks.append(temp_bricks)
        else:
            sub_bricks.append([])
        for j in range(layers[i], layers[i + 1]):
            flag = 0
            for k in range(0, len(temp_bricks)):
                if fd.match_bricks(bricks[j], temp_bricks[k]) == 1:
                    flag = 1
            if flag == 0:
                remaining_bricks.append(bricks[j])
    print "bricks", sub_bricks

    # get replacement bricks for flexible assembly
    updated_model = fd.update_model(remaining_bricks, copy.deepcopy(model))
    changed_model = copy.deepcopy(model)
    for i in range(0, len(sub_bricks)):
        if len(sub_bricks[i]) != 0:
            replaced, replacement = get_replaceable(sub_bricks[i],
                                                    updated_model)
            for j in range(layers[i], layers[i + 1]):
                if fd.match_bricks(bricks[j], replaced) == 1:
                    changed_model = fd.update_model(
                        [replaced], copy.deepcopy(changed_model))
                    changed_model = change_model(replacement,
                                                 copy.deepcopy(changed_model))
                    build_que[j] = replacement

    return build_que, changed_model, 'y'
Exemple #2
0
def main():
    ipt = raw_input("Robot connected?(y/n)")
    if ipt == "y":
        c, ser_ee = initialize()
        # loop
        print c.recv(1024)
        inp = raw_input("Continue?")
        msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)

    while True:
        task = raw_input("task: ")
        if task == "o":
            ic.super_serial_send(ser_ee, "G", 51)
        if task == "c":
            ic.super_serial_send(ser_ee, "G", 49)
        if task == "cal":
            ipt = raw_input("Continue?")
            lm.grid_pick(c, ser_ee, 0, 1, 0, 0)
            lm.grid_place(c, ser_ee, 0, 1, 0, 0)
            ipt = raw_input("Continue?")
            lm.grid_pick(c, ser_ee, 30, 1, 0, 0)
            lm.grid_place(c, ser_ee, 30, 1, 0, 0)
            ipt = raw_input("Continue?")
            lm.grid_pick(c, ser_ee, 30, 13, 0, 0)
            lm.grid_place(c, ser_ee, 30, 13, 0, 0)
            ipt = raw_input("Continue?")
            lm.grid_pick(c, ser_ee, 0, 13, 0, 0)
            lm.grid_place(c, ser_ee, 0, 13, 0, 0)
            ipt = raw_input("Continue?")
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
        if task == "stack":
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
            time.sleep(3)
            lm.stack_pick(c, ser_ee, 0, 1, 2, 0, stack=3)
            lm.grid_place(c, ser_ee, 30, 1, 2, 0)
        if task == "rot":
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
            ic.socket_send(c, sCMD=300)
            current_Pose = ic.get_ur_position(c, 1)
            demand_Pose = {
                "x": current_Pose[0],
                "y": current_Pose[1],
                "z": current_Pose[2],
                "rx": current_Pose[3],
                "ry": current_Pose[4],
                "rz": current_Pose[5]
            }
            print "current_Pose: ", demand_Pose
            demand_Pose = dict(lm.smooth_rotate(c, 0, R=20))
            print "demand_Pose: ", demand_Pose
            ipt = raw_input("continue?")
            msg = ic.safe_ur_move(c, Pose=demand_Pose, CMD=8)


#        if task == "lego":
#            #time.sleep(5)
#            ipt = raw_input("Open?(y/n)")
#            if ipt == "y":
#                ic.super_serial_send(ser_ee,"G",51)
#            for i in range(0,3):
#                for j in range(0,4):
#                    for k in range(0,2):
#                        lm.grid_pick(c,ser_ee,j*8+3,k*6+1,4,0)
#                        lm.grid_place(c,ser_ee,j*8+3,k*6+7,4,0)
#                    msg = ic.safe_ur_move(c,Pose=dict(wp.home_joints),CMD=2)
#                for j in range(0,4):
#                    for k in range(0,2):
#                        lm.grid_pick(c,ser_ee,27-j*8,13-k*6,4,0)
#                        lm.grid_place(c,ser_ee,27-j*8,7-k*6,4,0)
#                    msg = ic.safe_ur_move(c,Pose=dict(wp.home_joints),CMD=2)
        if task == "lego":
            ic.socket_send(c, sCMD=300)
            lm.grid_pick(c, ser_ee, 0, 1, 0, 0)
        if task == "pt":
            #time.sleep(5)
            ipt = raw_input("Open?(y/n)")
            if ipt == "y":
                ic.super_serial_send(ser_ee, "G", 51)
            for i in range(0, 4):
                for j in range(0, 4):
                    for k in range(0, 2):
                        lm.grid_pick(c, ser_ee, ((j + k) * 8 + 3) % 32,
                                     k * 6 + 1, 1, 0)
                        lm.grid_place(c, ser_ee, ((j + k + 1) * 8 + 3) % 32,
                                      k * 6 + 7, 1, 0)
                    msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
                for j in range(0, 4):
                    lm.grid_pick(c, ser_ee, j * 8 + 3, 13, 1, 0)
                    lm.grid_place(c, ser_ee, ((j + 1) * 8 + 3) % 32, 1, 1, 0)
                msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)

        if task == "wp":
            msg = ic.safe_ur_move(c, Pose=dict(wp.feed_stow_wp_joints), CMD=2)
        if task == "pose":
            current_Pose = ic.get_ur_position(c, 1)
            print "current pose: ", current_Pose
        if task == "joints":
            current_Joints, current_Grip = ic.get_ur_position(c, 3)
            print "current joints: ", current_Joints

        if task == "dis":
            model = fd.import_file("example.txt")
            bricks = fd.decode_file(model)
            que, opt = dis.sort_bricks_dis(bricks, model)
            print opt
            print "x\ty\tp\tr\tex\tey"
            for i in range(0, len(que)):
                print que[i]['x'], '\t', que[i]['y'], '\t', que[i][
                    'p'], '\t', que[i]['r'], '\t', que[i]['ye'], '\t', que[i][
                        'xe']
            lm.clean_disassemble(c, ser_ee, que)

        if task == "disre":
            ipt = raw_input("Open?(y/n)")
            if ipt == "y":
                ic.super_serial_send(ser_ee, "G", 51)
            model = fd.import_file("examplere.txt")
            bricks = fd.decode_file(model)
            que, opt = dis.sort_bricks_dis(bricks, model)
            print opt
            print "x\ty\tp\tr\tex\tey"
            for i in range(0, len(que)):
                print que[i]['x'], '\t', que[i]['y'], '\t', que[i][
                    'p'], '\t', que[i]['r'], '\t', que[i]['ye'], '\t', que[i][
                        'xe']
            ipt = raw_input("continue?")
            #lm.assemble(c,ser_ee,bricks)
            #ipt = raw_input("continue?")
            lm.clean_disassemble(c, ser_ee, que)

        if task == "ass":
            model = fd.import_file("example.txt")
            bricks = fd.decode_file(model)
            que, opt = ass.sort_bricks_ass(bricks, model)
            print opt
            print "x\ty\tp\tr\tex\tey"
            for i in range(0, len(que)):
                print que[i]['x'], '\t', que[i]['y'], '\t', que[i][
                    'p'], '\t', que[i]['r'], '\t', que[i]['ye'], '\t', que[i][
                        'xe']
            ipt = raw_input('Continue?')
            if ipt == 'y':
                lm.clean_assemble(c, ser_ee, que)

        if task == "assre":
            ipt = raw_input("Open?(y/n)")
            if ipt == "y":
                ic.super_serial_send(ser_ee, "G", 51)
            model = fd.import_file("examplere.txt")
            bricks = fd.decode_file(model)
            que, opt = ass.sort_bricks_ass(bricks, model)
            print opt
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'] + que[i][
                        'p'], ', ', que[i]['z']
                else:
                    print que[i]['x'] + que[i]['p'], ', ', que[i][
                        'y'], ', ', que[i]['z']
            ipt = raw_input("continue?")
            #lm.assemble(c,ser_ee,bricks)
            #ipt = raw_input("continue?")
            lm.assemble(c, ser_ee, que)

        if task == "i":
            model = fd.import_file("example.txt")
            #print get_size(model)

        if task == "stow":
            h = int(raw_input("H: "))
            s = int(raw_input("stack: "))
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
            if s == 2:
                lm.feed_place2(c, ser_ee, sH=h)
            lm.feed_place(c, ser_ee, H=h)
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
        if task == "pick":
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)
            h = int(raw_input("H: "))
            x = int(raw_input("x: "))
            s = int(raw_input("stack: "))
            lm.feed_pick(c, ser_ee, X=x, H=h, stack=s)
            msg = ic.safe_ur_move(c, Pose=dict(wp.home_joints), CMD=2)

        if task == "ls":
            model = fd.import_file("example.txt")
            bricks = fd.decode_file(model)
            #tic = time.time()
            que, opt, p = ass.sort_bricks_ass(bricks, copy.deepcopy(model))
            #print "sort time = ", time.time()-tic
            #print "Sort output: ", opt
            #print "total cost = ",ass.list_cost(que,copy.deepcopy(model))
            #print ""
            #for i in range(0,len(que)):
            #    if que[i]['r'] == 0 or que[i]['r'] == 180:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',que[i]['ye'],', ',que[i]['xe']
            #    else:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',que[i]['xe'],', ',que[i]['ye']

            #for i in range(0,len(que)):
            #    if que[i]['r'] == 0 or que[i]['r'] == 180:
            #        print que[i]['x'],', ',que[i]['y']+que[i]['p'],', ',que[i]['z'],', ',que[i]['ye'],', ',que[i]['xe']
            #    else:
            #        print que[i]['x']+que[i]['p'],', ',que[i]['y'],', ',que[i]['z'],', ',que[i]['xe'],', ',que[i]['ye']

            #ipt = raw_input("continue?")
            #tic = time.time()
            #delay = lm.assemble(c,ser_ee,que)
            #tock = time.time()
            print "----------- assembly prob ----------"
            print "               ", p * 100, '%'
            print "----------- assembly time ----------"
            print "               ", 14.8 * len(que)

            #ipt = raw_input("continue?")
            #model = fd.import_file("example.txt")
            #bricks = fd.decode_file(model)
            #tic = time.time()
            que, opt = dis.sort_bricks_dis(bricks, copy.deepcopy(model))
            #print "dis time = ", time.time()-tic
            print "Sort output: ", opt
            #print "total cost = ",ass.list_cost(que,copy.deepcopy(model))
            #for i in range(0,len(que)):
            #    if que[i]['r'] == 0 or que[i]['r'] == 180:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',que[i]['ye'],', ',que[i]['xe']
            #    else:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',que[i]['xe'],', ',que[i]['ye']
            #tic1 = time.time()
            #lm.disassemble(c,ser_ee,que)
            #toc1 = time.time()
            if opt == 'y':
                print "--------- disassembly prob  --------"
                print "               ", (0.999**len(que)) * 100, '%'
            if opt == 'n':
                print "--------- disassembly prob  ---------"
                print "               ", 0, '%'
            print "--------- disassembly time  --------"
            print "               ", 20.8 * len(que)
            print ""
            print ""
            print ""
            print ""
        if task == "lsflex":
            model = fd.import_file("example.txt")
            bricks = fd.decode_file(model)
            flex, updated_model, opt = flx.sort_bricks_flex(bricks, model)
            que, opt, p = ass.sort_bricks_ass(flex,
                                              copy.deepcopy(updated_model))

            print "----------- assembly prob ----------"
            print "               ", p * 100, '%'
            print "----------- assembly time ----------"
            print "               ", 14.8 * len(que)

            que, opt = dis.sort_bricks_dis(flex, copy.deepcopy(updated_model))
            if opt == 'y':
                print "--------- disassembly prob  --------"
                print "               ", (0.999**len(que)) * 100, '%'
            if opt == 'n':
                print "--------- disassembly prob  ---------"
                print "               ", 0, '%'
            print "--------- disassembly time  --------"
            print "               ", 20.8 * len(que)
            print ""
            print ""
            print ""
            print ""
        if task == "re":
            model1 = fd.import_file("example.txt")
            bricks1 = fd.decode_file(model1)
            model2 = fd.import_file("examplere.txt")
            bricks2 = fd.decode_file(model2)
            dis_list, ass_list = rea.reassemble(bricks1, bricks2, model1,
                                                model2)
            #print "dis_list :",dis_list
            #print "as_list :",ass_list
            #ipt = raw_input("continue?")
            que, opt = dis.sort_bricks_dis(dis_list, copy.deepcopy(model1))
            print "disassembly sort output: ", opt
            print "-------------- remove --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z']
            ipt = raw_input("continue?")
            lm.disassemble(c, ser_ee, que)
            print ""
            print ""
            que, opt = ass.sort_bricks_ass(ass_list, copy.deepcopy(model2))
            print "assembly sort output: ", opt
            print "-------------- build  --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z", ",", " ex", ",", " ey"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i][
                            'z'], ', ', -que[i]['ye'], ', ', que[i]['xe']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', que[
                            i]['xe'], ', ', que[i]['ye']
            ipt = raw_input("continue?")
            lm.assemble(c, ser_ee, que)

        if task == 'flex':
            ipt = int(raw_input("model1?"))
            if ipt == 1:
                model = fd.import_file("model1.txt")
            elif ipt == 2:
                model = fd.import_file("model2.txt")
            elif ipt == 3:
                model = fd.import_file("model3.txt")
            elif ipt == 4:
                model = fd.import_file("model4.txt")
            elif ipt == 5:
                model = fd.import_file("model5.txt")
            elif ipt == 6:
                model = fd.import_file("model6.txt")
            bricks = fd.decode_file(model)
            que, updated_model, opt = flx.sort_bricks_flex(bricks, model)
            print "flex sort output: ", opt
            print "-------------- build  --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z", ",", "ex", ",", "ey", ",", " b"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', -que[
                            i]['ye'], ', ', que[i]['xe'], ', ', que[i]['b']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', que[
                            i]['xe'], ', ', que[i]['ye'], ', ', que[i]['b']
            ipt = raw_input("continue?")

            que, opt = ass.sort_bricks_ass(que, copy.deepcopy(updated_model))
            print "assembly sort output: ", opt
            print "-------------- build  --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z", ",", "ex", ",", "ey", ",", " b"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', -que[
                            i]['ye'], ', ', que[i]['xe'], ', ', que[i]['b']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', que[
                            i]['xe'], ', ', que[i]['ye'], ', ', que[i]['b']
            print ass.list_cost(que, updated_model)
            ipt = raw_input("continue?")
            tic = time.time()
            delay = lm.assemble(c, ser_ee, que)
            tock = time.time()
            print "----------- assembly time ----------"
            print "               ", tock - tic - delay
            print "------------- resources ------------"
            print "               ", len(que)

            #que,opt = dis.sort_bricks_dis(que,copy.deepcopy(updated_model))
            #print "disassembly sort output: ",opt
            #print "-------------- build  --------------"
            #print "x",","," y",","," p",",","  r",","," z",",","ex",",","ey",","," b"
            #for i in range(0,len(que)):
            #    if que[i]['r'] == 0 or que[i]['r'] == 180:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',-que[i]['ye'],', ',que[i]['xe'],', ',que[i]['b']
            #    else:
            #        print que[i]['x'],', ',que[i]['y'],', ',que[i]['p'],', ',que[i]['r'],', ',que[i]['z'],', ',que[i]['xe'],', ',que[i]['ye'],', ',que[i]['b']
            #ipt = raw_input("continue?")
            #lm.disassemble(c,ser_ee,que)

        if task == "reflex":
            ipt = int(raw_input("model1?"))
            if ipt == 1:
                model1 = fd.import_file("model1.txt")
                model2 = fd.import_file("model2.txt")
            elif ipt == 2:
                model1 = fd.import_file("model2.txt")
                model2 = fd.import_file("model3.txt")
            elif ipt == 3:
                model1 = fd.import_file("model3.txt")
                model2 = fd.import_file("model4.txt")
            elif ipt == 4:
                model1 = fd.import_file("model4.txt")
                model2 = fd.import_file("model5.txt")
            elif ipt == 5:
                model1 = fd.import_file("model5.txt")
                model2 = fd.import_file("model6.txt")

            bricks1 = fd.decode_file(model1)
            #print "1 length: ", len(bricks1)
            bricks2 = fd.decode_file(model2)
            #print "2 length: ", len(bricks2)
            flex1, updated_model1, opt1 = flx.sort_bricks_flex(bricks1, model1)
            flex2, updated_model2, opt2 = flx.sort_bricks_flex(bricks2, model2)
            dis_list, ass_list = rea.reassemble(flex1, flex2, updated_model1,
                                                updated_model2)
            print "dis_list :", dis_list
            print "as_list :", ass_list
            ipt = raw_input("continue?")
            que, opt = dis.sort_bricks_dis(dis_list,
                                           copy.deepcopy(updated_model1))
            print "disassembly sort output: ", opt
            print "-------------- remove --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z']
            ipt = raw_input("continue?")
            tic1 = time.time()
            lm.disassemble(c, ser_ee, que)
            toc1 = time.time()
            bricks_saved = len(que)
            #print "dis length: ", bricks_saved
            #print ""
            #print ""
            que, opt = ass.sort_bricks_ass(ass_list,
                                           copy.deepcopy(updated_model2))
            #print "ass length: ", len(que)
            #print "P(success): ",p
            #print ""
            print "assembly sort output: ", opt
            print "-------------- build  --------------"
            print "x", ",", " y", ",", " p", ",", "  r", ",", " z", ",", " ex", ",", " ey"
            for i in range(0, len(que)):
                if que[i]['r'] == 0 or que[i]['r'] == 180:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i][
                            'z'], ', ', -que[i]['ye'], ', ', que[i]['xe']
                else:
                    print que[i]['x'], ', ', que[i]['y'], ', ', que[i][
                        'p'], ', ', que[i]['r'], ', ', que[i]['z'], ', ', que[
                            i]['xe'], ', ', que[i]['ye']
            ipt = raw_input("continue?")
            tic2 = time.time()
            delay = lm.assemble(c, ser_ee, que)
            toc2 = time.time()

            print "---------- reassembly time ---------"
            print "               ", toc2 - tic2 - delay + toc1 - tic1
            print "------------- resources ------------"
            print "               ", len(que) - bricks_saved
        if task == 'time':
            tic = time.time()
            ipt = raw_input("Refill hopper and press enter to continue")
            toc = time.time()
            print toc - tic
        if task == 'gol':
            nbricks = int(raw_input("Number of starting bricks: "))
            iter = int(raw_input("Number of iterations: "))
            gol.game_of_life(c, ser_ee, nbricks, iter)
Exemple #3
0
def find_bricks(remove, brick, updated_model):
    remove_bricks = [brick]
    if remove_bricks[0]['b'] == 0:
        # -------------- 0 -------------- #
        if remove & 1 == 1:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] + 2, brick['y'],
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'], brick['y'] - 1,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 1 -------------- #
        if remove & 2 == 2:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] + 2, brick['y'] + 1,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 1, brick['y'] - 1,
                                          brick['z'], updated_model)

            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 2 -------------- #
        if remove & 4 == 4:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] + 2, brick['y'] + 2,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 2, brick['y'] - 1,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 3 -------------- #
        if remove & 8 == 8:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] + 2, brick['y'] + 3,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 3, brick['y'] - 1,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 6 -------------- #
        if remove & 64 == 64:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] - 1, brick['y'] + 3,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 3, brick['y'] + 2,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 7 -------------- #
        if remove & 128 == 128:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] - 1, brick['y'] + 2,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 2, brick['y'] + 2,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 8 -------------- #
        if remove & 256 == 256:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] - 1, brick['y'] + 1,
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'] + 1, brick['y'] + 2,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 9 -------------- #
        if remove & 512 == 512:
            if brick['r'] == 0:
                remove_brick = find_brick(brick['x'] - 1, brick['y'],
                                          brick['z'], updated_model)
            else:
                remove_brick = find_brick(brick['x'], brick['y'] + 2,
                                          brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

    elif remove_bricks[0]['b'] == 1:
        # -------------- 0 -------------- #
        if remove & 1 == 1:
            remove_brick = find_brick(brick['x'], brick['y'] + 1, brick['z'],
                                      updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 1 -------------- #
        if remove & 2 == 2:
            remove_brick = find_brick(brick['x'] + 1, brick['y'] + 1,
                                      brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 2 -------------- #
        if remove & 4 == 4:
            remove_brick = find_brick(brick['x'] + 2, brick['y'], brick['z'],
                                      updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 3 -------------- #
        if remove & 8 == 8:
            remove_brick = find_brick(brick['x'] + 2, brick['y'] + 1,
                                      brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 4 -------------- #
        if remove & 16 == 16:
            remove_brick = find_brick(brick['x'] + 1, brick['y'] + 2,
                                      brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 5 -------------- #
        if remove & 32 == 32:
            remove_brick = find_brick(brick['x'], brick['y'] + 2, brick['z'],
                                      updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 6 -------------- #
        if remove & 64 == 64:
            remove_brick = find_brick(brick['x'] - 1, brick['y'] + 1,
                                      brick['z'], updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

        # -------------- 7 -------------- #
        if remove & 128 == 128:
            remove_brick = find_brick(brick['x'] - 1, brick['y'], brick['z'],
                                      updated_model)
            if remove_brick != None:
                remove_bricks.append(remove_brick)

    opt = 'n'
    while opt == 'n':
        remove_bricks = copy.deepcopy(remove_duplicates(remove_bricks))
        new_list, opt = dis.sort_bricks_dis(remove_bricks, updated_model)
        if opt == 'n':
            for i in range(0, len(new_list)):
                r_bricks = list(find_bricks(remove, brick, updated_model))
                for j in range(0, len(r_bricks)):
                    remove_bricks.append(r_bricks[j])

    return remove_bricks
Exemple #4
0
def game_of_life(c,ser_ee,nbricks=10,iter=100):
    bricks,model = initialise_grid(nbricks)
    assembly = []
    disassembly = []

    print "------------ initial state ------------"
    print "x",","," y"
    for i in range(0,len(bricks)):
        print bricks[i]['x'],', ',bricks[i]['y']

    que,opt = ass.sort_bricks_ass(copy.deepcopy(bricks),copy.deepcopy(model))
    print "\nAssembly sort output: ",opt
    print "-------------- queue --------------"
    #print "x",","," y",","," p",",","  r",","," ex",","," ey"
    print "x\ty\tp\tr\tex\tey"
    for i in range(0,len(que)):
        print que[i]['x'],'\t',que[i]['y'],'\t',que[i]['p'],'\t',que[i]['r'],'\t',que[i]['ye'],'\t',que[i]['xe']
    assembly.append(que)
    #lm.clean_assemble(c,ser_ee,que,t=False)


    for i in range(0,iter):
        #time.sleep(20)
        new_bricks,new_model = update_grid(bricks,copy.deepcopy(model))
        dis_list, ass_list = rea.reassemble(bricks,new_bricks,copy.deepcopy(model),copy.deepcopy(new_model))
        print "-------------- new state --------------"
        for i in range(0,len(new_bricks)):
            print new_bricks[i]['x'],', ',new_bricks[i]['y']

        #raw_input("Continue?")

        que,opt = dis.sort_bricks_dis(dis_list,copy.deepcopy(model))
        print "\nDisassembly sort output: ",opt
        print "-------------- queue --------------"
        #print "x",","," y",","," p",",","  r",","," ex",","," ey"
        print "x\ty\tp\tr\tex\tey"
        for i in range(0,len(que)):
            print que[i]['x'],'\t',que[i]['y'],'\t',que[i]['p'],'\t',que[i]['r'],'\t',que[i]['ye'],'\t',que[i]['xe']
        disassembly.append(que)
        #lm.clean_disassemble(c,ser_ee,que,t=False)

        que,opt = ass.sort_bricks_ass(ass_list,copy.deepcopy(new_model))
        print "\nAssembly sort output: ",opt
        print "-------------- queue --------------"
        #print "x",","," y",","," p",",","  r",","," ex",","," ey"
        print "x\ty\tp\tr\tex\tey"
        for i in range(0,len(que)):
            print que[i]['x'],'\t',que[i]['y'],'\t',que[i]['p'],'\t',que[i]['r'],'\t',que[i]['ye'],'\t',que[i]['xe']
        assembly.append(que)
        #lm.clean_assemble(c,ser_ee,que,t=False)

        
        if len(ass_list) == 0 and len(dis_list) == 0:
            #print 'No bricks remaining'
            break
        bricks = copy.deepcopy(new_bricks)
        model = copy.deepcopy(new_model)

    ipt = raw_input('Continue?(y/n)')
    if ipt == 'y':
        lm.clean_assemble(c,ser_ee,assembly[0],t=False)
        for i in range(0,iter):
            time.sleep(20)
            lm.clean_disassemble(c,ser_ee,disassembly[i],t=False)
            lm.clean_assemble(c,ser_ee,assembly[i+1],t=False)

    return