Package eas.users.students.fabian.diplomarbeit.EvolvableBoxAgents3D.Agents

Examples of eas.users.students.fabian.diplomarbeit.EvolvableBoxAgents3D.Agents.EvolvableBoxAgent3DAppendix


      else {
        predecessor = agent.getAppendices().get(
            ainfo.getPredecessorId());
      }

      new EvolvableBoxAgent3DAppendix(ainfo.getAppendixId(), predecessor,
          ainfo.getSize(), ainfo.getPositionOnPredecessor(),
          ainfo.getFreeAxis());//.hashCode();
    }

    EvoBoxNeuroBrain brain = new EvoBoxNeuroBrain(agent, agent.id(),
View Full Code Here


    {
      LinkedList<EvolvableBoxAgent3DAppendix> appendices = new LinkedList<EvolvableBoxAgent3DAppendix>(
          env.getAgent(0).getAppendices().values());
      Iterator<EvolvableBoxAgent3DAppendix> iter = appendices.iterator();
      while (iter.hasNext()) {
        EvolvableBoxAgent3DAppendix a = iter.next();
        float desiredAngle = (simZyk.getLastTick() % 120) / 120.f;
        desiredAngle = (float) (desiredAngle * Math.PI * 2);
        desiredAngle = (float) Math.sin(desiredAngle);
        desiredAngle = desiredAngle + 1;
        desiredAngle = desiredAngle / 2f;
        a.getAngleActuator().setNormalizedAngle(desiredAngle);
        String currentSensor = "EvolvableBoxAgent3DActuatorServo"
            + a.getAppendixId();
        env.getAgent(0).actuate(currentSensor);
      }
    }
   
    env.stepPhysicalSimulationAt60Hertz();
View Full Code Here

   */
  @Override
  public void actuate(EvolvableBoxAgent3DEnvironment env,
      EvolvableBoxAgent3D agent) {
    // Get the RotationalLimitMotor for the appendix.
    EvolvableBoxAgent3DAppendix appendix = agent.getAppendices().get(this.appendixId);
    RotationalLimitMotor rlm = appendix.getConstraint().getRotationalLimitMotor(appendix.getFreeAxis());
   
    //NEU
    double valueFromBrain = agent.getActuatorWerte()[appendixId-1];
    //normalizedAngle = valueFromBrain;
    normalizedAngle = normalizedAngle * Math.PI;
    normalizedAngle = normalizedAngle + valueFromBrain* Math.PI;
    normalizedAngle = Math.sin(normalizedAngle);
   
   
    //normalizedAngle += valueFromBrain*Math.PI;
    //normalizedAngle = Math.sin(normalizedAngle);
   
    //normalizedAngle += agent.getActuatorWerte()[appendixId-1];
    //normalizedAngle = (Math.sin(normalizedAngle*10.) +1) / 2. ;
    //normalizedAngle = Math.sin(normalizedAngle*Math.PI) ;
    //normalizedAngle = Math.sin(normalizedAngle) ;
    
    float oneDegree = (float) Math.toRadians(1);
   
    if (normalizedAngle < -1 || normalizedAngle > 1) {
      System.err.println("INVALID NORMALIZED ANGLE! " + normalizedAngle);
    }
   
    // Only angles from -85 to 85 degrees.
    //float desiredAngle = (float) (-Math.toRadians(85) + Math.toRadians(2*85) * this.normalizedAngle);
    float desiredAngle = (float) (Math.toRadians(85) * this.normalizedAngle);
   
    //System.out.println("\ndesired angle: " + Math.toDegrees(desiredAngle));
   
    float lastAngle = rlm.loLimit + oneDegree;
   
    //if ( Math.abs (lastAngle-desiredAngle) < oneDegree/5f) {
      //System.out.println("Change too small.");
      //return;
    //}
   
    float angle = 0;
   
    // Make max turning speed tick-independent using a clock!
    long microSeconds = clock.getTimeMicroseconds();
    clock.reset();
    double seconds = microSeconds / 1000000.;
    // Not more than 720 degrees per second for rotation.
    double maximumPerSecond = 360000;
    float maxAngleChange = (float) (seconds * maximumPerSecond);
    //System.out.println("" + seconds + "..." + maxAngleChange);
    if (Math.toDegrees(desiredAngle-lastAngle) > maxAngleChange) {
      angle = lastAngle + (float) Math.toRadians(maxAngleChange);
      while (angle > Math.toRadians(80)) {
        angle = angle - oneDegree/10f;
      }
      //System.out.println("Change too big, only added " + maxAngleChange);
    }
    else if (Math.toDegrees(lastAngle-desiredAngle) > maxAngleChange) {
      angle = lastAngle - (float) Math.toRadians(maxAngleChange);
      while (angle < Math.toRadians(-80)) {
        angle = angle + oneDegree/10f;
      }
      //System.out.println("Change too big, only subtracted " + maxAngleChange);
    }
    else {
      angle = desiredAngle;
      //System.out.println("Change ok.");
    }
    //angle = desiredAngle;
   
    //System.out.println("last angle: " + Math.toDegrees(lastAngle) + " actual angle: " + Math.toDegrees(angle));
   
    //if (appendix.getAgentCore().getPosition().y > 12) {
      //System.out.println("DANGER!!!!!!!!!!!!!!");
    //}
    /*
    if (Math.abs(appendix.getConstraint().getAngle(appendix.getFreeAxis())) > Math.toRadians (89.9)){
      System.out.println("ANGLE TOO HIGH!!!!!!!!!!" + Math.toDegrees(appendix.getConstraint().getAngle(appendix.getFreeAxis())));
    }*/
    /*
    System.out.println("lastangle: " + Math.toDegrees(lastAngle)
        + " desired angle: " + Math.toDegrees(desiredAngle)
        + " allowed angle: " + Math.toDegrees(angle)
        + " seconds: " + seconds);*/
   
   
    //Set the actual rotational limits so that the servo-like steering is possible.
    rlm.loLimit = angle - oneDegree;
    rlm.hiLimit = angle + oneDegree;
    /*
    rlm.limitSoftness = 0.1f;
    rlm.damping = 2f;
    rlm.ERP = .1f;
    rlm.maxLimitForce = 11;
    rlm.maxMotorForce = 10;
    */
    /*
    rlm.bounce = 0;
    rlm.damping = 10;
    rlm.maxMotorForce = appendix.getMass();
    rlm.maxLimitForce = appendix.getMass()*1.5f; */
   
    //rlm.maxLimitForce = appendix.getMass() * 1.5f;
    //rlm.ERP = .1f;
    //appendix.getAgentCore().getRigidBody().activate();
    // Activate the rigidBody so that the movement is actually performed and not missed
    // because it is in sleeping state!
    appendix.getRigidBody().activate();
   
    rlm.enableMotor = true;
   
    //System.out.println("Servo for appendix " + appendixId + " set angle to: " + normalizedAngle);
  }
View Full Code Here

    //A list of all appendices attached to the agent.
    LinkedList<EvolvableBoxAgent3DAppendix> appendixList = new LinkedList<EvolvableBoxAgent3DAppendix> (agent.getAppendices().values());
    Iterator<EvolvableBoxAgent3DAppendix> iter = appendixList.iterator();
    //Go through the whole list and check if any appendix makes contact with the ground.
    while (iter.hasNext()) {
      EvolvableBoxAgent3DAppendix a = iter.next();
      if (a.touchesGround()) {
        // If an appendix touches the ground add its id to the list.
        list.add(a.getAppendixId());
      }
    }
    return list;
  }
View Full Code Here

  @Override
  public Double sense(EvolvableBoxAgent3DEnvironment env,
      EvolvableBoxAgent3D agent) {
   
    double result;   
    EvolvableBoxAgent3DAppendix appendix = agent.getAppendices().get(this.appendixId);
   
    double angle = Math.toDegrees( appendix.getConstraint().getAngle(appendix.getFreeAxis()));
    // Auf zwei Nachkommastellen runden.
    angle = (int) (angle * 100);
    angle = angle / 100.;
   
    // 0 entspricht -90 Grad, 0.5 entspricht 0 Grad, 1 entspricht 90 Grad
    //result = ( Math.toRadians(85) +  appendix.getConstraint().getAngle(appendix.getFreeAxis()) ) / Math.toRadians (170);
   
    // -1 entspricht -85 Grad, 0 entspricht 0 Grad, 1 entspricht 85 Grad
    result = appendix.getConstraint().getAngle(appendix.getFreeAxis()) / Math.toRadians (85);
   
   
    //System.out.println("Appendix #" + this.appendixId + " has an angle of: " + angle + " normalized: " + result);
    
    return result;
View Full Code Here

    {
      LinkedList<EvolvableBoxAgent3DAppendix> appendices = new LinkedList<EvolvableBoxAgent3DAppendix>(
          env.getAgent(0).getAppendices().values());
      Iterator<EvolvableBoxAgent3DAppendix> iter = appendices.iterator();
      while (iter.hasNext()) {
        EvolvableBoxAgent3DAppendix a = iter.next();
        float desiredAngle = (clock.getTimeMilliseconds() % 2000) / 2000.f;
        desiredAngle = (float) (desiredAngle * Math.PI * 2);
        desiredAngle = (float) Math.sin(desiredAngle);
        desiredAngle = desiredAngle + 1;
        desiredAngle = desiredAngle / 2f;
        a.getAngleActuator().setNormalizedAngle(desiredAngle);
        String currentSensor = "EvolvableBoxAgent3DActuatorServo"
            + a.getAppendixId();
        env.getAgent(0).actuate(currentSensor);
      }
    }

    env.stepPhysicalSimulationInRealTime();
View Full Code Here

    track.addTrackPoint();
   
    LinkedList<EvolvableBoxAgent3DAppendix> appendices =  new LinkedList<EvolvableBoxAgent3DAppendix>(env.getAgent(0).getAppendices().values());
    Iterator<EvolvableBoxAgent3DAppendix> iter = appendices.iterator();
    while (iter.hasNext()) {
      EvolvableBoxAgent3DAppendix a = iter.next();
      float desiredAngle = (simZyk.getLastTick() % 1000) / 1000.f;
      desiredAngle = (float) (desiredAngle * Math.PI *2);
      desiredAngle = (float) Math.sin(desiredAngle);
      desiredAngle = desiredAngle + 1;
      desiredAngle = desiredAngle / 2f;
      a.getAngleActuator().setNormalizedAngle(desiredAngle);
      String currentSensor = "EvolvableBoxAgent3DActuatorServo" + a.getAppendixId();
      env.getAgent(0).actuate(currentSensor);
    }
   
    env.stepPhysicalSimulationInRealTime();
   
View Full Code Here

        LinkedList<EvolvableBoxAgent3DAppendix> appendices = new LinkedList<EvolvableBoxAgent3DAppendix>(
            env.getAgent(0).getAppendices().values());
        Iterator<EvolvableBoxAgent3DAppendix> iter = appendices
            .iterator();
        while (iter.hasNext()) {
          EvolvableBoxAgent3DAppendix a = iter.next();
          float desiredAngle = (j % 120) / 120.f;
          desiredAngle = (float) (desiredAngle * Math.PI * 2);
          desiredAngle = (float) Math.sin(desiredAngle);
          desiredAngle = desiredAngle + 1;
          desiredAngle = desiredAngle / 2f;
          a.getAngleActuator().setNormalizedAngle(desiredAngle);
          String currentSensor = "EvolvableBoxAgent3DActuatorServo"
              + a.getAppendixId();
          env.getAgent(0).actuate(currentSensor);
        }
      }
      //System.out.println("Agent " + i + " has fitness of "
      //    + env.getAgent(0).getFitness());
      if (env.getAgent(0).getFitness() > highestFitness) {
        System.out.println("New highest fitness: "
            + env.getAgent(0).getFitness());
        System.out.println("Genome: "
            + env.getAgent(0).getGenome().toString());
        bestGenome = env.getAgent(0).getGenome();
        highestFitness = env.getAgent(0).getFitness();
        EvolvableBoxAgent3DGenomeHandler.savePopulationToFile("GENOMEScurrentBest",
            new EvolvableBoxAgent3DGenome[] { bestGenome }, params);
      }
      env.removeAgent(0);
    }
    // End after 50 generations.
    if (simZyk.getLastTick() == 49) {
      System.out.println("Best achieving genome: "
          + bestGenome.toString() + " with fitness of: " + highestFitness + ".");
      EvolvableBoxAgent3DGenome[] save = new EvolvableBoxAgent3DGenome[] { bestGenome };
      EvolvableBoxAgent3DGenomeHandler.savePopulationToFile("GENOMESbestDuringWholeRun",
          save, params);
      env.getSimTime().timeTerminate();
    }
   
    //
    else {
      EvolvableBoxAgent3DGenome[] newPopulation = new EvolvableBoxAgent3DGenome[population.length];

      // remove the bottom 10 of the population
      for (int i = 0; i < 10; i++) {
        currentAgents.remove(Collections.min(currentAgents));
      }
     
      // add 8 new random genomes
      for (int i = 0; i < 8; i++) {
        EvolvableBoxAgent3DGenome g = EvolvableBoxAgent3DGenomeHandler.createRandomGenome(params, new Random());
        newPopulation[i] = g;
      }
     
      // allow the next 35 in new population
      for (int i = 8; i < 44; i++) {
        EvolvableBoxAgent3D a = Collections.min(currentAgents);
        EvolvableBoxAgent3DGenome origGenome = a.getGenome();
        newPopulation[i] = origGenome;
        currentAgents.remove(a);
      }

      // add the next 5 in new population and 5 mutated, too
      for (int i = 44; i < 50; i++) {
        EvolvableBoxAgent3D a = Collections.min(currentAgents);
        newPopulation[i++] = a.getGenome();
        //System.out.println(i + "::::::: " + a.getGenome().toString());
        newPopulation[i] = EvolvableBoxAgent3DGenomeHandler.mutate(a
            .getGenome(), params, new Random());
        //System.out
        //    .println(i + "::::::: " + newPopulation[i].toString());

        currentAgents.remove(a);
View Full Code Here

TOP

Related Classes of eas.users.students.fabian.diplomarbeit.EvolvableBoxAgents3D.Agents.EvolvableBoxAgent3DAppendix

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.