001        package com.croftsoft.core.ai.neuro.imp;
002    
003        import com.croftsoft.core.ai.neuro.ChannelMut;
004        import com.croftsoft.core.ai.neuro.Neuron;
005        import com.croftsoft.core.lang.NullException;
006        import com.croftsoft.core.sim.Sim;
007    
008        /***********************************************************************
009        * A synapse that reliably opens the channel when the neuron spikes.
010        * 
011        * @version
012        *   $Id: ReliableSynapse.java,v 1.2 2008/07/25 23:32:22 croft Exp $
013        * @since
014        *   2008-07-19
015        * @author
016        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
017        ***********************************************************************/
018    
019        public class  ReliableSynapse
020          implements Sim
021        ////////////////////////////////////////////////////////////////////////
022        ////////////////////////////////////////////////////////////////////////
023        {
024          
025        private final Neuron      presynapticNeuron;
026        
027        private final ChannelMut  channelMut;
028        
029        //
030        
031        private boolean  presynapticNeuronSpiking;
032          
033        ////////////////////////////////////////////////////////////////////////
034        ////////////////////////////////////////////////////////////////////////
035        
036        public  ReliableSynapse (
037          final Neuron      presynapticNeuron,
038          final ChannelMut  channelMut )
039        ////////////////////////////////////////////////////////////////////////
040        {
041          NullException.check (
042            this.presynapticNeuron = presynapticNeuron,
043            this.channelMut        = channelMut );
044        }
045    
046        ////////////////////////////////////////////////////////////////////////
047        ////////////////////////////////////////////////////////////////////////
048    
049        public void  access ( )
050        ////////////////////////////////////////////////////////////////////////
051        {
052          presynapticNeuronSpiking = presynapticNeuron.isSpiking ( );
053        }
054        
055        public void  mutate ( )
056        ////////////////////////////////////////////////////////////////////////
057        {
058          if ( presynapticNeuronSpiking )
059          {
060            channelMut.setOpen ( true );
061          }
062        }
063        
064        ////////////////////////////////////////////////////////////////////////
065        ////////////////////////////////////////////////////////////////////////
066        }