/fish_tank

Primary LanguageJavaScriptApache License 2.0Apache-2.0

fish_tank

This is the begining of my genetic learning algorithm in Node. I built it at a hackathon for fun but plan to add more to it.

For a quick intro to what I was trying to acomplish check out This Youtube Video.

I started out with tick tack toe instead. There is still a lot to go. Eventually I have an idea for a fully functional game 2d top view simulation game. Connect with me if you have any interest in building a much larger game.

If you want to run it just clone it and runnode cmd.js. It should generate and battle two or more 'Fish'. Feel free to play with the settings.

##Configuring Basically you write the game first then pass in the inputs and outputs var fish_tank = new lib.FishTank({ ...});

The options you pass in expect a couple of things: ###Inputs: An object that contains a number of functions that will return a value that will be used by the Fish to make a decision.

var fish_tank = new lib.FishTank({
    inputs:{
        a1:function(){
            return t_board.a[1];
        },
        
    },
    ... 

###Outputs: Out puts is an object where each property is a function and one of the possible moves it can make. Return false if that move is not possible.

var fish_tank = new lib.FishTank({
    outputs:{
        a1:function(){
            if(this.has_moved){
                return false;
            }
            if(t_board.a[1]){
                return false;
            }
            t_board.a[1] = this.id;
            this.has_moved = true;
            return true;
        },... 

###Score: This gets run once per Tick, bacsically once per decision cycle, to determine what Fish is doing the best.

var fish_tank = new lib.FishTank({
    score:function(fish, next){
        var col = {};
        for(var i in t_board){

            var row = 0;
            for(var ii in t_board[i]){
                if(!col[ii]){
                    col[ii] = 0;
                }
                if(t_board[i][ii] == fish.id){
                    col[ii] += 1;
                    row += 1;
                }
            }
            if(row >= 3 || col[i] >= 3){
                fish.score += 10;
                next();
            }
        }

        next();
    },...

###On Tick: The on_tick function runs once per decision cycle and basically does clean up or updates any display you might have.

var fish_tank = new lib.FishTank({
    on_tick:function(next){
        console.log(' --------------------------------  ');
        var move_ct = 0;
        /*
            Print out what is going on or update graphics...
        */
        return next();
    },..

}); ##Random Note: http://en.wikipedia.org/wiki/Hebbian_theory https://www.youtube.com/watch?v=_m97_kL4ox0