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); }
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)); }
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); }
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); }
public ProcessSpampEventArgs(MolecularPattern mp) { Mp = mp; }
/// <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);