import java.lang.*; import java.io.*; import java.util.*; //Machine Learning by function approximation for tank(moving target) bombardment //assume distance=A*angle*speed*speed //Stdout for turns to hit, final constant A //Stderr for A, Angle, Speed, Distance, Target for each bombing //java Tank4 > tank4out.csv 2> tank4err.csv public class Tank4 { public static void main(String[] args){ Random rand = new Random(0); //set random seed //max_range = 1000; max_angle = Math.PI/2; max_speed = 100; //assume d = A*angle*speed*speed //assume fixed angle(=0.8) //therefore speed = Sqrt(d / (A * angle)) double A=rand.nextDouble()*10; //initialize A System.out.println("Turns, A"); for(int loop=0; loop<100; loop++){ //loop 100 times int counter = 0; //Initialize counter System.err.println("A, Angle, Speed, Distance, Target"); while(true){ //Loop until hit counter++; double angle; double speed; double distance; int target = (int)((rand.nextDouble()*1000.0)+1.0); //move target tank //assume d=A*angle*speed*speed //assume fixed angle(=0.8) //therefore speed = Sqrt(d / (A * angle)) angle = 0.8; speed = Math.sqrt(target / ( A * angle )); distance = (speed * speed * Math.sin( angle * 2.0 ))/9.8 ; //output shot result System.err.println(A+"A, "+angle+", "+speed+", "+distance+", "+target); if(distance > (target-10) && distance < (target+10)) break; //if hit then exit while //if overshot if(distance > target){ A = A*1.1; //10% more }else{ A = A*0.9; //10% less } }//end while(true) System.err.println("---HIT!!!---"); System.out.println(counter+", "+A); }//end for(loop) }//end main() }//end class Tank4