Skip to content

Instantly share code, notes, and snippets.

@gzoritchak
Last active June 8, 2016 09:05
Show Gist options
  • Save gzoritchak/58763533ef6fb102f61421830aac787e to your computer and use it in GitHub Desktop.
Save gzoritchak/58763533ef6fb102f61421830aac787e to your computer and use it in GitHub Desktop.
package org.gzk.marslander
import java.io.StringReader
import java.util.*
fun main(args: Array<String>) {
val bestChimp = findBestChimp(::createMarsLander1FromGenome, ::marsLander1Fitness)
println(
bestChimp.result.trajectory.drop(1).joinToString (transform = { state -> "${state.angle}, ${state.power}" })
)
}
val marsLander1InitState = State(500, 0, 0, particule(2500.0, 2500.0, speed(0.0, 0.0)))
val mars1Ground by lazy {
codingGameGroundInputsToLine(
"""
0 100
6999 100""")
}
fun codingGameGroundInputsToLine(groundAsString:String): Line {
val points = mutableListOf<Point>()
val sc = Scanner(StringReader(groundAsString))
while (sc.hasNextLine()) {
points.add(Point(sc.nextDouble(), sc.nextDouble()))
}
return Line(points)
}
fun createMarsLander1FromGenome(genome: Array<Gene>):Lander {
var previousPower = 0
val ret = mutableListOf<ControlCmd>()
(1..genomeSize).forEach {
val power = (previousPower + genome[it-1].asInt(1)).coerceAtMost(4)
ret.add(ControlCmd(power, 0))
previousPower = power
}
return Lander(marsLander1InitState, ret, mars1Ground)
}
fun marsLander1Fitness(lander: Lander)= when (lander.flystate) {
FlyState.Landed -> lander.trajectory.last().fuel.toDouble()
FlyState.Flying -> - lander.trajectory.last().position.y + mars1Ground.landingZone.first.y
FlyState.Crashed -> with(lander.trajectory.last()) {
mars1Ground.landingZone.first.y - position.y + speed.ySpeed + 40
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment