Русские Блоги
Искусственная пчелиная колония (ABC) — это метод оптимизации, имитирующий поведение пчел, специфическое применение кластерного интеллекта, главная особенность которого заключается в том, что ему не нужно понимать специальную информацию о проблеме, нужно только оптимизировать проблему. Сравнение неполноценности посредством локального оптимизационного поведения каждого человека с искусственной пчелой, наконец, приводит к появлению в группе глобального оптимального значения с более высокой скоростью сходимости.
Пчелы — социальные насекомые. Хотя поведение одного насекомого чрезвычайно простое, группа, состоящая из одного простого человека, демонстрирует чрезвычайно сложное поведение. Настоящие популяции пчел могут собирать нектар из источников пищи (цветов) с высокой эффективностью в любой среде, и в то же время они могут адаптироваться к изменениям окружающей среды.
Три основных компонента
Наемные пчелы, неработающие пчелы, источники пищи, наемные пчелы и неработающие пчелы несут ответственность за поиск лучших источников пищи.
Положение источника пищи представляет собой возможное решение, а содержание пищи в источнике пищи представляет качество решения.
- Наемные пчелы (занятые пчелы): связаны с конкретным источником пищи (источник пищи истощается после истощения источника пищи)
- Пчелы-наблюдатели: следите за информацией, передаваемой наемными пчелами, и выбирайте источник пищи на ее основе
- Пчелы-разведчики: генерируются наемными пчелами с истощенными источниками пищи, случайным образом ища источники пищи
Две модели самоорганизующихся кластеров
Положительные отзывы о хороших источниках пищи и отрицательные отзывы о плохих источниках пищи;
Обратите внимание: Существуют определенные объекты в биологических объектах в других бионических алгоритмах, такие как хромосомный вектор в генетическом алгоритме, матрица доступа муравья в алгоритме колонии муравьев, матрица популяции антител в алгоритме иммунитета и пчелиная колония в алгоритме пчелиных семей не имеют матрицы сущностей Появление проявляется в выполнении различных операций с матрицей источника меда.
Основной процесс алгоритма пчелиных семей
Описание:
Изначально пчелы-исследователи обнаружили все местоположения источников пищи. Затем пища из источника пищи была добыта нанятыми пчелами и следующими пчелами. После того, как источники пищи были исчерпаны, наемные пчелы, соответствующие источникам пищи, были заменены на разведчиков, чтобы искать больше. Источник пищи на расстоянии.
Псевдокод выглядит следующим образом:
Initialization Phase; while(i iter_max) Employed Bees Phase; Onlooker Bees Phase; Scout Bees Phase; Memorize the best solution; > print(the final best solution);
Фаза инициализации
Параметры, которые должны быть инициализированы:
- Функция вычисления функции стоимости CostFunction; Количество параметров функции стоимости nVar; Верхняя и нижняя границы параметров функции стоимости [VarMin, VarMax]
- Максимальное количество итераций iter_max
- Максимальное количество источников меда, сохраненных в одном nPop
- Следуйте за количеством пчел nOnLooker
- Источник меда отбрасывает верхнюю границу L (обычно круглая (0,6 * нВар * нПоп))
- Коэффициент расширения диапазона поиска источника меда a (обычно 1)
- Матрица положения источника меда PopPositon (строки nPop и столбцы nVar, каждая строка представляет допустимое решение)
- PopCost матрицы стоимости меда (столбец nPop, строка 1, сохранение значения качества каждого возможного решения)
- Вероятностная матрица выбора источника меда (столбец nPop, строка 1, сохраните вероятность следующих пчел для выбора каждого источника меда)
- Историческая оптимальная матрица источника меда BestSol (столбец iter_max + 1 строка nVar, сохранение оптимальной позиции источника меда в каждой итерации)
- Матрица объема добычи источника меда Mine (столбец nPop, строка 1, за исключением числа раундов, за которыми каждый источник меда следует за добычей пчел, после того, как число достигнет значения L, наемные пчелы, соответствующие источнику меда, станут исследуемыми пчелами)
Инициализируйте местоположение источника меда:
Произвольно генерируют случайные числа, соответствующие диапазону каждого элемента каждой матрицы положения источника меда, и заполняют матрицу положения источника меда.
Рассчитайте начальную стоимость меда:
Выполните итерацию по всем узлам-источникам меда, подставьте параметры каждого узла в функцию стоимости для вычисления значения генерации каждого источника меда (возможно, также потребуется заменить функцию замены на положительное значение) и заполните стоимость источника меда В то же время оптимальное положение источника меда 0-го поколения сохраняется в векторе BestSol [0].
Прокат пчелиного этапа
Найдите следующий источник меда:
Обходите все узлы источника меда, для узла i, случайным образом выберите другой узел k, который не является i, и случайным образом вычислите следующий источник меда, найденный наемной пчелой, по следующей формуле:
phi = a*rand([-1,1],[1,nVar]) NewPosition = PopPosition[i] + phi*(PopPosition[i]-PopPosition[k])
Примечание: rand ([a, b], [x, y]) означает создание матрицы с x строками и y столбцами для каждого элемента между a и b.
* во второй строке кода указывает, что соответствующий элемент умножен, а не умножение матрицы, что соответствует. * в MATLAB
Жадный выбор:
Рассчитайте значение генерации нового источника меда и сделайте жадный выбор между текущим источником меда i и новым источником меда. Если выбран новый секретный источник, обновите узел i в матрице положения источника меда и матрице стоимости источника меда, В противном случае он увеличивается на 1 для i-го бита в матрице извлечения ресурсов шахты Mine.
Следуй за пчелиным этапом
Обновите матрицу вероятности выбора источника меда:
Рассчитайте и обновите матрицу вероятности в соответствии со следующей формулой:
M = 1 n ∗ ∑ i = 1 n C i M = \frac*\sum^_C_i M = n 1 ∗ i = 1 ∑ n C i
F i = e − C i M i = 1 , 2 , . . . , n F_i = e^> \qquad i = 1,2. n F i = e − M C i i = 1 , 2 , . . . , n
P i = F i ∑ k = 1 n F i i = 1 , 2 , . . . , n P_i = \frac^F_i> \qquad i = 1,2. n P i = ∑ k = 1 n F i F i i = 1 , 2 , . . . , n
Примечание: M представляет среднее арифметическое стоимости каждого источника меда, n — nPop, C i C_i C i Это замещающее значение медового исходного узла i; P i P_i P i Представляет i-й элемент рассчитанной матрицы вероятностей.
Следуйте выбору пчелы:
обходит каждую следующую пчелу, для каждой следующей пчелы сначала используйте вычисленную матрицу вероятности выбора, чтобы выполнить метод выбора рулетки для выбора источника меда (такого как источник меда k) из всех источников меда, и Повторите жадную операцию выбора фазы найма пчелы для этого источника меда.
Скаутская пчела
Откажитесь от некоторых источников меда:
Обходите все узлы-источники меда, найдите узлы, у которых значение Mine больше порогового значения L, выполните случайное покрытие для этих узлов, пересчитайте значение генерации и сбросьте значение Mine до нуля. Псевдокод выглядит следующим образом:
for i in range(1,nPop): if Mine[i] >= L: PopPosition[i] = rand([VarMin,VarMax],[1,nVar]) PopCost[i] = CostFunction(PopPosition[i]) Mine[i] = 0
Обновление истории оптимальной исходной матрицы мёда
Обойдите все узлы-источники меда и сохраните оптимальный узел в строке iter + 1 исторической оптимальной исходной матрицы меда BestSol (первая строка — 0-е поколение, начальное значение)
Реализация кода
Подготовьтесь к решению с использованием алгоритма дифференциальной эволюции
f ( x , y ) = − 20 e − 0.2 x 2 + y 2 2 − e c o s 2 π x + c o s 2 π y 2 + 20 + e f(x,y) = -20 e^>> — e^> + 20 + e f ( x , y ) = − 2 0 e − 0 . 2 2 x 2 + y 2
− e 2 c o s 2 π x + c o s 2 π y + 2 0 + e
Эта богоподобная функция находится в интервале [ − 4 , 4 ] [-4,4] [ − 4 , 4 ] На минимальном значении. Функция изображения заключается в следующем, по изображению легко узнать минимальную точку ( 0 , 0 ) (0,0) ( 0 , 0 ) , Минимальное значение равно 0.
Код Python выглядит следующим образом:
# Используйте алгоритм пчелиных семей для вычисления этой функции f = @ (x, y) -20. * Exp (-0.2. * Sqrt ((x. ^ 2 + y. ^ 2) ./ 2)) - exp ((cos ( 2. * pi. * X) + cos (2. * pi. * Y)) ./ 2) + 20 + exp (1) Минимальное значение в интервале [-4,4] # Истинная минимальная точка равна (0,0) import numpy as np import matplotlib.pyplot as plt # Определить оптимизируемую функцию: она может обрабатывать только один вход в виде вектора строки, если существует несколько входов в виде матрицы, выполнить итерацию def CostFunction(input): x = input[0] y = input[1] result = -20*np.exp(-0.2*np.sqrt((x*x+y*y)/2))-np.exp((np.cos(2*np.pi*x)+np.cos(2*np.pi*y))/2)+20+np.exp(1) return result # Инициализировать параметры # Число и диапазон параметров в функции стоимости nVar = 2 VarMin = -4 VarMax = 4 # Основные параметры алгоритма роя iter_max = 60 nPop = 100 nOnLooker = 100 L = np.around(0.6*nVar*nPop) a = 1 # Создать каждую матрицу записи PopPosition = np.zeros([nPop,nVar]) PopCost = np.zeros([nPop,1]) Probability = np.zeros([nPop,1]) BestSol = np.zeros([iter_max+1,nVar]) BestCost = np.inf*np.ones([iter_max+1,1]) Mine = np.zeros([nPop,1]) # Инициализировать местоположение источника меда PopPosition = 8*np.random.rand(nPop,nVar) - 4 for i in range(nPop): PopCost[i][0] = CostFunction(PopPosition[i]) if PopCost[i][0] BestCost[0][0]: BestCost[0][0] = PopCost[i][0] BestSol[0] = PopPosition[i] for iter in range(iter_max): # Наем пчелы стадии # Найти следующий источник меда for i in range(nPop): while True: k = np.random.randint(0,nPop) if k != i: break phi = a*(-1+2*np.random.rand(2)) NewPosition = PopPosition[i] + phi*(PopPosition[i]-PopPosition[k]) Сделайте жадный выбор NewCost = CostFunction(NewPosition) if NewCost PopCost[i][0]: PopPosition[i] = NewPosition PopCost[i][0] = NewCost else: Mine[i][0] = Mine[i][0]+1 # Следуйте за стадией пчелы # Рассчитать матрицу вероятности выбора Mean = np.mean(PopCost) for i in range(nPop): Probability[i][0] = np.exp(-PopCost[i][0]/Mean) Probability = Probability/np.sum(Probability) CumProb = np.cumsum(Probability) for k in range(nOnLooker): # Выполнить метод выбора рулетки m = 0 for i in range(nPop): m = m + CumProb[i] if m >= np.random.rand(1): break # Повторная аренда пчел while True: k = np.random.randint(0,nPop) if k != i: break phi = a*(-1+2*np.random.rand(2)) NewPosition = PopPosition[i] + phi*(PopPosition[i]-PopPosition[k]) Сделайте жадный выбор NewCost = CostFunction(NewPosition) if NewCost PopCost[i][0]: PopPosition[i] = NewPosition PopCost[i][0] = NewCost else: Mine[i][0] = Mine[i][0]+1 # Обнаружить стадию пчелы for i in range(nPop): if Mine[i][0] >= L: PopPosition[i] = 8*np.random.rand(1,nVar) - 4 PopCost[i][0] = CostFunction(PopPosition[i]) Mine[i][0] = 0 # Сохранить историческое оптимальное решение for i in range(nPop): if PopCost[i][0] BestCost[iter+1][0]: BestCost[iter+1][0] = PopCost[i][0] BestSol[iter+1] = PopPosition[i] # Выходной результат y = np.zeros(iter_max+1) print(BestSol[iter_max-1]) for i in range(iter_max): if i % 5 == 0: print(i,BestCost[i]) y[i] = BestCost[i][0] x = [i for i in range(iter_max+1)] plt.plot(x,y) plt.show()
Вывод следующий:
Историческое оптимальное решение изображается следующим образом: