Пример #1
0
 /// <summary>
 /// Sets this instance's AmiabilityLevel
 /// </summary>
 /// <param name="seed">Seed based on player and slice</param>
 private void SetLevel(int seed)
 {
     uniformRandSeed  = new SystemRandomSource(seed);
     binomialRandSeed = new SystemRandomSource(seed);   // Doesn't matter if it's the same seed
     uniformDist      = new DiscreteUniform(0, Enum.GetNames(typeof(AmiabilityLevel)).Length - 1, uniformRandSeed);
     AmiabilityLevel  = (AmiabilityLevel)uniformDist.Sample();
 }
Пример #2
0
        /// <summary>
        /// Gets a list of amiability levels "centered" around the passed amiability level
        /// </summary>
        /// <param name="amiabilityLevel">Base amiability level</param>
        /// <param name="quantity">How many levels are requested</param>
        /// <returns></returns>
        public List <AmiabilityLevel> GetBiasedAmiabilityList(AmiabilityLevel amiabilityLevel, int quantity)
        {
            int enumLen = Enum.GetNames(typeof(AmiabilityLevel)).Length;

            int[] distArray = new int[quantity];
            List <AmiabilityLevel> amiabilityList = new List <AmiabilityLevel>(quantity);

            binomialDist = new Binomial(0.5d, enumLen - 1, binomialRandSeed);
            binomialDist.Samples(distArray);

            foreach (int value in distArray)
            {
                amiabilityList.Add((AmiabilityLevel)Math.Max(0, Math.Min(value + (int)amiabilityLevel - enumLen / 2, enumLen - 1)));
            }
            return(amiabilityList);
        }
Пример #3
0
        public static Tuple <double, double> GetDistributionAlphaBeta(AmiabilityLevel amiabilityLevel)
        {
            // Beta distribution shape params
            double a = 0.0d;
            double b = 0.0d;

            switch (amiabilityLevel)
            {
            case AmiabilityLevel.HOSTILE:
                a = 1.0d;
                b = 100.0d;
                break;

            case AmiabilityLevel.UNFRIENDLY:
                a = 1.5d;
                b = 6.0d;
                break;

            case AmiabilityLevel.NEUTRAL:
                a = 10.0d;
                b = 10.0d;
                break;

            case AmiabilityLevel.FRIENDLY:
                a = 2.0d;
                b = 1.5d;
                break;

            case AmiabilityLevel.VERYFRIENDLY:
                a = 5.0d;
                b = 1.0d;
                break;

            default:
                a = 0.0001d;
                b = 1000.0d;
                break;
            }
            return(Tuple.Create(a, b));
        }