Популяционное дополнительное обучение
В информатике и обучении машинном инкрементное обучение на основе населения ( PBIL ) представляет собой оптимизации алгоритм и алгоритм оценки распределения . Это тип генетического алгоритма , в котором генотип всей популяции ( вероятности ), а не отдельных ее членов. вектор развивается [1] Алгоритм был предложен Шумитом Балуджей в 1994 году. Алгоритм проще стандартного генетического алгоритма и во многих случаях приводит к лучшим результатам, чем стандартный генетический алгоритм. [2] [3] [4]
Алгоритм
[ редактировать ]В PBIL гены представлены в виде реальных значений в диапазоне [0,1], что указывает на вероятность появления какой-либо конкретной аллели в этом гене .
Алгоритм PBIL следующий:
- Популяция генерируется из вектора вероятности.
- Физическая подготовка каждого участника оценивается и ранжируется.
- Обновите генотип популяции (вектор вероятности) на основе наиболее приспособленного человека.
- Мутировать.
- Повторите шаги 1–4.
Исходный код
[ редактировать ]Это часть исходного кода, реализованная на Java . В статье используются LearnRate = 0,1, negLearnRate = 0,075, mutProb = 0,02 и mutShift = 0,05. N = 100 и ITER_COUNT = 1000 достаточно для небольшой задачи.
public void optimize() {
final int totalBits = getTotalBits();
final double[] probVec = new double[totalBits];
Arrays.fill(probVec, 0.5);
bestCost = POSITIVE_INFINITY;
for (int i = 0; i < ITER_COUNT; i++) {
// Creates N genes
final boolean[][] genes = new [N][totalBits];
for (boolean[] gene : genes) {
for (int k = 0; k < gene.length; k++) {
if (rand_nextDouble() < probVec[k])
gene[k] = true;
}
}
// Calculate costs
final double[] costs = new double[N];
for (int j = 0; j < N; j++) {
costs[j] = costFunc.cost(toRealVec(genes[j], domains));
}
// Find min and max cost genes
boolean[] minGene = null, maxGene = null;
double minCost = POSITIVE_INFINITY, maxCost = NEGATIVE_INFINITY;
for (int j = 0; j < N; j++) {
double cost = costs[j];
if (minCost > cost) {
minCost = cost;
minGene = genes[j];
}
if (maxCost < cost) {
maxCost = cost;
maxGene = genes[j];
}
}
// Compare with the best cost gene
if (bestCost > minCost) {
bestCost = minCost;
bestGene = minGene;
}
// Update the probability vector with max and min cost genes
for (int j = 0; j < totalBits; j++) {
if (minGene[j] == maxGene[j]) {
probVec[j] = probVec[j] * (1d - learnRate) +
(minGene[j] ? 1d : 0d) * learnRate;
} else {
final double learnRate2 = learnRate + negLearnRate;
probVec[j] = probVec[j] * (1d - learnRate2) +
(minGene[j] ? 1d : 0d) * learnRate2;
}
}
// Mutation
for (int j = 0; j < totalBits; j++) {
if (rand.nextDouble() < mutProb) {
probVec[j] = probVec[j] * (1d - mutShift) +
(rand.nextBoolean() ? 1d : 0d) * mutShift;
}
}
}
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Каррай, Фахреддин О.; де Сильва, Кларенс (2004), Программные вычисления и проектирование интеллектуальных систем , Аддисон Уэсли, ISBN 0-321-11617-8
- ^ Балуджа, Шумит (1994), «Популяционное дополнительное обучение: метод интеграции оптимизации функций на основе генетического поиска и конкурентного обучения», Технический отчет , вып. CMU–CS–94–163, Питтсбург, Пенсильвания: Университет Карнеги-Меллон, CiteSeerX 10.1.1.61.8554
- ^ Балуджа, Шумит; Каруана, Рич (1995), Удаление генетики из стандартного генетического алгоритма , Morgan Kaufmann Publishers, стр. 38–46, CiteSeerX 10.1.1.44.5424
- ^ Балуджа, Шумит (1995), Эмпирическое сравнение семи эвристик оптимизации итеративных и эволюционных функций , CiteSeerX 10.1.1.43.1108