From 6b893dcb36cbaaa0b5d60ecc9c877f73ad5b1feb Mon Sep 17 00:00:00 2001 From: wassname Date: Wed, 16 Jan 2019 11:55:54 +0800 Subject: [PATCH] fixes --- src/index.js | 10 +++++--- src/js/config.js | 4 ++- src/js/ddpg/ddpg_agent.js | 1 + src/js/ddpg/models.js | 4 +-- src/js/game.js | 3 +-- src/js/walker.js | 52 +++++++++------------------------------ 6 files changed, 25 insertions(+), 49 deletions(-) diff --git a/src/index.js b/src/index.js index 3eed86c..9d286e2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,10 @@ -const { Game, chooseQoute } = require('./js/game') -window.b2 = require('./vendor/jsbox2d') -window.config = require('./js/config') +import {Game, chooseQoute } from './js/game' +import { config } from './js/config' +import { b2 } from './vendor/jsbox2d' + +window.b2 = b2 +window.config = config window.chooseQoute = chooseQoute window.Game = Game + export {Game} diff --git a/src/js/config.js b/src/js/config.js index bea372a..d65061f 100644 --- a/src/js/config.js +++ b/src/js/config.js @@ -13,6 +13,8 @@ let config = { round_length: 1000, min_body_delta: 0, min_leg_delta: 0, - action_repeat: 4 + action_repeat: 4, + speed: 15, + strength: 2.2 }; export {config} diff --git a/src/js/ddpg/ddpg_agent.js b/src/js/ddpg/ddpg_agent.js index f0541f5..f93682f 100644 --- a/src/js/ddpg/ddpg_agent.js +++ b/src/js/ddpg/ddpg_agent.js @@ -99,6 +99,7 @@ class DDPGAgent { this.ddpg.actor.model.save('downloads://actor-' + name); this.ddpg.critic.model.save('downloads://critic-' + name); } + // TODO also save env config, maybe git commit. And training time } async restore(folder, name, callback) { diff --git a/src/js/ddpg/models.js b/src/js/ddpg/models.js index 56d29c7..d940f2c 100644 --- a/src/js/ddpg/models.js +++ b/src/js/ddpg/models.js @@ -10,7 +10,7 @@ const { */ function copyFromSave(model, instance, config, obs, action) { return tf.tidy(() => { - nModel = new instance(config); + let nModel = new instance(config); // action might be not required nModel.buildModel(obs, action); const weights = model.weights; @@ -30,7 +30,7 @@ function copyFromSave(model, instance, config, obs, action) { */ function copyModel(model, instance) { return tf.tidy(() => { - nModel = new instance(model.config); + let nModel = new instance(model.config); // action might be not required nModel.buildModel(model.obs, model.action); const weights = model.model.weights; diff --git a/src/js/game.js b/src/js/game.js index 80abcd6..1431269 100644 --- a/src/js/game.js +++ b/src/js/game.js @@ -1,4 +1,3 @@ -import config from './config'; import { tf } from './ddpg//tf_import' @@ -13,7 +12,7 @@ import { } from './walker' -chooseQoute = function () { +var chooseQoute = function () { var qoutes = [ 'Play the funky music, robot', 'The origin of funkd', diff --git a/src/js/walker.js b/src/js/walker.js index 89fa191..4951a43 100644 --- a/src/js/walker.js +++ b/src/js/walker.js @@ -10,9 +10,6 @@ import { Renderer } from './renderer' -const STRENGTH = 2.2 -const SPEED = 15 - class Walker { constructor(world, floor, config) { @@ -215,7 +212,7 @@ class Walker { jd.lowerAngle = deg2rad(-10 / 2); jd.upperAngle = deg2rad(30 / 2); jd.enableLimit = true; - jd.maxMotorTorque = 10 * STRENGTH; + jd.maxMotorTorque = 10 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -272,7 +269,7 @@ class Walker { jd.lowerAngle = deg2rad(-100); jd.upperAngle = deg2rad(-2); jd.enableLimit = true; - jd.maxMotorTorque = 260 * STRENGTH; + jd.maxMotorTorque = 260 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -287,7 +284,7 @@ class Walker { jd.lowerAngle = -deg2rad(-36); jd.upperAngle = deg2rad(30); jd.enableLimit = true; - jd.maxMotorTorque = 90 * STRENGTH; + jd.maxMotorTorque = 90 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -347,7 +344,7 @@ class Walker { jd.lowerAngle = deg2rad(0); jd.upperAngle = deg2rad(85); jd.enableLimit = true; - jd.maxMotorTorque = 150 * STRENGTH; + jd.maxMotorTorque = 150 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -362,7 +359,7 @@ class Walker { jd.lowerAngle = deg2rad(-35); jd.upperAngle = deg2rad(35); jd.enableLimit = true; - jd.maxMotorTorque = 90 * STRENGTH; + jd.maxMotorTorque = 90 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -402,7 +399,7 @@ class Walker { jd.lowerAngle = -0.1/2; jd.upperAngle = 0.2/2; jd.enableLimit = true; - jd.maxMotorTorque = 2 * STRENGTH; + jd.maxMotorTorque = 2 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -436,7 +433,7 @@ class Walker { jd.lowerAngle = deg2rad(-60); jd.upperAngle = deg2rad(125); jd.enableLimit = true; - jd.maxMotorTorque = 250 * STRENGTH; + jd.maxMotorTorque = 250 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -448,7 +445,7 @@ class Walker { jd.lowerAngle = deg2rad(-60); jd.upperAngle = deg2rad(125); jd.enableLimit = true; - jd.maxMotorTorque = 250 * STRENGTH; + jd.maxMotorTorque = 250 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -463,7 +460,7 @@ class Walker { jd.lowerAngle = deg2rad(-10); jd.upperAngle = deg2rad(80); jd.enableLimit = true; - jd.maxMotorTorque = 400 * STRENGTH; + jd.maxMotorTorque = 400 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -475,7 +472,7 @@ class Walker { jd.lowerAngle = deg2rad(-10); jd.upperAngle = deg2rad(80); jd.enableLimit = true; - jd.maxMotorTorque = 400 * STRENGTH; + jd.maxMotorTorque = 400 * config.strength; jd.motorSpeed = 0; jd.enableMotor = true; var j = this.world.CreateJoint(jd) @@ -573,7 +570,7 @@ class Walker { simulationPreStep(motorSpeeds) { // act for (var k = 0; k < this.joints.length; k++) { - this.joints[k].SetMotorSpeed(motorSpeeds[k] * SPEED); // action can range from -3 to 3, radians per second + this.joints[k].SetMotorSpeed(motorSpeeds[k] * config.speed); // action can range from -3 to 3, radians per second } for (let i = 0; i < motorSpeeds.length - this.joints.length; i++) { this.grips[i] = motorSpeeds[i] > 0 @@ -708,7 +705,6 @@ class Walker { reset() { /** Reset position to initial or random position TODO */ - // console.log('reset not implemented') if (this.bodies) this.destroy(); this.build(); this.initGrip() @@ -731,34 +727,8 @@ class Walker { // console.debug('warm up finished') } shuffle() { - /** Reset position to initial or random position TODO */ - // this.joints.forEach(j => { - - // }) - this.chuckBalls() - - // // console.log('shuffle not implemented') - // var b = this.torso.upper_torso - // let angle = b.GetAngle() - // let pos = b.GetPosition() - // // pos.x += randf(-1, 1) - // // pos.y += randf(0, 2) - // angle += Math.PI - // b.SetTransform(pos, angle) - - // let dx = randf(-1, 1) - // let dy = randf(-1, 1) - // let dangle = randf(-2, 2) - // this.bodies.forEach(b => { - // let angle = b.GetAngle() - // let pos = b.GetPosition() - // pos.x += dx - // pos.y += dy - // angle += dangle - // b.SetTransform(pos, angle) - // }) } }