Back
/*
 * (C) 2003-2009 Spolecne s.r.o.
 * Author: Tomas Straka
 * www.spoledge.com
 *
 * Written permission must be obtained in advance from Spolecne s.r.o for any form of
 * reproduction, use or distribution.
 */
package ants.models.thrakia;

import ants.EventQueue;
import ants.models.thrakia.ZygothicGraph.Mediator;

/**
 * The implementation of the ant's network. The connections between the neurons
 * can be changed to achieve different behaviour of the ant.
 */
public class ThrakiaNetwork {

    /**
     * Tentacles
     */
    private Tentacle leftTentacle;
    private Tentacle rightTentacle;

    /**
     * Legs
     */
    private OutputDBC leftLegFwd;
    private OutputDBC leftLegBackwd;
    private OutputDBC rightLegFwd;
    private OutputDBC rightLegBackwd;

    /**
     * Accessors for the ant
     */
    public Tentacle getLeftTentacle() {
        return leftTentacle;
    }

    public Tentacle getRightTentacle() {
        return rightTentacle;
    }

    public OutputDBC getLeftLegFwd() {
        return leftLegFwd;
    }

    public OutputDBC getLeftLegBackwd() {
        return leftLegBackwd;
    }

    public OutputDBC getRightLegFwd() {
        return rightLegFwd;
    }

    public OutputDBC getRightLegBackwd() {
        return rightLegBackwd;
    }
    
    /**
     * Make the network right in the constructor. Because synapses connects
     * towards target (not source), we must build the network from the bottom.<br/>
     * Let's have max. # of receptors on a synapse = 100.
     */
    public ThrakiaNetwork(EventQueue eq) {
        leftLegFwd = new OutputDBC(2000);   // numberOfConnectedNeurons x maxNumberOfReceptors per Mediator and Synapse x maxFrequency
        leftLegBackwd = new OutputDBC(2000);  // 1 x 100 x (0.2 / 0.01) = 2000;
        rightLegFwd = new OutputDBC(2000);
        rightLegBackwd = new OutputDBC(2000);

        // preset named number of receptors
        Integer  [] i_50_50 = 5050 };
        Integer  [] i_80_20 = 8020 };
        Integer  [] i_10_9 =  10};

        // preset named types of receptors
        Mediator [] mBlackRed = Mediator.BLACK, Mediator.RED };
        Mediator [] mOrangeCyan = Mediator.ORANGE, Mediator.CYAN };
        
        // the network - 11 neurons
        Neuron neuron1 = new Neuron("1", eq, new Synapse(leftLegFwd, Mediator.RED, 100));
        
        Neuron neuron2 = new Neuron("2", eq, new Synapse(rightLegFwd, Mediator.RED, 100));
        
        Synapse [] synapse3 = new Synapse(leftLegFwd, Mediator.ORANGE, 90),
                                 new Synapse(rightLegFwd, Mediator.BLUE, 100),
                                 new Synapse(leftLegBackwd, Mediator.BLUE, 100) };
        Neuron neuron3 = new Neuron("3", eq, synapse3);

        Synapse [] synapse4 = new Synapse(rightLegFwd, Mediator.ORANGE, 90),
                                 new Synapse(leftLegFwd, Mediator.BLUE, 100),
                                 new Synapse(rightLegBackwd, Mediator.BLUE, 100) };
        Neuron neuron4 = new Neuron("4", eq, synapse4);
        
        Synapse [] synapse5 = new Synapse(neuron1, Mediator.BLACK, 100)
                                new Synapse(neuron2, Mediator.BLACK, 100),
                                new Synapse(neuron3, mBlackRed, i_50_50),
                                new Synapse(neuron4, mBlackRed, i_50_50) };
        Neuron neuron5 = new Neuron("5", eq, synapse5 );
        
        Synapse [] synapse6 = new Synapse(rightLegBackwd, Mediator.BLACK, 100),
                                new Synapse(neuron2, Mediator.RED, 50),
                                new Synapse(neuron5, mBlackRed, i_80_20) };
        Neuron neuron6 = new Neuron("6", eq, synapse6);
        
        Synapse [] synapse7 = new Synapse(leftLegBackwd, Mediator.BLACK, 100),
                                new Synapse(neuron1, Mediator.RED, 50),
                                new Synapse(neuron5, mBlackRed, i_80_20) };
        Neuron neuron7 = new Neuron("7", eq, synapse7);
        
        Neuron neuron8 = new Neuron("8", eq, new Synapse(neuron4, mOrangeCyan, i_10_9));
        
        Neuron neuron9 = new Neuron("9", eq, new Synapse(neuron3, mOrangeCyan, i_10_9));
        
        Neuron neuron10 = new Neuron("10", eq, new Synapse(neuron4, Mediator.CYAN, 10));
        
        Neuron neuron11 = new Neuron("11", eq, new Synapse(neuron3, Mediator.CYAN, 10));
        
        Synapse [] synapseLeft = new Synapse(neuron6, mBlackRed, i_80_20),
                               new Synapse(neuron8, Mediator.ORANGE, 100),
                               new Synapse(neuron10, Mediator.CYAN, 100) };
        leftTentacle = new Tentacle(eq, synapseLeft);

        Synapse [] synapseRight = new Synapse(neuron7, mBlackRed, i_80_20),
                               new Synapse(neuron9, Mediator.ORANGE, 100),
                               new Synapse(neuron11, Mediator.CYAN, 100) };
        rightTentacle = new Tentacle(eq, synapseRight);
    }
}
Back