我正在尝试使用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();
}
答案 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]));
}
}
使用相同的方法,城市索引就是盖茨索引。