首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在塔防御游戏中使用AForge基因库来确定波的产卵组成

在塔防御游戏中使用AForge基因库来确定波的产卵组成
EN

Stack Overflow用户
提问于 2013-03-12 20:37:56
回答 1查看 413关注 0票数 2

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

代码语言:javascript
复制
 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]);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-15 22:20:26

我认为所有的人群都在接近一个最优的浪潮。因此,除非每个波都有唯一的条件,否则用人口来表示一个波是无用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15361423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档