Closed iida-hayato closed 4 years ago
アトラクタを連続的に円周上に並べる
public next(): [Force, WorldObject[]] {
this.previousPosition = this.position
if (this.isAlive === false) {
return [Force.zero(), []]
}
const max = 0.1
const target = (this.gene.value / Gene.geneMask) * Math.PI * 2
const targetPosition = new Vector(
Math.cos(target),
Math.sin(target),
)
.sized(size * 0.4)
.add(world.size.div(2))
const movingForce = targetPosition.sub(this.position).sized(max).add(Vector.random(max * 0.5, -max * 0.5))
const force = new Force(movingForce)
return [force, []]
}
移動が高速なのでサイクルがわかる またmature intervalとreproduce intervalが等しいので世代もわかる
?d=1&t=1&a=0&t=1&si=500&f=0.92&g=1&p=400&l=12&m=0&e=100&be=100&mi=100&ri=100&af=1
const attractForce = parameters.float("attract_force", 0.1, "af")
...
public next(): [Force, WorldObject[]] {
this.previousPosition = this.position
if (this.isAlive === false) {
return [Force.zero(), []]
}
const target = (this.gene.value / Gene.geneMask) * Math.PI * 2
const targetPosition = new Vector(
Math.cos(target),
Math.sin(target),
)
.sized(size * 0.4)
.add(world.size.div(2))
const movingForce = targetPosition.sub(this.position).sized(attractForce).add(Vector.random(attractForce * 0.5, -attractForce * 0.5))
const force = new Force(movingForce)
return [force, []]
}
const fieldSize = new Vector(size, size)
http://localhost:8000/pages/machine.html?debug=0&test=1&art_mode=0&background_transparency=1&statistics_interval=500&friction=0.95&life_size=12&mutation_rate=0.03&initial_energy=100&birth_energy=100&mature_interval=200&reproduce_interval=100&p=1000&g=0