c# - 使用 AForge Genetic 库来决定塔防游戏中波浪的生成组成

标签 c# artificial-intelligence genetic-algorithm aforge

我正在尝试使用 GA 在类似于植物大战僵尸的塔防游戏中创造更强大的敌人波。每个种群代表一个波,每个染色体代表一个敌人(1011 = 基本敌人,1111 = 敌人 2 等)我正在使用 AForge 库,但是我想知道是否可以设置初始种群而不是随机生成和我如何为群体中的每条染色体设置 x 和 y(距离和损伤)的值。我也不完全确定 Range 代表什么。 抱歉,如果我遗漏了一些简单的东西,或者我误解了它是如何工作的,这就是我目前所拥有的,谢谢:

 public class UserFunction : OptimizationFunction2D
{
    private double distanceMax = 1;
    private double damageMax = 1;
    private double w1 = 1;
    private double w2 = 1;


    public UserFunction() :
        base(new Range(0, 100), new Range(0, 100)) { }

    public override double OptimizationFunction(double distance, double damage)
    {
        return (w1*distance/distanceMax) + (w2*damage/damageMax);
    }
}

class RunProgram
{
    private Population[] populationArray = new Population[5];
    private UserFunction userFunction = new UserFunction();
    private BinaryChromosome chromosome = new BinaryChromosome(4);
    private int popSize = 20;
    private double mutateRate = 0.3;
    private double damage;
    private double distance;
    private double limit = 100;


    public RunProgram()
    {
        Pop();
    }

    private void Pop()
    {
           // create genetic population
        for (int i = 0; i < 5; i++)
        {
            populationArray[i] = new Population(popSize,
                                chromosome,
                                userFunction,
                                new RouletteWheelSelection());
        }

        foreach (var pop in populationArray)
        {
            pop.MutationRate = mutateRate;
        }

        for (int i = 0; i < 50; i++)
        {
            foreach (var pop in populationArray)
            {
                pop.RunEpoch();                    
            }                                                           
        }


        Array.Sort(populationArray, delegate(Population population1, Population population2) {
            return population1.FitnessAvg.CompareTo(population2.FitnessAvg);
            });


        EnemyList(populationArray[4]);
        Console.ReadLine();
    }

    void EnemyList(Population population)
    {
        for (int i = 0; i < popSize; i++)
        {
            Console.WriteLine("enemy "+ i +" is: "+population[i]);
        }
    }
}

最佳答案

我认为所有种群都在接近最佳波浪。因此,除非每个波浪都有独特的条件,否则用人口表示波浪是没有用的。

关于c# - 使用 AForge Genetic 库来决定塔防游戏中波浪的生成组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361423/

相关文章:

c# - c# d1p1 和 xmlns 中的 XML 序列化

machine-learning - 在 CNN 中使用 MIT 室内场景数据库

audio - 识别(音乐)乐谱的方法

python - 如何进行python列表元素组合的遗传进化?

java - 使用 Jenetics 创建基因型时的限制

c++ - 在C语言中使用遗传算法求一个数的平方根时如何实现选择和交叉

c# - 使用 linq 将集合中的项目合并在一起

C# 将 ISO-8859-1 字符转换为实体编号

c# - 线程安全的 SortedDictionary

nlp - 词对的词义消歧