DEAP (программное обеспечение)
DEAP — фреймворк для эволюционных вычислений на языке Python, предназначенный для быстрого прототипирования и тестирования идей.[2][3][4] Включает структуры данных и инструменты, необходимые для реализации большинства популярных техник эволюционных вычислений, таких как генетический алгоритм, генетическое программирование, эволюционные стратегии, оптимизация роя частиц, дифференциальная эволюция, оптимизация транспортных потоков[5] и алгоритмы оценки распределения. Разработка ведётся в Университете Лаваля с 2009 года.
Общие сведения
| DEAP | |
|---|---|
| Тип | фреймворк эволюционных вычислений |
| Авторы | François-Michel De Rainville, Félix-Antoine Fortin, Marc-André Gardner, Marc Parizeau, Christian Gagné |
| Разработчики | François-Michel De Rainville, Félix-Antoine Fortin, Marc-André Gardner |
| Написана на | Python |
| Операционная система | мультиплатформенный |
| Первый выпуск | 2009 |
| Последняя версия | |
| Репозиторий | github.com/DEAP/deap |
| Лицензия | LGPL |
| Сайт | github.com/deap |
Пример
Ниже приведён пример кода, иллюстрирующий решение задачи Onemax с использованием генетического алгоритма в DEAP.
import array
import random
from deap import creator, base, tools, algorithms
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", array.array, typecode="b", fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register(
"individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, 100
)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
evalOneMax = lambda individual: (sum(individual),)
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
population = toolbox.population(n=300)
NGEN = 40
for gen in range(NGEN):
offspring = algorithms.varAnd(population, toolbox, cxpb=0.5, mutpb=0.1)
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
population = offspring