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

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ.ПРОФ.М.А.БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет: «Институт магистратуры»

Кафедра: «Систем автоматизации и робототехники»

Направление подготовки:

Автоматизация технологических процессов и производств

Направленность (профиль):

Интеллектуальные технологии в автоматизации

ЛАБОРАТОРНАЯ РАБОТА № 2

по дисциплине:

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

на тему:

Программная реализация структур генетического алгоритма

Вариант: 1

Выполнили студенты группы:

дата, подпись

Фамилия И. О.

Принял к.т.н., доцент

Верхова Г.В.

дата, подпись

Фамилия И. О.

Цель работы: приобретение навыков разработки и программной реализации на C# структур и операторов генетических алгоритмов

Задание: Разработать модель хромосомы, фитнес-функцию, операторы мутации и кроссинговера согласно 1 варианту. Выполнить тестирование моделей и операторов с помощью xUnit.Net.

Ход работы

1. Хромосома

1.1. Модель хромосомы

Вектор рабочих параметров для задач непрерывного нелинейного математического программирования X = {x1, x2, xn}, xi ϵ R ; разрядность гена (отдельного рабочего параметра) – 8; количество рабочих параметров задается специальным методом и может быть от 2 до N; целочисленное кодирование с помощью двоичных чисел; диапазон изменения вектора рабочих параметров от xmin до xmax. Декодирование i-го гена битовой строки c= (c1​…c8​) в вещественное xi​ по формуле:

Мутация: с вероятностью pmut∈[0,09,0,99] выбирается случайный ген и в нём один случайный бит инвертируется.

Кроссовер: для каждого гена выполняется двухточечный побитовый обмен фрагментами между родителями.

1.2. Код программной реализации хромосомы

using System;

using System.Collections.Generic;

namespace EvolutionaryAlgorithmBinary

{

/*

Класс Chromosome (Хромосома)

8-битное целочисленное кодирование одного параметра.

Свойства:

GeneBits – число бит в гене (8).

Genes – список bit-массивов bool[8].

XMin, XMax– границы декодирования.

Dimension – число рабочих параметров (генов).

Методы:

• Chromosome(dimension, xmin, xmax, rnd) – случайная генерация генов.

• DecodeAll() – получение List<double> рабочих параметров.

• TwoPointCrossover(other, rnd) – двухточечный побитовый кроссовер.

• Mutate(prob, rnd) – мутация (инверсия одного бита).

*/

public class Chromosome

{

public const int GeneBits = 8;

private readonly int _dimension;

public List<bool[]> Genes { get; }

public double XMin { get; }

public double XMax { get; }

private int MaxCode => (1 << GeneBits) - 1;

public int Dimension => _dimension;

// Конструктор: инициализируем случайными битами

public Chromosome(int dimension, double xmin, double xmax, Random rnd)

{

if (dimension < 2)

throw new ArgumentException("Dimension ≥ 2 required.");

_dimension = dimension;

XMin = xmin; XMax = xmax;

Genes = new List<bool[]>(_dimension);

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

{

var bits = new bool[GeneBits];

for (int b = 0; b < GeneBits; b++)

bits[b] = rnd.Next(2) == 1;

Genes.Add(bits);

}

}

// Клонирующий конструктор

public Chromosome(List<bool[]> genes, double xmin, double xmax)

{

_dimension = genes.Count;

XMin = xmin; XMax = xmax;

Genes = new List<bool[]>(_dimension);

foreach (var g in genes)

{

var copy = new bool[GeneBits];

Array.Copy(g, copy, GeneBits);

Genes.Add(copy);

}

}

// Декодирование одного гена

private double DecodeGene(bool[] bits)

{

int k = 0;

for (int j = 0; j < GeneBits; j++)

if (bits[j])

k += 1 << (GeneBits - j - 1);

return XMin + k * (XMax - XMin) / MaxCode;

}

// Декодирование всех генов

public List<double> DecodeAll()

{

var values = new List<double>(_dimension);

foreach (var bits in Genes)

values.Add(DecodeGene(bits));

return values;

}

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