Скачиваний:
0
Добавлен:
26.10.2025
Размер:
152.79 Кб
Скачать

4.3. Код юнит-тестов оператора кроссинговера

using System;

using System.Collections.Generic;

using Xunit;

using EvolutionaryAlgorithmBinary;

public class ChromosomeCrossoverTests

{

private class FakeRandom : Random

{

private Queue<double> _vals;

public FakeRandom(IEnumerable<double> vals) { _vals=new Queue<double>(vals); }

public override double NextDouble() => _vals.Dequeue();

}

[Fact]

public void TwoPointCrossover_ShouldExchangeBitsBetweenParents()

{

// Arrange: создаём две хромосомы-«родителя» с известными битами

// Для простоты: оба генома из 1-го гена по 8 бит

bool[] p1 = new bool[8]{0,0,0,0,0,0,0,0};

bool[] p2 = new bool[8]{1,1,1,1,1,1,1,1};

var parent1 = new Chromosome(new List<bool[]>{p1}, 0,1);

var parent2 = new Chromosome(new List<bool[]>{p2}, 0,1);

// FakeRandom вернёт точки разреза p1=2, p2=5

var rnd = new FakeRandom(new[]{ 2/7.0, 5/7.0 });

// Act

var (c1,c2) = parent1.TwoPointCrossover(parent2, rnd);

// Assert: в диапазоне [2,5) у c1 должны быть биты p2, а за пределами — p1

for(int i=0;i<8;i++)

{

bool expected1 = (i<2||i>=5) ? p1[i] : p2[i];

bool expected2 = (i<2||i>=5) ? p2[i] : p1[i];

Assert.Equal(expected1, c1.Genes[0][i]);

Assert.Equal(expected2, c2.Genes[0][i]);

}

}

}

4.4. Итог юнит-тестов оператора кроссинговера

Рис.5 ­— Скриншот прохождения юнит-тестов оператора кроссинговера

Заключение

В ходе работы была разработана и реализована бинарная модель хромосомы с 8-битным кодированием каждого рабочего параметра, что позволяет надёжно представлять вектор непрерывных переменных в заданном диапазоне [xmin​, xmax​] без потерь точности при преобразованиях. Инверсия отдельных битов при мутации и побитовый двухточечный кроссовер обеспечивают эффективное исследование пространства решений на уровне отдельных разрядов.

Реализована фитнес-функция, основанная на функции сферы. Реализация оператора мутации с использованием метода альтернативной случайной мутации позволила обеспечить разнообразие генетического материала.

Оператор мутации реализован как инверсия одного случайного бита в одном случайном гене с настраиваемой вероятностью, что обеспечивает достаточное разнообразие генетического материала. Побитовый двухточечный кроссовер надёжно комбинирует информацию родителей, позволяя контролировать области поиска за счёт выбора двух точек разреза.

Проведение тестирования с помощью xUnit.Net подтвердило корректность работы разработанных моделей и операторов, что демонстрирует их пригодность для решения поставленных задач.

Санкт Петербург

2025

Соседние файлы в предмете Методы и модели искусственного интеллекта в управлении техническими системами