Я пытаюсь использовать GA для создания более сильных волн врагов в игре Tower Defense, похожей на растения против зомби. Каждая популяция представляет собой волну, а каждая хромосома представляет собой врага (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]);
}
}
}