add seed random on rapsberry emulator, add launch params: -r (use random), -s [number] - set seed in random
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import control.car.ControllerToUsb
|
import control.car.ControllerToUsb
|
||||||
import control.emulator.ControllerEmulator
|
import control.emulator.ControllerEmulator
|
||||||
|
import control.emulator.Rng
|
||||||
import net.Client
|
import net.Client
|
||||||
import net.server.handlers.AbstractHandler
|
import net.server.handlers.AbstractHandler
|
||||||
import net.server.handlers.debug.Memory
|
import net.server.handlers.debug.Memory
|
||||||
@@ -22,13 +23,21 @@ fun main(args: Array<String>) {
|
|||||||
val clArgs = js("process.argv")
|
val clArgs = js("process.argv")
|
||||||
var runAsEmulator = false
|
var runAsEmulator = false
|
||||||
var runTests = false
|
var runTests = false
|
||||||
|
var nextSeed = false
|
||||||
for (arg in clArgs) {
|
for (arg in clArgs) {
|
||||||
|
if (nextSeed) {
|
||||||
|
Rng.SEED = parseInt(arg, 10).toLong()
|
||||||
|
Rng.curState = Rng.SEED.toLong()
|
||||||
|
nextSeed = false
|
||||||
|
}
|
||||||
when (arg) {
|
when (arg) {
|
||||||
"-t" -> runTests = true
|
"-t" -> runTests = true
|
||||||
"-e" -> runAsEmulator = true
|
"-e" -> runAsEmulator = true
|
||||||
"-tr1" -> Room.walls = Room.testRoom1()
|
"-tr1" -> Room.walls = Room.testRoom1()
|
||||||
"-tr2" -> Room.walls = Room.testRoom2()
|
"-tr2" -> Room.walls = Room.testRoom2()
|
||||||
"-tr3" -> Room.walls = Room.testRoom3()
|
"-tr3" -> Room.walls = Room.testRoom3()
|
||||||
|
"-r" -> Room.randomOn()
|
||||||
|
"-s" -> nextSeed = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val carController =
|
val carController =
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ class ControllerEmulator : Controller {
|
|||||||
private val MOVE_VELOCITY = 0.05//sm/ms
|
private val MOVE_VELOCITY = 0.05//sm/ms
|
||||||
private val ROTATION_VELOCITY = 0.05//degrees/ms
|
private val ROTATION_VELOCITY = 0.05//degrees/ms
|
||||||
|
|
||||||
private val ADD_RANDOM = false
|
|
||||||
|
|
||||||
enum class MoveDirection {
|
enum class MoveDirection {
|
||||||
LEFT,
|
LEFT,
|
||||||
RIGHT,
|
RIGHT,
|
||||||
@@ -113,7 +111,7 @@ class ControllerEmulator : Controller {
|
|||||||
if (distance == -1) {
|
if (distance == -1) {
|
||||||
distances.add(distance)
|
distances.add(distance)
|
||||||
} else {
|
} else {
|
||||||
val delta = if (ADD_RANDOM) getRandomIntFrom(IntArray(5, { x -> x - 2 })) else 0//return one of -2 -1 0 1 or 2
|
val delta = if (Room.ADD_RANDOM) Rng.nextInt(-2, 2) else 0//return one of -2 -1 0 1 or 2
|
||||||
distances.add(distance + delta)
|
distances.add(distance + delta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,8 +182,8 @@ class ControllerEmulator : Controller {
|
|||||||
//refresh car state
|
//refresh car state
|
||||||
val carInstance = CarState.instance
|
val carInstance = CarState.instance
|
||||||
val commandDistance = currentCommand.second
|
val commandDistance = currentCommand.second
|
||||||
val delta = if (ADD_RANDOM) Math.random() * 0.2 + 0.9 else 1.0// delta in [0.9, 1.1)
|
val coef = if (Room.ADD_RANDOM) Rng.nextInt(900, 1100).toDouble() / 1000.0 else 1.0
|
||||||
val commandDistanceIncludeRandom = (commandDistance * delta).toInt()
|
val commandDistanceIncludeRandom = (commandDistance * coef).toInt()
|
||||||
when (currentCommand.first) {
|
when (currentCommand.first) {
|
||||||
MoveDirection.FORWARD -> carInstance.moving(commandDistanceIncludeRandom)
|
MoveDirection.FORWARD -> carInstance.moving(commandDistanceIncludeRandom)
|
||||||
MoveDirection.BACKWARD -> carInstance.moving(commandDistanceIncludeRandom)
|
MoveDirection.BACKWARD -> carInstance.moving(commandDistanceIncludeRandom)
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package control.emulator
|
||||||
|
|
||||||
|
object Rng {
|
||||||
|
var SEED = 55L
|
||||||
|
var curState = SEED
|
||||||
|
val a = 1664525L
|
||||||
|
val c = 1013904223L
|
||||||
|
val mod = 2147483648L
|
||||||
|
|
||||||
|
fun abs(value: Long): Long {
|
||||||
|
if (value < 0)
|
||||||
|
return -value
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
fun nextInt(): Int {
|
||||||
|
val res = curState
|
||||||
|
curState = abs(a * curState + c) % mod
|
||||||
|
return (res % mod).toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun nextInt(min_val: Int, max_val: Int): Int {
|
||||||
|
val rand = nextInt()
|
||||||
|
val size = max_val - min_val + 1
|
||||||
|
val randInRange = rand % size
|
||||||
|
val res = randInRange + min_val
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ object Room {
|
|||||||
|
|
||||||
|
|
||||||
var walls = testRoom1()
|
var walls = testRoom1()
|
||||||
|
var ADD_RANDOM = false
|
||||||
|
|
||||||
/*
|
/*
|
||||||
_________
|
_________
|
||||||
@@ -15,6 +16,10 @@ object Room {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
fun randomOn() {
|
||||||
|
ADD_RANDOM = true
|
||||||
|
}
|
||||||
|
|
||||||
fun testRoom1(): List<Wall> {
|
fun testRoom1(): List<Wall> {
|
||||||
val upLine = Line(0.0, 1.0, -300.0)
|
val upLine = Line(0.0, 1.0, -300.0)
|
||||||
val leftLine = Line(1.0, 0.0, 150.0)
|
val leftLine = Line(1.0, 0.0, 150.0)
|
||||||
|
|||||||
Reference in New Issue
Block a user