我正在尝试使用GA在一款类似于植物大战僵尸的塔防游戏中创造更强大的敌人浪潮。每个种群代表一个波,每个染色体代表一个敌人(1011=基本敌人,1111 =敌人2等等)我使用的是AForge库,但是我想知道是否可以设置初始群体而不是随机生成的群体,以及如何为群体中的每个染色体设置x和y的值(距离和损伤)。我也不能完全确定这个范围代表什么。很抱歉,如果我错过了一些简单的东西,或者如果我误解了它的工作原理,这就是我到目前为止所拥有的,谢谢:
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]);
}
}
}发布于 2013-08-15 22:20:26
我认为所有的人群都在接近一个最优的浪潮。因此,除非每个波都有唯一的条件,否则用人口来表示一个波是无用的。
https://stackoverflow.com/questions/15361423
复制相似问题