Ejemplo n.º 1
0
    def test_component(self):
        s = brica1.VirtualTimeSyncScheduler(1.0)
        ca = brica1.CognitiveArchitecture(s)

        zero = numpy.zeros(3, dtype=numpy.short)
        v = numpy.array([1, 2, 3], dtype=numpy.short)

        CompA = brica1.ConstantComponent()
        CompB = brica1.PipeComponent()
        CompC = brica1.NullComponent()

        ModA = brica1.Module()

        ModA.add_component("CompA", CompA)
        ModA.add_component("CompB", CompB)
        ModA.add_component("CompC", CompC)

        CompA.set_state("out", v)
        CompA.make_out_port("out", 3)
        CompB.make_in_port("in", 3)
        CompB.connect(CompA, "out", "in")
        CompB.make_out_port("out", 3)
        CompB.set_map("in", "out")
        CompC.make_in_port("in", 3)
        CompC.connect(CompB, "out", "in")

        ca.add_submodule("ModA", ModA)

        self.assertTrue((CompA.get_state("out") == v).all())
        self.assertIsNot(CompA.get_state("out"), v)

        self.assertTrue((CompA.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == zero).all())
        self.assertTrue((CompB.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == zero).all())
        self.assertTrue((CompB.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == v   ).all())
        self.assertTrue((CompB.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == v).all())
        self.assertTrue((CompB.get_out_port("out").buffer == v).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == v).all())
Ejemplo n.º 2
0
    def _(bm):
        s = brica1.VirtualTimeSyncScheduler(1.0)
        agent = brica1.Agent(s)

        compA = brica1.ConstantComponent()
        compB = brica1.NullComponent()
        mod = brica1.Module();

        mod.add_component('compA', compA)
        mod.add_component('compB', compB)

        compA.make_out_port('out', 256*256*3)
        compB.make_in_port('in', 256*256*3)

        brica1.connect((compA, 'out'), (compB, 'in'))

        agent.add_submodule('mod', mod)

        for _ in bm:
            agent.step()
Ejemplo n.º 3
0
    mnist = data.load_mnist_data()
    mnist['data'] = mnist['data'].astype(np.float32)
    mnist['data'] /= 255
    mnist['target'] = mnist['target'].astype(np.int32)

    N_train = 60000
    x_train, x_test = np.split(mnist['data'], [N_train])
    y_train, y_test = np.split(mnist['target'], [N_train])
    N_test = y_test.size

    f = open('sda.pkl', 'rb')
    stacked_autoencoder = pickle.load(f)
    f.close()

    scheduler = brica1.VirtualTimeSyncScheduler()
    agent = brica1.Agent(scheduler)
    module = brica1.Module()
    module.add_component("stacked_autoencoder", stacked_autoencoder)
    agent.add_submodule("module", module)

    time = 0.0

    sum_loss1 = 0
    sum_loss2 = 0
    sum_loss3 = 0
    sum_loss4 = 0
    sum_accuracy = 0

    for batchnum in xrange(0, N_test, batchsize):
        x_batch = x_test[batchnum:batchnum + batchsize]
Ejemplo n.º 4
0
    def test_nested(self):
        s = brica1.VirtualTimeSyncScheduler(1.0)
        ca = brica1.CognitiveArchitecture(s)

        zero = numpy.zeros(3, dtype=numpy.short)
        v = numpy.array([1, 2, 3], dtype=numpy.short)

        CompA = brica1.ConstantComponent()
        CompB = brica1.PipeComponent()
        CompC = brica1.NullComponent()

        ModA = brica1.Module()
        ModB = brica1.Module()
        ModC = brica1.Module()

        SupA = brica1.Module()
        SupB = brica1.Module()
        SupC = brica1.Module()

        Top = brica1.Module()

        CompA.set_state("out", v)
        CompA.make_out_port("out", 3)
        CompB.make_in_port("in", 3)
        CompB.make_out_port("out", 3)
        CompB.set_map("in", "out")
        CompC.make_in_port("in", 3)

        ModA.make_out_port("out", 3)
        ModB.make_in_port("in", 3)
        ModB.make_out_port("out", 3)
        ModC.make_in_port("in", 3)

        SupA.make_out_port("out", 3)
        SupB.make_in_port("in", 3)
        SupB.make_out_port("out", 3)
        SupC.make_in_port("in", 3)

        SupA.add_submodule("ModA", ModA)
        SupB.add_submodule("ModB", ModB)
        SupC.add_submodule("ModC", ModC)

        ModA.add_component("CompA", CompA)
        ModB.add_component("CompB", CompB)
        ModC.add_component("CompC", CompC)

        # Out ports must be aliased inside-out
        CompA.alias_out_port(ModA, "out", "out")
        ModA.alias_out_port(SupA, "out", "out")

        # In ports must be aliased outside-in
        ModB.alias_in_port(SupB, "in", "in")
        CompB.alias_in_port(ModB, "in", "in")

        # Out ports must be aliased inside-out
        CompB.alias_out_port(ModB, "out", "out")
        ModB.alias_out_port(SupB, "out", "out")

        # In ports must be aliased outside-in
        ModC.alias_in_port(SupC, "in", "in")
        CompC.alias_in_port(ModC, "in", "in")

        SupB.connect(SupA, "out", "in")
        SupC.connect(SupB, "out", "in")

        Top.add_submodule("SupA", SupA)
        Top.add_submodule("SupB", SupB)
        Top.add_submodule("SupC", SupC)

        ca.add_submodule("Top", Top)

        self.assertTrue((CompA.get_state("out") == v).all())
        self.assertIsNot(CompA.get_state("out"), v)

        self.assertTrue((CompA.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == zero).all())
        self.assertTrue((CompB.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())
        self.assertTrue((ModA.get_out_port("out").buffer  == zero).all())
        self.assertTrue((ModB.get_in_port("in").buffer    == zero).all())
        self.assertTrue((ModB.get_out_port("out").buffer  == zero).all())
        self.assertTrue((SupC.get_in_port("in").buffer    == zero).all())
        self.assertTrue((SupA.get_out_port("out").buffer  == zero).all())
        self.assertTrue((SupB.get_in_port("in").buffer    == zero).all())
        self.assertTrue((SupB.get_out_port("out").buffer  == zero).all())
        self.assertTrue((SupC.get_in_port("in").buffer    == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == zero).all())
        self.assertTrue((CompB.get_out_port("out").buffer == zero).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())
        self.assertTrue((ModA.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((ModB.get_in_port("in").buffer    == zero).all())
        self.assertTrue((ModB.get_out_port("out").buffer  == zero).all())
        self.assertTrue((ModC.get_in_port("in").buffer    == zero).all())
        self.assertTrue((SupA.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((SupB.get_in_port("in").buffer    == zero).all())
        self.assertTrue((SupB.get_out_port("out").buffer  == zero).all())
        self.assertTrue((SupC.get_in_port("in").buffer    == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == v   ).all())
        self.assertTrue((CompB.get_out_port("out").buffer == v   ).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == zero).all())
        self.assertTrue((ModA.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((ModB.get_in_port("in").buffer    == v   ).all())
        self.assertTrue((ModB.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((ModC.get_in_port("in").buffer    == zero).all())
        self.assertTrue((SupA.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((SupB.get_in_port("in").buffer    == v   ).all())
        self.assertTrue((SupB.get_out_port("out").buffer  == v   ).all())
        self.assertTrue((SupC.get_in_port("in").buffer    == zero).all())

        ca.step()

        self.assertTrue((CompA.get_out_port("out").buffer == v).all())
        self.assertTrue((CompB.get_in_port("in").buffer   == v).all())
        self.assertTrue((CompB.get_out_port("out").buffer == v).all())
        self.assertTrue((CompC.get_in_port("in").buffer   == v).all())
        self.assertTrue((ModA.get_out_port("out").buffer  == v).all())
        self.assertTrue((ModB.get_in_port("in").buffer    == v).all())
        self.assertTrue((ModB.get_out_port("out").buffer  == v).all())
        self.assertTrue((ModC.get_in_port("in").buffer    == v).all())
        self.assertTrue((SupA.get_out_port("out").buffer  == v).all())
        self.assertTrue((SupB.get_in_port("in").buffer    == v).all())
        self.assertTrue((SupB.get_out_port("out").buffer  == v).all())
        self.assertTrue((SupC.get_in_port("in").buffer    == v).all())
Ejemplo n.º 5
0
def main():
    parser = argparse.ArgumentParser(
        description='BriCA Minimal Cognitive Architecture with Gym')
    parser.add_argument('mode',
                        help='1:random act, 2: reinforcement learning',
                        choices=['1', '2'])
    parser.add_argument('--dump', help='dump file path')
    parser.add_argument('--episode_count',
                        type=int,
                        default=1,
                        metavar='N',
                        help='Number of training episodes (default: 1)')
    parser.add_argument('--max_steps',
                        type=int,
                        default=20,
                        metavar='N',
                        help='Max steps in an episode (default: 20)')
    parser.add_argument('--config',
                        type=str,
                        default='minimal_CA.json',
                        metavar='N',
                        help='Model configuration (default: minimal_CA.json')
    parser.add_argument('--model',
                        type=str,
                        metavar='N',
                        help='Saved model for visual path')
    parser.add_argument('--no-cuda',
                        action='store_true',
                        default=False,
                        help='disables CUDA training')
    parser.add_argument('--brical',
                        type=str,
                        default='minimalCA.brical.json',
                        metavar='N',
                        help='a BriCAL json file')
    args = parser.parse_args()

    with open(args.config) as config_file:
        config = json.load(config_file)

    nb = brical.NetworkBuilder()
    f = open(args.brical)
    nb.load_file(f)
    if not nb.check_consistency():
        sys.stderr.write("ERROR: " + args.brical + " is not consistent!\n")
        exit(-1)

    if not nb.check_grounding():
        sys.stderr.write("ERROR: " + args.brical + " is not grounded!\n")
        exit(-1)

    observation_dim = config['env']['observation_dim']
    input_shape = [-1, observation_dim]
    motor_obs_dim = config["motor_obs_dim"]

    env = gym.make(config['env']['name'])
    train = {
        "episode_count": args.episode_count,
        "max_steps": args.max_steps,
        'rl_agent': config['rl_agent']
    }

    if args.dump is not None:
        try:
            observation_dump = open(args.dump, mode='w')
        except OSError as e:
            sys.stderr.write(str(e) + '\n')
            sys.exit(1)
    else:
        observation_dump = None

    nb.unit_dic['minimalCA.VisualComponent'].__init__(observation_dim,
                                                      motor_obs_dim)
    nb.unit_dic['minimalCA.MotorComponent'].__init__(observation_dim,
                                                     config["motor_n_action"],
                                                     True, train)

    nb.make_ports()

    if args.model is not None:
        use_cuda = not args.no_cuda and torch.cuda.is_available()
        device = torch.device("cuda" if use_cuda else "cpu")
        if config['visual']['model'] == 'SimpleAE':
            visual_model = SimpleAutoencoder(
                input_shape, config['visual']['model_config']).to(device)
        else:
            raise NotImplementedError('Model not supported: ' +
                                      str(config['model']))
        visual_model.load_state_dict(torch.load(args.model))
        visual_model.eval()
        nb.unit_dic['minimalCA.VisualComponent'].device = device
    else:
        visual_model = None
    nb.unit_dic['minimalCA.VisualComponent'].model = visual_model

    agent_builder = brical.AgentBuilder()
    model = nb.unit_dic['minimalCA.CognitiveArchitecture']
    agent = agent_builder.create_gym_agent(nb, model, env)
    scheduler = brica1.VirtualTimeSyncScheduler(agent)

    for i in range(train["episode_count"]):
        reward_sum = 0.
        last_token = 0
        for j in range(train["max_steps"]):
            scheduler.step()
            nb.unit_dic['minimalCA.VisualComponent'].inputs[
                'token_in'] = model.get_out_port('token_out').buffer
            time.sleep(config["sleep"])
            current_token = agent.get_out_port('token_out').buffer[0]
            if last_token + 1 == current_token:
                reward_sum += agent.get_in_port("reward").buffer[0]
                last_token = current_token
                env.render()
                if observation_dump is not None:
                    observation_dump.write(
                        str(agent.get_in_port("observation").buffer.tolist()) +
                        '\n')
            if agent.env.done:
                agent.env.flush = True
                scheduler.step()
                while agent.get_in_port('token_in').buffer[
                        0] != agent.get_out_port('token_out').buffer[0]:
                    scheduler.step()
                agent.env.reset()
                nb.unit_dic['minimalCA.MotorComponent'].reset()
                nb.unit_dic['minimalCA.VisualComponent'].results[
                    'token_out'] = np.array([0])
                nb.unit_dic['minimalCA.VisualComponent'].out_ports[
                    'token_out'].buffer = np.array([0])
                break
        print(i, "Avr. reward: ", reward_sum / env.spec.max_episode_steps)

    print("Close")
    if observation_dump is not None:
        observation_dump.close()
    env.close()