[์•Œ๊ณ ๋ฆฌ์ฆ˜] Genetic Algorithms (์œ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

2025. 2. 25. 01:55ยทProgrammings/Algorithms
๋ชฉ์ฐจ
  1. Genetic Algorithm(GA)
  2. ์ดˆ๊ธฐํ™”(Initialization)
  3. ์ ํ•ฉ๋„ ํ‰๊ฐ€(Fitness Evaluation)
  4. ์„ ํƒ(Selection)
  5. ๊ต์ฐจ(Crossover)
  6. ๋Œ์—ฐ๋ณ€์ด(Mutation)
  7. ์ข…๋ฃŒ ์กฐ๊ฑด ํ™•์ธ(Termination)
  8. Kotlin์„ ํ™œ์šฉํ•œ Genetic Algorithm ์ƒ˜ํ”Œ ์ฝ”๋“œ
  9. ์ฝ”๋“œ ์„ค๋ช…
  10. ์ดˆ๊ธฐํ™”
  11. ์ ํ•ฉ๋„ ํ‰๊ฐ€
  12. ๋ถ€๋ชจ ์„ ํƒ
  13. ๊ต์ฐจ
  14. ๋Œ์—ฐ๋ณ€์ด
  15. ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

GA.jpg

Genetic Algorithm(GA)

์ž์—ฐ ์„ ํƒ๊ณผ ์ง„ํ™”๋ฅผ ๋ชจ๋ฐฉํ•˜์—ฌ ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฉ”ํƒ€ํœด๋ฆฌ์Šคํ‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ƒ๋ฌผํ•™์  ์ง„ํ™”์˜ ๊ฐœ๋…์ธ ์„ ํƒ(Selection), ๊ต์ฐจ(Crossover), ๋Œ์—ฐ๋ณ€์ด(Mutation)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ตœ์ ์˜ ํ•ด๋ฅผ ์ฐพ์•„๊ฐ‘๋‹ˆ๋‹ค:

์ดˆ๊ธฐํ™”(Initialization)

์ดˆ๊ธฐ ์—ผ์ƒ‰์ฒด ์ง‘ํ•ฉ(ํ•ด ์ง‘ํ•ฉ)์„ ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ ํ•ฉ๋„ ํ‰๊ฐ€(Fitness Evaluation)

๊ฐ ์—ผ์ƒ‰์ฒด(ํ•ด)์˜ ์ ํ•ฉ๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์„ ํƒ(Selection)

์ ํ•ฉ๋„๊ฐ€ ๋†’์€ ์—ผ์ƒ‰์ฒด๋ฅผ ๋ถ€๋ชจ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ(Crossover)

๋ถ€๋ชจ ์—ผ์ƒ‰์ฒด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ž์† ์—ผ์ƒ‰์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋Œ์—ฐ๋ณ€์ด(Mutation)

์ž์† ์—ผ์ƒ‰์ฒด์— ์ผ๋ถ€ ๋ณ€ํ™”๋ฅผ ๊ฐ€ํ•˜์—ฌ ๋‹ค์–‘์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ข…๋ฃŒ ์กฐ๊ฑด ํ™•์ธ(Termination)

์ข…๋ฃŒ ์กฐ๊ฑด(์˜ˆ: ์„ธ๋Œ€ ์ˆ˜, ์ ํ•ฉ๋„ ์ž„๊ณ„๊ฐ’ ๋“ฑ)์ด ์ถฉ์กฑ๋˜๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 2๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.



GA๋Š” ์ตœ์ ํ™” ๋ฌธ์ œ, ํƒ์ƒ‰ ๋ฌธ์ œ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋˜๋ฉฐ, ๋ณต์žกํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ „์—ญ ์ตœ์ ํ•ด๋ฅผ ์ฐพ๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Kotlin์„ ํ™œ์šฉํ•œ Genetic Algorithm ์ƒ˜ํ”Œ ์ฝ”๋“œ

์•„๋ž˜๋Š” Kotlin์œผ๋กœ ๊ฐ„๋‹จํ•œ ์œ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

import kotlin.random.Random

// ๊ฐœ์ฒด ๋ชจ๋ธ ์ •์˜
data class Individual(val genes: IntArray, var fitness: Double = 0.0)

// ์ดˆ๊ธฐ ๊ฐœ์ฒด๊ตฐ ์ƒ์„ฑ
fun initializePopulation(populationSize: Int, geneLength: Int): List<Individual> {
    return List(populationSize) {
        Individual(genes = IntArray(geneLength) { Random.nextInt(0, 2) })
    }
}

// ์ ํ•ฉ๋„ ํ‰๊ฐ€ ํ•จ์ˆ˜ (์˜ˆ: ์œ ์ „์ž์˜ ํ•ฉ์„ ์ ํ•ฉ๋„๋กœ ์‚ฌ์šฉ)
fun evaluateFitness(individual: Individual) {
    individual.fitness = individual.genes.sum().toDouble()
}

// ๋ถ€๋ชจ ์„ ํƒ (๋ฃฐ๋ › ํœ  ๋ฐฉ์‹)
fun selectParents(population: List<Individual>): Pair<Individual, Individual> {
    val totalFitness = population.sumOf { it.fitness }
    fun selectOne(): Individual {
        val rand = Random.nextDouble(totalFitness)
        var cumulative = 0.0
        for (individual in population) {
            cumulative += individual.fitness
            if (cumulative >= rand) return individual
        }
        return population.last()
    }
    return Pair(selectOne(), selectOne())
}

// ๊ต์ฐจ ์—ฐ์‚ฐ
fun crossover(parent1: Individual, parent2: Individual): Individual {
    val crossoverPoint = Random.nextInt(parent1.genes.size)
    val childGenes = parent1.genes.copyOf().apply {
        for (i in crossoverPoint until size) this[i] = parent2.genes[i]
    }
    return Individual(childGenes)
}

// ๋Œ์—ฐ๋ณ€์ด ์—ฐ์‚ฐ
fun mutate(individual: Individual, mutationRate: Double = 0.01) {
    for (i in individual.genes.indices) {
        if (Random.nextDouble() < mutationRate) {
            individual.genes[i] = 1 - individual.genes[i] // 0 -> 1 ๋˜๋Š” 1 -> 0
        }
    }
}

// ์œ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
fun runGeneticAlgorithm(
    populationSize: Int,
    geneLength: Int,
    generations: Int,
    mutationRate: Double
) {
    var population = initializePopulation(populationSize, geneLength)

    repeat(generations) { generation ->
        // ์ ํ•ฉ๋„ ํ‰๊ฐ€
        population.forEach { evaluateFitness(it) }

        // ์ƒˆ๋กœ์šด ์„ธ๋Œ€ ์ƒ์„ฑ
        val newPopulation = mutableListOf<Individual>()
        while (newPopulation.size < populationSize) {
            val (parent1, parent2) = selectParents(population)
            val child = crossover(parent1, parent2)
            mutate(child, mutationRate)
            newPopulation.add(child)
        }

        population = newPopulation

        // ํ˜„์žฌ ์„ธ๋Œ€์˜ ์ตœ๊ณ  ์ ํ•ฉ๋„ ์ถœ๋ ฅ
        val bestIndividual = population.maxByOrNull { it.fitness }!!
        println("Generation $generation: Best Fitness = ${bestIndividual.fitness}")
    }
}

fun main() {
    runGeneticAlgorithm(
        populationSize = 100,
        geneLength = 10,
        generations = 50,
        mutationRate = 0.01
    )
}

 

์ฝ”๋“œ ์„ค๋ช…

์ดˆ๊ธฐํ™”

initializePopulation ํ•จ์ˆ˜์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ดˆ๊ธฐ ๊ฐœ์ฒด๊ตฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ ํ•ฉ๋„ ํ‰๊ฐ€

evaluateFitness ํ•จ์ˆ˜์—์„œ ๊ฐ ๊ฐœ์ฒด์˜ ์œ ์ „์ž ํ•ฉ์„ ์ ํ•ฉ๋„๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ ์„ ํƒ

selectParents ํ•จ์ˆ˜์—์„œ ๋ฃฐ๋ › ํœ  ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ๋ถ€๋ชจ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ

crossover ํ•จ์ˆ˜์—์„œ ๊ต์ฐจ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ž์†์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋Œ์—ฐ๋ณ€์ด

mutate ํ•จ์ˆ˜์—์„œ ์ผ์ • ํ™•๋ฅ ๋กœ ์œ ์ „์ž๋ฅผ ๋ณ€ํ˜•์‹œํ‚ต๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

Generation 0: Best Fitness = 8.0
Generation 1: Best Fitness = 9.0
...
Generation 49: Best Fitness = 10.0

 

์œ„ ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํ™”๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋ฉฐ, ์‹ค์ œ ๋ฌธ์ œ์— ๋งž๊ฒŒ ์ ํ•ฉ๋„ ํ•จ์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. Genetic Algorithm(GA)
  2. ์ดˆ๊ธฐํ™”(Initialization)
  3. ์ ํ•ฉ๋„ ํ‰๊ฐ€(Fitness Evaluation)
  4. ์„ ํƒ(Selection)
  5. ๊ต์ฐจ(Crossover)
  6. ๋Œ์—ฐ๋ณ€์ด(Mutation)
  7. ์ข…๋ฃŒ ์กฐ๊ฑด ํ™•์ธ(Termination)
  8. Kotlin์„ ํ™œ์šฉํ•œ Genetic Algorithm ์ƒ˜ํ”Œ ์ฝ”๋“œ
  9. ์ฝ”๋“œ ์„ค๋ช…
  10. ์ดˆ๊ธฐํ™”
  11. ์ ํ•ฉ๋„ ํ‰๊ฐ€
  12. ๋ถ€๋ชจ ์„ ํƒ
  13. ๊ต์ฐจ
  14. ๋Œ์—ฐ๋ณ€์ด
  15. ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ
'Programmings/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [algorithm] PID Controller ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • [algorithms] Smitsimax ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
    ํ€˜์ŠคํŠธ
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ๋ธŒ๋ฆฌํ•‘
    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ํƒœ๊ตญ
    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
    ์˜ค๋Š˜์˜๋‰ด์Šค
    ๋‰ด์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
[์•Œ๊ณ ๋ฆฌ์ฆ˜] Genetic Algorithms (์œ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.