示例#1
0
        public HelperTCell(ITissue parent, int mpLen)
            : base(CellType.Helper, parent)
        {
            Activators = new List <Address>();

            // generate a random molecular pattern
            // NOTE: pattern vectors should be normalized
            var pat = new double[mpLen];

            for (int i = 0; i < mpLen; i++)
            {
                pat[i] = RandGen.NextDouble();
            }
            Pattern = new MolecularPattern(pat);
        }
示例#2
0
        private Point GetPatternAsPoint(MolecularPattern mp)
        {
            // TODO: X64

            /*// returns the cartesian representation of the pattern
             * byte[] array = new byte[4];
             * mp.CopyTo(array, 0);
             *
             * int xy = BitConverter.ToInt32(array, 0);
             * int allOneLower = (int)Math.Pow(2, Globals.NumOfNocleutidesPerGen) - 1;
             * int y = xy & (allOneLower);					// y = lower half bits
             * int x = (xy - y) / (allOneLower + 1);		// x = higher half bits
             *
             * return new Point(x, y);*/
            return(new Point(0, 0));
        }
示例#3
0
        protected override bool IsDamp(MolecularPattern mp, out double level)
        {
            var ITH = mp[0];
            var LBP = mp[1];
            var OHD = mp[2];

            // plane formula obtained by traning a single perceptron
            var dangerDistance = (-1.771 * ITH - 0.101 * LBP + 0.172 * OHD - 194.958) / 1.78219696;
            //-0.131203973036663 * ITH + 7.899539817161498 * LBP - 0.203824367425025 * OHD - 2.916552222394642;

            // normalize the distance
            var abs = Math.Abs(dangerDistance);

            if (abs < 1500)
            {
                level = abs / 1500.0;
            }
            else
            {
                level = 1;
            }
            return(dangerDistance < 0);
        }
示例#4
0
        protected override bool IsPamp(MolecularPattern mp, out double level)
        {
            var rls  = mp[0];
            var dtp  = mp[1];
            var edtp = mp[2];

            var ps = 1.0 - (dtp * edtp) / Math.Pow(rls, 2);

            if (ps < 0.995)
            {
                ps = 5.12820512820513 * ps - 5.1025641025641;
                if (ps < -1)
                {
                    ps = -1;
                }
            }
            else
            {
                ps = 200 * ps - 199;
            }
            level = ps;                         // TODO: X64
            return(ps > 0);
        }
示例#5
0
 public ProcessSpampEventArgs(MolecularPattern mp)
 {
     Mp = mp;
 }
示例#6
0
 /// <summary>
 /// Output level must be normalized in [0,1].
 /// </summary>
 /// <param name="mp"></param>
 /// <param name="level"></param>
 /// <returns></returns>
 protected abstract bool IsDamp(MolecularPattern mp, out double level);