EAKit
EAKit 是一款用 Swift 编写的进化算法框架。它是完全通用的,基于(可互换)组件的架构(算法),使用简单,您可以使用现有组件构建自己的进化算法。
内容
特性
- 遗传算法
- 进化策略
- 粒子群
- 差分进化
- 爬山法
要求
- iOS 8+ / macOS 10.9+
- Xcode 10+
- Swift 5+
安装
Carthage
github "Li-Bot/eakit.git" ~> 0.1.0
Swift 软件包管理器
dependencies: [
.package(url: "https://github.com/Li-Bot/eakit.git", .upToNextMajor(from: "1.0.0"))
]
CocoaPods
pod 'EAKitAI', '~> 0.1.0'
使用方法
让我们看看这有多简单!
爬山法
// Parameters of Hill Climbing
let parameters = try! EAHillClimbingParameters(
populationCount: 20,
generationsCount: 101,
fitnessFunction: EAAckleyFunction(),
deviation: 0.5
)
// Run the algorithm
let algorithm = EAHillClimbing(parameters: parameters)
let result = algorithm.run()
// Show result
print(result.bestPopulation.bestIndividual?.fitness)
print(result.bestPopulation.bestIndividual?.data)
遗传算法
// Data of TSP Fitness Function
let cities = [
EATSPCity("A", [60.0, 200.0]), EATSPCity("B", [80.0, 200.0]), EATSPCity("C", [80.0, 180.0]),
EATSPCity("D", [140.0, 180.0]), EATSPCity("E", [20.0, 160.0]), EATSPCity("F", [100.0, 160.0]),
EATSPCity("G", [200.0, 160.0]), EATSPCity("H", [140.0, 140.0]), EATSPCity("I", [40.0, 120.0]),
EATSPCity("J", [100.0, 120.0]), EATSPCity("K", [180.0, 100.0]), EATSPCity("L", [60.0, 80.0]),
EATSPCity("M", [120.0, 80.0]), EATSPCity("N", [180.0, 60.0]), EATSPCity("O", [20.0, 40.0]),
EATSPCity("P", [100.0, 40.0]), EATSPCity("Q", [200.0, 40.0]), EATSPCity("R", [20.0, 20.0]),
EATSPCity("S", [60.0, 20.0]), EATSPCity("T", [160.0, 20.0])
]
let fitnessFunction = EATSPFunction(cities: cities)
// Parameters of Genetic Algorithm
let parameters = try! EAGeneticAlgorithmParameters(
populationCount: 20,
generationsCount: 301,
fitnessFunction: fitnessFunction,
isElitism: true,
selection: EARandomSelection(isElitism: true),
crossover: EATSPTwoPointCrossover(threshold: 1.0),
mutation: EASwapMutation(threshold: 0.9, count: 1)
)
// Run the algorithm
let algorithm = EAGeneticAlgorithm(parameters: parameters)
let result = algorithm.run()
// Show result
print(result.bestPopulation.bestIndividual?.fitness)
print(result.bestPopulation.bestIndividual?.data)
进化策略
// Configuration of Evolutionary Strategy
let configuration = try! EAEvolutionaryStrategyConfiguration(µ: 20, ρ: 3, selectionStrategy: .plus, λ: 20)
// Parameters of Evolutionary Strategy
let parameters = try! EAEvolutionaryStrategyParameters(
generationsCount: 101,
configuration: configuration,
fitnessFunction: EAAckleyFunction(),
selection: EARandomSelection(),
recombination: EAESIntermadiateRecombination(),
mutation: EAESNormalMutation(threshold: 1.0, σ: 0.5)
)
// Run the algorithm
let algorithm = EAEvolutionaryStrategy(parameters: parameters)
let result = algorithm.run()
// Show result
print(result.bestPopulation.bestIndividual?.fitness)
print(result.bestPopulation.bestIndividual?.data)
粒子群算法
// Parameters of Particle Swarm
let parameters = try! EAParticleSwarmParameters(
particlesCount: 10,
iterationsCount: 101,
velocity: EAParticleSwarmVelocity(maximum: EASphereFunction().distance / 30.0),
learning: .defaultLearning,
inertiaWeight: .defaultInertiaWeight,
fitnessFunction: EAAckleyFunction()
)
// Run the algorithm
let algorithm = EAParticleSwarm(parameters: parameters)
let result = algorithm.run()
// Show result
print(result.bestPopulation.bestIndividual?.fitness)
print(result.bestPopulation.bestIndividual?.data)
差分进化算法
// Parameters of Differential Evolution
let parameters = try! EADifferentialEvolutionParameters(
populationCount: 10,
generationsCount: 101,
selection: EARandomSelection(),
mutationStrategy: EADERand1BinMutationStrategy(f: 0.5, λ: 0.5),
crossover: EADifferentialEvolutionCrossover(cr: 0.9),
fitnessFunction: EAAckleyFunction()
)
// Run the algorithm
let algorithm = EADifferentialEvolution(parameters: parameters)
let result = algorithm.run()
// Show result
print(result.bestPopulation.bestIndividual?.fitness)
print(result.bestPopulation.bestIndividual?.data)
组件
每个进化算法都分解为组件。组件可以在算法之间交换。每个组件由协议定义。
在这里了解更多关于组件的信息。
自定义实现
让我们看看如何简化您自己的组件和进化算法的实现。
在这里了解更多关于自定义实现的信息。
未来
- 更多进化算法
- 更多组件
- 更多内置函数
许可证
EAKit采用GNU GPLv3许可证发布。请参阅许可证。