Ejemplo n.º 1
0
        private static float CalculateResistance(float baseResist, int resistIndex, SerializableChromosome chromosome)
        {
            var effectiveResist = baseResist;

            var resistNegatives = new List <int> {
                0, 1, 2, 3, 4, 5
            };

            resistNegatives.Remove(resistIndex);

            var resistModifier = (chromosome.Value[resistIndex] - AverageChromosomeValues(resistNegatives, chromosome)) / ushort.MaxValue;

            resistModifier *= 1 - Math.Abs(AverageChromosomeValues(new List <int>()
            {
                6, 7
            }, chromosome) - halfwayMax) / halfwayMax;

            effectiveResist += resistModifier * maxBonus * baseResist;

            if (effectiveResist > 0.991 || effectiveResist < 0)
            {
                var doh = 1;
            }
            return(effectiveResist);
        }
Ejemplo n.º 2
0
        public static double PointValue(this EnemyTypes enemyType, SerializableChromosome chromosome)
        {
            if (!HasCalculatedMinimums)
            {
                CalculateMinimums();
            }

            var enemyAttributes = BaseEnemy.GetGeneticAttributes(enemyType.Attributes(), chromosome);

            var healthPoints = enemyAttributes.MaximumHealth / minHealth;
            var speedPoints  = enemyAttributes.EffectiveSpeed / minSpeed;
            var flyingPoints = enemyAttributes.IsFlying ? 1.5 : 1;

            var piercePoints   = enemyAttributes.EffectivePiercingResist - minPierce;
            var bombardPoints  = enemyAttributes.EffectiveBombardResist - minBombard;
            var chemicalPoints = enemyAttributes.EffectiveChemicalResist - minChemical;
            var frostPoints    = enemyAttributes.EffectiveFrostResist - minFrost;
            var firePoints     = enemyAttributes.EffectiveFireResist - minFire;
            var electricPoints = enemyAttributes.EffectiveElectricResist - minElectric;

            var resistPoints = piercePoints + bombardPoints + chemicalPoints + frostPoints + firePoints +
                               electricPoints;

            var survivalPoints = healthPoints * resistPoints;
            var movePoints     = speedPoints * flyingPoints;

            var pointValue = survivalPoints * movePoints;

            return(pointValue);
        }
Ejemplo n.º 3
0
        public static BaseEnemy CreateNew(EnemyTypes enemyType, SerializableChromosome chromosome = null, bool isHorde = false)
        {
            BaseEnemy newEnemy;

            switch (enemyType)
            {
            case EnemyTypes.Chicken1: newEnemy = Chicken1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Chicken2: newEnemy = Chicken2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Chicken3: newEnemy = Chicken3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit1: newEnemy = Rabbit1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit2: newEnemy = Rabbit2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Rabbit3: newEnemy = Rabbit3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep1: newEnemy = Sheep1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep2: newEnemy = Sheep2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Sheep3: newEnemy = Sheep3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow1: newEnemy = Cow1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow2: newEnemy = Cow2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Cow3: newEnemy = Cow3EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig1: newEnemy = Pig1EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig2: newEnemy = Pig2EnemyFactory.CreateNew(); break;

            case EnemyTypes.Pig3: newEnemy = Pig3EnemyFactory.CreateNew(); break;

            default:
                throw new ArgumentOutOfRangeException(nameof(enemyType), enemyType, null);
            }

            if (isHorde)
            {
                newEnemy.RushEndPoint();
            }
            else
            {
                newEnemy.OnDeath += OnCreateAction;
                newEnemy.FollowLine();
                newEnemy.SetGenetics(chromosome ?? GeneticsManager.GenerateNewChromsome());
            }

            return(newEnemy);
        }
        public static double Evaluate(List <double> inputList, EnemyTypes enemyType, SerializableChromosome chromosome)
        {
            var enemyAttributes     = enemyType.Attributes();
            var effectiveAttributes = BaseEnemy.GetGeneticAttributes(enemyAttributes, chromosome);
            var attributesAsInput   = Enumerable.ToArray(EnemyAttributesToInput(effectiveAttributes));

            for (var i = 0; i < MaxEnemies; i++)
            {
                inputList.AddRange(attributesAsInput);
            }

            var score = _machineLearningModel.Predict(inputList.ToArray());

            return(score);
        }
Ejemplo n.º 5
0
        public void SetGenetics(SerializableChromosome chromosome = null)
        {
            Chromosome = chromosome ?? GeneticsManager.GenerateNewChromsome();

            var baseAttributes      = GetBaseAttributes();
            var effectiveAttributes = GetGeneticAttributes(baseAttributes, Chromosome);

            MaximumHealth   = effectiveAttributes.MaximumHealth;
            HealthRemaining = MaximumHealth;

            EffectiveSpeed = effectiveAttributes.EffectiveSpeed;

            EffectivePiercingResist = effectiveAttributes.EffectivePiercingResist;
            EffectiveBombardResist  = effectiveAttributes.EffectiveBombardResist;
            EffectiveChemicalResist = effectiveAttributes.EffectiveChemicalResist;
            EffectiveFireResist     = effectiveAttributes.EffectiveFireResist;
            EffectiveFrostResist    = effectiveAttributes.EffectiveFrostResist;
            EffectiveElectricResist = effectiveAttributes.EffectiveElectricResist;
        }
Ejemplo n.º 6
0
        private static float CalculateSpeed(float baseSpeed, SerializableChromosome chromosome)
        {
            var effectiveSpeed = baseSpeed;

            var speedModifier = (-SumChromsomeValues(new List <int> {
                0, 2, 4
            }, chromosome) + SumChromsomeValues(new List <int> {
                1, 3, 5
            }, chromosome)) / (3 * ushort.MaxValue);

            speedModifier *= 1 - Math.Abs(chromosome.Value[7] - halfwayMax) / halfwayMax;

            effectiveSpeed += (speedModifier / 4 * maxBonus * baseSpeed);

            if (effectiveSpeed / baseSpeed > 1.1 || effectiveSpeed / baseSpeed < 0.9)
            {
                var doh = 1;
            }

            return(effectiveSpeed);
        }
Ejemplo n.º 7
0
        private static float CalculateMaximumHealth(float baseHealth, SerializableChromosome chromosome)
        {
            var effectiveHealth = baseHealth;

            var healthModifier = (SumChromsomeValues(new List <int> {
                0, 2, 4
            }, chromosome) - SumChromsomeValues(new List <int> {
                1, 3, 5
            }, chromosome)) / (3 * ushort.MaxValue);

            healthModifier *= 1 - Math.Abs(chromosome.Value[6] - halfwayMax) / halfwayMax;

            effectiveHealth += (healthModifier / 2 * maxBonus * baseHealth);

            if (effectiveHealth / baseHealth > 1.1 || effectiveHealth / baseHealth < 0.9)
            {
                var doh = 1;
            }

            return(effectiveHealth);
        }
Ejemplo n.º 8
0
        public static GeneticAttributes GetGeneticAttributes(BaseAttributes attributes, SerializableChromosome chromosome)
        {
            var effectiveAttributes = new GeneticAttributes
            {
                MaximumHealth           = CalculateMaximumHealth(attributes.Health, chromosome),
                EffectiveSpeed          = CalculateSpeed(attributes.Speed, chromosome),
                EffectivePiercingResist = CalculateResistance(attributes.PiercingResist, 0, chromosome),
                EffectiveBombardResist  = CalculateResistance(attributes.BombardResist, 1, chromosome),
                EffectiveChemicalResist = CalculateResistance(attributes.ChemicalResist, 2, chromosome),
                EffectiveFireResist     = CalculateResistance(attributes.FireResist, 3, chromosome),
                EffectiveFrostResist    = CalculateResistance(attributes.FrostResist, 4, chromosome),
                EffectiveElectricResist = CalculateResistance(attributes.ElectricResist, 5, chromosome),
                IsFlying = attributes.IsFlying,
            };

            return(effectiveAttributes);
        }
Ejemplo n.º 9
0
 private static float SumChromsomeValues(IEnumerable <int> values, SerializableChromosome chromosome)
 {
     return(values.Aggregate(0f, (current, index) => current + chromosome.Value[index]));
 }
Ejemplo n.º 10
0
 private static float AverageChromosomeValues(IEnumerable <int> values, SerializableChromosome chromosome)
 {
     return((float)values.Average((index) => chromosome.Value[index]));
 }