
- •Интеллектуальные системы. Основные классы систем и задач. Понятие иис
- •Критерии интеллектуальности ис
- •История развития иис
- •Классификация задач, решаемых иис
- •Классы иис
- •Символьная обработка и вычислительный интеллект в задачах искусственного интеллекта. Символьная обработка в задачах искусственного интеллекта
- •Вычислительный интеллект в задачах искусственного интеллекта
- •Экспертные системы. Архитектура систем. Экспертные системы
- •Архитектура экспертной системы
- •Архитектура нечеткой экспертной системы.
- •Архитектура нейронной экспертной системы.
- •Архитектура мягкой экспертной системы.
- •Экспертная деятельность
- •Вычисление нечеткой импликации:
- •Архитектура нечёткой экспертной системы
- •Искусственная нейронная сеть. Математическая модель нейрона.
- •Функция активации. Виды нейронных сетей. Функция активации.
- •Виды нейронных сетей.
- •Нс без обратных связей
- •Полносвязные сети
- •Обучение нс. Решение задачи классификации. Обучение нс
- •Решение задачи классификации
- •Обучение нс. Решение задачи кластеризации.
- •Обучение нс. Решение задачи аппроксимации.
- •Нейронная сеть как универсальный аппроксиматор.
- •Эффективность аппроксимации с помощью нейронных сетей и систем нечеткого вывода.
- •Линейно-сепарабельные задачи.
- •Нейронная сеть как универсальный аппроксиматор.
- •Сети Кохонена. Алгоритм обучения «победитель забирает все» Сети Кохонена
- •Алгоритм обучения «победитель забирает все»
- •Дельта-правило в машинном обучении
- •Алгоритм обратного распространения ошибки.
- •Архитектура нейронной экспертной системы
- •Эволюционные вычисления. Классы эволюционных вычислений.
- •История эволюционных вычислений
- •Классы эволюционных вычислений.
- •Обобщение идей эволюционных вычислений
- •Понятие генетического алгоритма.
- •3 Основные положения в теории эволюции (Теория «Происхождения Видов» 1859г. Дарвина):
- •Кодировка хромосом. Оператор отбора.
- •Операторы рекомбинации и мутации. Оператор скрещивания (оператор кроссовера)
- •Оператор мутации
- •Сходимость га.
- •Теорема схем.
- •Гибридные интеллектуальные системы.
- •Методы гибридизации.
- •Способ 1
- •Способ 2 (метод -срезов)
- •Понятия t-нормы и s–конормы.
- •Общие свойства t – норм и s — конорм
- •Пары норм и конорм
- •Определения и-или-нейронов и нечеткой нейронной сети.
- •Нечеткая нейронная сеть архитектуры anfis
- •Пример функционирования нечеткого нейронного контроллера
- •Определить входные переменные.
- •Пример. Нечёткий регулятор для стиральной машины (архитектура anfis)
- •Алгоритмы обучения для неч-ой нейр-ой сети контроллера
- •Нечёткий контроллер на основе нейронной сети (nnflc).
- •Архитектура anfis (адаптивная нейронная сеть, основанная на системе нечёткого вывода).
- •Нейронная сеть для нечётких (nndfr)
- •Нечёткие нейронные сети с генетической настройкой.
- •Эффективность аппроксимации с помощью нейронных сетей и систем нечеткого вывода.
- •Моделирование линейного нейрона
- •Моделирование многослойного перцептрона
- •Моделирование сети Кохонена
- •Пример генетической оптимизации при решении задач
Моделирование сети Кохонена
См. вопрос 13
Пример генетической оптимизации при решении задач
Оптимизация вычислительной сети
Особенностью решения задачи по оптимизации вычислительной сети методом генетического алгоритма является необходимость моделирования функционирования сети при вычислении fitness-функции каждого решения. Такие процедуры моделирования являются трудоёмкими, поэтому генетическая оптимизация вычислительных сетей требует значительных вычислительных ресурсов.
Сложность fitness-функции обычно является критерием для применения генетических алгоритмов.
Генетический алгоритм в псевдокоде.
Начало
Создать начальную популяцию
Оценить приспособленность каждой особи
Остановка = ложь
Пока не остановка выполнять
Начало
Повторить (размер популяции/2) раз
Начало
Выбрать 2 особи с высокой приспособленностью для скрещивания
Скрестить потомков
Оценить приспособленность потомков
Поместить потомков в новое поколение
Конец
Если приспособленность лучшего потомка > порога, то остановка = истина
Конец
Конец.
Задача о диете. Задача составления наиболее дешёвого рациона питания, удовлетворяющего некоторым медицинским требованиям. Известен перечень продуктов из N наименований. Рассматриваются следующие характеристики продуктов:
Жиры
Белки
Углеводы
Калории
Приемлем рацион, удовлетворяющий медицинским нормам, оптимальным является самый дешёвый из них.
Данная задача реализована с использованием турнирного отбора, который организует n турниров, чтобы выбрать n особей (n – вводится пользователем с клавиатуры).
Исходные данные – набор продуктов, для составления пункта меню (белки, жиры, углеводы, ккал, цена за 100 грамм). В данной программе он представлен в виде двумерного массива products:
public double[,] products = new double[10, 5]{
{7.5, 2.6, 62.3, 303, 3}, //рис
{12.6, 3.3, 57.1, 308, 5}, //гречка
{3, 3.2, 4.7, 60, 3}, //молоко
{18.6, 16, 0, 218, 25}, //говядина
{18.2, 18.4, 0, 238, 45}, //курица
{0.8, 0.1, 2.5, 14, 15}, //огурец
{0.6, 0.2, 4.2, 19.9, 12}, //томаты
{6.8, 1.3, 39.8, 201, 15}, //хлеб бородинский
{0.9, 0.2, 8.1, 43, 30}, //апельсин
{9.2, 14.1, 67.7, 417.6, 15} //крекеры
};
Суточная медицинская норма потребления белков, углеводов, ккал представляет собой одномерный массив norm:
public double[] norm = new double[4] { 61, 67, 289, 2000 };
Рацион питания представляет собой структуру, которая хранит
public struct Ration {
public double[] products; //количество каждого продукта в меню (хромосома)
public double fitness; //оптимальная цена меню (значение fitness функции)
public bool allowably; //допустимо (проходит по медицинским нормам)
public double[] contentProduct;
}
Популяция – population – массив типа Menu (Menu – класс, в котором хранится структура Ration)
Размер популяции – sizePopulation
public Menu[] population = new Menu[sizePopulation];
Хромосома – каждая строка массива – возможный вариант решения (каждый объект класса Menu – структура Ration).
Функция оптимальности – функции fitnessFunction и allowableNorm – они оценивают приспособленность хромосомы, allowableNorm проверяет удовлетворяет ли она медицинским нормам, результат записывается в переменную allowably структуры Ration.
public bool allowableNorm() {
ration.contentProduct = new double[4];
for (int i = 0; i < 4; i++) { ration.contentProduct[i] = 0; }
for (int i = 0; i < Form1.countProducts; i++) {
for (int j = 0; j < 4; j++) {
ration.contentProduct[j] += ration.products[i] * products[i, j] / 100;
}
}
int allow = 0;
for (int i = 0; i < 4; i++) {
if (ration.contentProduct[i] >= norm[i]) { allow += 1; }
}
if (allow == 4) { return ration.allowably = true; }
else {return ration.allowably = false;}
}
fitnessFunction ищет минимальный рацион питания (цена минимальна за весь рацион, а не за отдельный продукт).
public double fitnessFunction() {
sum = 0;
for (int i = 0; i < Form1.countProducts; i++) {
sum += (ration.products[i] * products[i, 4] / 100);
}
sum = Math.Round(sum, 2);
return ration.fitness = sum;
}
Для скрещивания используется одноточечный кроссовер, он осуществляется в функции crossover. 2 родителя – 2 потомка.
public Menu[] crossover(Menu[] listRation) {
int[] mas = new int[sizePopulation];
<...>
Menu[] populationTmp = new Menu[sizePopulation];
int l = 0;
while (l < sizePopulation - 1) {
int tmp1 = mas[l];
int tmp2 = mas[l + 1];
int barrier = rnd.Next(Form1.countProducts);//выбор точки разрыва
populationTmp[l] = new Menu();
populationTmp[l + 1] = new Menu();
//кроссовер – получаем генотипы 2-х потомков
for (int j = 0; j < barrier; j++) {
populationTmp[l].ration.products[j] = listRation[tmp1].ration.products[j];
populationTmp[l + 1].ration.products[j] = listRation[tmp2].ration.products[j];
}
for (int j = barrier; j < Form1.countProducts; j++) {
populationTmp[l].ration.products[j] = listRation[tmp2].ration.products[j];
populationTmp[l + 1].ration.products[j] = listRation[tmp1].ration.products[j];
}
<...>
//если оба доступны (удовлетворяют медицинским нормам), то переходим к другой хромосоме (через 2)
if ((populationTmp[l].ration.allowably == true) && (populationTmp[l + 1]. ration. allowably == true)) {
l = l + 2;
}
}
<...>
return population;
}
Мутация осуществляется по жирно выделенной формуле, т.е. берётся k-ый продукт и все его характеристики умножаются на произвольное число, на 0.5 и к ним прибавляется случайное число, умноженное на 10.
public void mutation() {
rnd = new Random(Form1.rndCount++);
int k = rnd.Next(Form1.countProducts);
ration.products[k] = Math.Round(ration.products[k] * (rnd.NextDouble() * 1 + 0.5) + rnd.NextDouble() * 10, 0);
fitnessFunction();
allowableNorm();
}
Результатом задачи является n-ое количество рационов питания, удовлетворяющих медицинским нормам и имеющих наименьшую цену.
Пример:
Дано n = 2
Исходные продукты:
Медицинская норма:
Популяция начальная (представлена лишь её часть). Последний пункт – цена.
Мутация (представлена лишь её часть).
Рационы питания – n + 1рационов питания (должно выводиться n), удовлетворяющих медицинским нормам и имеющих минимальную цену за рацион.