私は、敵の NPC (個人) とそのプロパティ (健康、速度、攻撃力など) をすべて浮動小数点数で取得する私のゲームで使用される進化的アルゴリズムを作成しています。プレイヤーのパフォーマンスに基づいて決定される目標値に敵のプロパティを一致させることが目的です。私の問題は、現在のフィットネス関数では、アルゴリズムが 3 つの値のうち 2 つを見つけますが (将来、さらに多くのプロパティが追加される予定です)、最後の値を見つけようとして停止することです。体力値が全く変わらないのと同じです。たとえば、私の目標値が (50, 16, 120) の場合、最良の個人の値は (68, 16, 120) になり、最終的な値と一致することはありません。
フィットネス機能を変更してみましたが、問題の解決策が見つからないようです。これはフィットネス関数です。
private float FitnessFunction(int index)
{
Individual _dna = ga.population[index];
int _matchingDNA = _dna.genes.Length;
float _score = 0;
for (int i = 0; i < _dna.genes.Length; i++)
{
float _tmpDiff = Math.Abs(target.genes[i] - _dna.genes[i]);
if (_dna.genes[i] == target.genes[i])
{
_score++;
}
else if (_dna.genes[i] != target.genes[i])
{
_matchingDNA--;
}
if (_tmpDiff <= 30)
{
_score += 0.5f;
}
else if (_tmpDiff > 5)
{
_score -= 0.5f;
}
if (_matchingDNA == _dna.genes.Length)
{
solutionFound = true;
}
}
return _score;
}