如何自定义染色体基因的值?

时间:2018-08-28 13:41:43

标签: geneticsharp

我正在尝试使用GeneticSharp解决一个工作分配问题。它正在为卡车分配门,但并非所有门都适合卡车。 每个染色体必须具有一定的双精度值数组,这些值对应于基因索引(每个基因索引等于卡车编号)。因此,我试图从该数组中随机获取一个值并分配给FloatingPointChromosome类中的基因,但这给我一个错误,即“对象引用未设置为对象实例”。 allowedStands为null'。
您能给我建议如何解决吗?

public FloatingPointChromosome(double[] minValue, double[] maxValue, int[] totalBits, int[] fractionDigits, double[] geneValues, double[][] allowedStands)
        : base(totalBits.Sum())
    {
        m_minValue = minValue;
        m_maxValue = maxValue;
        m_totalBits = totalBits;
        m_fractionDigits = fractionDigits;

        // If values are not supplied, create random values
        if (geneValues == null)
        {
            geneValues = new double[minValue.Length];
            //var rnd = RandomizationProvider.Current;
            var rnd = new Random();

            for (int i = 0; i < geneValues.Length; i++)
            {
                int a = rnd.Next(allowedStands[i].Length);
                geneValues[i] = allowedStands[i][a];
                //I make here that it randomly selects from allowed gates array  
            }
        }

        m_originalValueStringRepresentation = String.Join(
            "",
            BinaryStringRepresentation.ToRepresentation(
            geneValues,
            totalBits,
            fractionDigits));

        CreateGenes();
    }

1 个答案:

答案 0 :(得分:0)

我想在分配卡车和登机口的情况下,创建自己的染色体更好,请看一下TspChromosome以获得一个想法。

public TspChromosome(int numberOfCities) : base(numberOfCities)
{
    m_numberOfCities = numberOfCities;
    var citiesIndexes = RandomizationProvider.Current.GetUniqueInts(numberOfCities, 0, numberOfCities);

    for (int i = 0; i < numberOfCities; i++)
    {
        ReplaceGene(i, new Gene(citiesIndexes[i]));
    }
}

使用相同的方法,城市索引就是盖茨索引。