From 17eb2d258cd549551864ae1a8cbcfad5fe2a4755 Mon Sep 17 00:00:00 2001 From: waltr21 Date: Thu, 28 Mar 2019 13:57:39 -0400 Subject: [PATCH 1/6] Basic grid function --- GameScene.pde | 11 +- Grid.pde | 88 +++ Ship.pde | 2 +- Train_Files/Asteroids_Train.java | 6 +- best.net | Bin 8193 -> 8193 bytes build/Asteroids_Train$Asteroid.class | Bin 0 -> 3880 bytes build/Asteroids_Train$Bullet.class | Bin 0 -> 3236 bytes build/Asteroids_Train$GameScene.class | Bin 0 -> 5245 bytes build/Asteroids_Train$Grid.class | Bin 0 -> 2579 bytes build/Asteroids_Train$Locals.class | Bin 0 -> 861 bytes build/Asteroids_Train$Sensor.class | Bin 0 -> 2852 bytes build/Asteroids_Train$Ship.class | Bin 0 -> 8090 bytes build/Asteroids_Train.class | Bin 0 -> 2294 bytes build/Connection.class | Bin 0 -> 820 bytes build/Network.class | Bin 0 -> 8526 bytes build/Neuron.class | Bin 0 -> 4165 bytes build/Simple_NEAT.class | Bin 0 -> 4055 bytes build/Vector.class | Bin 0 -> 843 bytes build/source/Asteroids_Train.java | 987 ++++++++++++++++++++++++++ build/source/Network.java | 362 ++++++++++ build/source/Neuron.java | 171 +++++ build/source/Simple_NEAT.java | 177 +++++ build/source/Vector.java | 27 + 23 files changed, 1823 insertions(+), 8 deletions(-) create mode 100644 Grid.pde create mode 100644 build/Asteroids_Train$Asteroid.class create mode 100644 build/Asteroids_Train$Bullet.class create mode 100644 build/Asteroids_Train$GameScene.class create mode 100644 build/Asteroids_Train$Grid.class create mode 100644 build/Asteroids_Train$Locals.class create mode 100644 build/Asteroids_Train$Sensor.class create mode 100644 build/Asteroids_Train$Ship.class create mode 100644 build/Asteroids_Train.class create mode 100644 build/Connection.class create mode 100644 build/Network.class create mode 100644 build/Neuron.class create mode 100644 build/Simple_NEAT.class create mode 100644 build/Vector.class create mode 100644 build/source/Asteroids_Train.java create mode 100644 build/source/Network.java create mode 100644 build/source/Neuron.java create mode 100644 build/source/Simple_NEAT.java create mode 100644 build/source/Vector.java diff --git a/GameScene.pde b/GameScene.pde index 0a13ff7..e532e4a 100644 --- a/GameScene.pde +++ b/GameScene.pde @@ -4,16 +4,18 @@ public class GameScene{ boolean online; Locals locals; Simple_NEAT n; + Grid gameGrid; public GameScene(Locals l){ locals = l; - locals.level = 4; + locals.level = 3; resetAstroids(locals.level); locals.player = new Ship(locals); n = new Simple_NEAT(33,4); - Network temp = Network.loadFromFile("C:/Users/WALTR/Downloads/CODE/Processing/Asteroids_Train/best.net"); + Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); n.addAgent(temp); n.setCurrentAgent(0); + gameGrid = new Grid(50, l); } /** @@ -73,9 +75,10 @@ public class GameScene{ showText(); // locals.player.showBullets(); locals.player.show(); - runNetwork(); + // runNetwork(); showAsteroids(); checkLevel(); + gameGrid.show(); } public void runNetwork(){ @@ -105,7 +108,7 @@ public class GameScene{ if (outputs[2] >= 0.5){ locals.player.turnRight(); } - if (outputs[3] >= 0.5){ + if (outputs[3] <= 0.5){ locals.player.accelerate = true; locals.player.accelerate(); } diff --git a/Grid.pde b/Grid.pde new file mode 100644 index 0000000..b32d37a --- /dev/null +++ b/Grid.pde @@ -0,0 +1,88 @@ +public class Grid{ + double[][] grid; + Locals l; + int cellWidth; + + + //CellWidth should be an even multiple of the width and height of the screen. + public Grid(int cellWidth, Locals l){ + this.l = l; + this.cellWidth = cellWidth; + int xSize = (int) l.width / cellWidth; + int ySize = (int) l.height / cellWidth; + grid = new double[xSize][ySize]; + resetGrid(); + } + + private void resetGrid(){ + for (int x = 0; x < grid.length; x++){ + for (int y = 0; y < grid.length; y++){ + grid[x][y] = 0.0; + } + } + } + + private void setAsteroids(){ + resetGrid(); + for (Asteroid a : l.asteroids){ + int xCell = (int) (a.getX() / cellWidth); + int yCell = (int) (a.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = a.getLevel() * 0.33; + } + + int xCell = (int) (l.player.getX() / cellWidth); + int yCell = (int) (l.player.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = -1; + } + + public void show(){ + float squareSize = 200; + + stroke(255); + fill(0, 0, 0); + rect(10, 10, squareSize, squareSize); + + float subSize = squareSize / grid.length; + + setAsteroids(); + for (int x = 0; x < grid.length; x++){ + for (int y = 0; y < grid.length; y++){ + if (grid[x][y] > 0){ + fill(255); + noStroke(); + rectMode(CORNER); + rect(10 + subSize * x, 10 + subSize * y, subSize, subSize); + } + if (grid[x][y] < 0){ + fill(255, 0, 0); + noStroke(); + rectMode(CORNER); + rect(10 + subSize * x, 10 + subSize * y, subSize, subSize); + } + } + } + } + +} diff --git a/Ship.pde b/Ship.pde index 35018cd..718ff7a 100644 --- a/Ship.pde +++ b/Ship.pde @@ -253,7 +253,7 @@ public class Ship{ pushMatrix(); //Display the bullets showBullets(); - showSensors(); + //showSensors(); //Edit pos of the ship. turn(); diff --git a/Train_Files/Asteroids_Train.java b/Train_Files/Asteroids_Train.java index 4b6f0e8..5d29f01 100644 --- a/Train_Files/Asteroids_Train.java +++ b/Train_Files/Asteroids_Train.java @@ -91,7 +91,7 @@ public void printBest(int gen, int total){ } int percent = (int) (gen / (total * 1.0) * 100); System.out.println(String.format("Generation: %d / best fit: %f", gen ,neat.getBestFit().getFitness())); - System.out.println("Progress: " + Colors.GREEN + percent + "%" + Colors.RESET); + System.out.println("Progress: " + Colors.GREEN + percent + "%" + Colors.RESET); System.out.println("Time Remaining: " + Colors.YELLOW + timeRemain(gen , total) + Colors.RESET); } @@ -102,11 +102,11 @@ public void removeLine(int amt){ } } - public String timeRemain(int gen, int total){ + public String timeRemain(int gen, int total){ long tempStamp = System.currentTimeMillis(); long passed = tempStamp - stamp; timeSum += passed; - + if (gen % 10 == 0){ curAvgTime = (double) timeSum / 10.0; timeSum = 0; diff --git a/best.net b/best.net index 60dd8c66598ae054e2ba0630ec267c211c295384..ea8e56cf0981927ed35edcc17f8de44bbd93a165 100644 GIT binary patch literal 8193 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 literal 8193 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 diff --git a/build/Asteroids_Train$Asteroid.class b/build/Asteroids_Train$Asteroid.class new file mode 100644 index 0000000000000000000000000000000000000000..db54f29d87115953c8cd2122c3de3e2e45b4505f GIT binary patch literal 3880 zcma)8`*Ryt75-M1SF(KLM`8!tfzZUUEh%Z7hIU$TngaKn9orX83`B0Qiw#p+ou3?#k9EhCwsC z_w2p*oO{0SJg%<)`|WE0K8D|f5YW)JEANF1W{m83 z@7-e)X4281&G1R^IiVq#w;nV#)N(z;F+63=44KEw45u>Qs10(OGr6SYP$4`tLL)i5 zPeWi2msa%WvU$hIIwMA=VCp;T*8S@NI;TOWhLOqBzoD{2We11c6j!vvmXvOLXYVZ+-4`Ho_nrLi9R&G*g zgf7y0g;i(~X@f$oH`lEY@}#Ij*puQ4^-%iGFyZkh3Y!%o&?DG_ts&f^q1z?9;8>a7 zWGpT8__Uw6vg8Bw=kL3#4R2}x?KnUVq*}k843J0OM?YNb4 z()v#7$xrrwPT@XT($l6jo+iK*dmSS=Ic!Y(5Ol{jSORsV!jK#p^U3I*lp9&M0$C! zo;Mw0AuQ1|vPouD$efwZu&TuDqf$$40`;WAV|bjoWR!c5hSrKy-eudyi6I&xpeOK^ z5T4YqYAMqfmleK>uMvomO3^^nvry5r`eOHrfu|InmVLTyPUVi#E6vhSpEZw{Iikyg zCz-Rk$WoV_&8Kt6BaHI%3NHw{$aEo}9yT1?nh`K(6-=xZ=|zQ6PkLEluSomxio$u9 zl5B3k%4B5fRfTWiqOj!Hxk;WAj1I;|WaT>wmt>{h%w(+TygBUhwIAP8cnzbERn1!=FvCU`I3cf@ts?Oi*_$iaNs|oF z^Xi1$EQe@NgW0TU_h*cJ-ekFlmqMa@otXzo>S7(Ku3_ax_^{nd5lXXlN48pbWZQB_ zc2{>~<8?1*%R@NMRdgH@!@z2 znv3{oyggLJx_GpR&Ujm}h^}~3v{g^f7SR)L)r*L6A60ISFQB&tw^6Bt+l%On$LG+u zfIExmrzFqKjmcJhcKr0pPfeUEVc<=k7Qkot-s<{ou*)2zw`24!i8V-(0}~r@1h=q; z?m(K|)ndj?@I8soQtwtWLys|pVU8jRQvp{Ju7a*4tO!37xQqBhF6z5|)PJRhFg$uA z>bh#wYg@xU>Tm_>Hd63ku!d*HTd-$x8K_e})GVRq2vx#;lu&I#%@eA_rdhxsj^Tc` zCV{%$g)q7Zb#xKxsGAl7brkn-mp~nrJJ=29s0&&yE0(Gc`X4R{z_W}=C!d~V!pTh&E1guPmhnz^tgzJu%q77~_KE*P68tZYo;;iF{Va3k zIsTz}9{o7u`mx$g`GoJsI@0wJfoseiAwYW{{Wbi0c+tD-zITUtNGx~}gEiYOVaru$ zhd9x}r|fYom=Ztc@yM`@bNKS65@rva)U-9V7e4rdKNm0I)PYNAto&SZx|@dqFESZl z=AWf=O!8N7JLMg?K<8g&dS1l6ybvUQH@T!8_JKrj8;O>fZshyxtnq*gsUE@iu|nJQ zPpqov;xi1m*TU}O1_^9CJ&6U+LvKo57O_^ut(TixE_2b#uGP!|@VW`(b>`V+cE&eY zidQPa+Fp@GK?LgM>ifnbg|E2;0|#lpqlD+k!5Kc^t$$ix)|9)BJB0Ghb7TXzfDMmfs!&be-Y=kZVe`F^7$+h5> zk?sSR(vfy5Uh^-YZ>y5Oo@z(_yo@6O`D^JbPtu$eLwj3o4{wG;3n;aPV!o7Iz}0Gl ze{l_Zw_G_Nsm>^S0c*#*lmuHleo9Glx}9OvnJoeQoL>R_0>9+g!Ce~m<2}B|IsS^{ J6vtmf`wwYo_!DJk~C1vqo%nGH_Q!_xzl+B zsIO(MM*GnCY}3^Gs>W)xR+$N{THnu~{3l$i*0*b^OS4wvx9^<^l)zf|>~r_od!PO7 z*ByTM#w)J^*p1&Bs8ZNCkjvXy*O|^eIFYrSblcs9RLag92rAT_wa#1JDJwnGeR%4u zoyaSwc|JpY78F7}NZAU(obxbADB%{;A~M3gJD0Yz+@Da0oVQbM!pT!3GCD~sZnjUM z>IlVZ2HkWnZ>95-R;pl!`=i^gpQdjLVQN^ZoI>O1YX3&P6Iux8lTNO!N1=YTj2!NF z(oX(>LU;U@)1jfE)x5T{)s9KR8FZ)ZD4n=nVhA%HC!jo7LXh<8lN$u^BTgk`r~ zqX8Ra_g0ON&)cD4ARNByzdjl{?9_;m)!#sL{1aBUCh=_Cp%Fv1@OEox)Wom{dkwse zDEx3~ydCdQh@Q#1=LYs+?=Q8`Tt>bEfl25j(DN zLO9{1?aU+zu4X)MC1%I0OxgWNB55aP4?6iMPT{nH2iGWcKjj)0=u*_Gw1L8gQLpX` zc_-C9kj+{PqfRd07sE8p7+}EOvc|E-43fm_u$e4YIPZ&htgtgu=J!?OEK&w$8TVx~ zl~av#NHbMwd!C>gDi&6BV4r~u)3Pc+ZI$;JTx2zJkc7|J`D0$q4hj3b#$1JcJjRk) z(0CZ{rQ9^(F)4BO#ZZSQ`+kiNh^#>q<81D5zh73Y*i(2!@R3MC*D-ssg#q+*<-v__+QfaGQPsfVGpEpDJxG~q4@By_^I%` z#yhc9)c8b8F31ouN(sS=I_&hx7I zJGd;!GT$pZF0pa9kWJXbj!cQwiRzNe6!b`%gMKh&<#IOXMWhmAmWMwnxbYi}S4nQM zjnN6PoML=9FulU!xb!Gzq(?azJ<74@Q4U3qa>S9=$?&C>dhV;Ro-0Q%*>y6m`6lsi zL=)FdeEU6biIN^QJBw&GuVJ&IVjlN@bl|#YVWTf~6HFL~nKn**93fyo8QtDH6Hmu_uhOU=KglNW#tKJ5 zHyt@zQC8tH*2`2Ds9lNLr=P`blAGp5j9>6rM1F-?ElbQ)&YpS>HD;|yFu$TKp?R}` zV-*AKz5!37Y~a|1HyMzlp8CL}&m$DPDuM2)i=1Yy1O!sRD~Wyl9z#{3Rt4C(LA0t6 z_7cK?isG<};k2qoLTSva8a$%v@Pw-8Kxn`vwP8gVE|i;YG{d6!tiE2|Cmc?SJ~)l^1Bb-Y?mL=%3@oecIS)}6Gf?0(7} l|INV9JZwM5FGyQC)?9w_eo0pp>94q+BK`g0%nu literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$GameScene.class b/build/Asteroids_Train$GameScene.class new file mode 100644 index 0000000000000000000000000000000000000000..43e0c6d294d4b1dd0dd82c535e0ccf5e2714a9be GIT binary patch literal 5245 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 literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$Locals.class b/build/Asteroids_Train$Locals.class new file mode 100644 index 0000000000000000000000000000000000000000..73b3338ccd9809ab81c4820491c6fe696e7f56b3 GIT binary patch literal 861 zcmZuvU2hUm5IwU{D7aEU`eprSDJoDcRv+6mX`0wHA@zZVS95_I_BPw4*Q0C3>&`d!Jacm>D5#WBu-Z)+rm^umCt;}Wx+aQk zP0x%26;DGgIQU=9(E@vV+u$UF+UZ2bv{IzP{DIK+frZHlx_%@SZkf z&;CX1nW*trP?_goXYR-ZCO#I_nhU3`z94%#8R-H9>n{=Aw*}V5MsUeKEZr=(NBaQQDakw;^(Fm5)OdhWVn`xB3k-tK7mH+s; z^zBgD`OzBoc~CqH*r75RKEgb|CFE$Wzszibo`WLo1GqMghbSdTK@+5$K)GzCXUqjt z`Wo#jqYL&r#EtgeJ=WUa=u|Ra?y>a;o_^(-gXgqWWa)0B;OwC6)UodDVw-uFOzh`` fb)tja#5VAPSZB{mG|^_w9`OxPi2Jl1;sNA0C9B8R literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$Sensor.class b/build/Asteroids_Train$Sensor.class new file mode 100644 index 0000000000000000000000000000000000000000..906b82280ef2145c2b889ef4663ef0c617f34a89 GIT binary patch literal 2852 zcma)8+jAS`75{yoWvykc@0PoE(-4YdS!-hFLP`_|*T#;)pd?Tm=R#d(t!(7Agp_FI z#7=3TH=5GYx;O6kPNy^Fp~Flppbv#dh6i5y&>5aO{R?<5GfjVIR|>9hXR4XqbG~!V zckbt`KK}P#{tDm_es4f4^iBB{w_Nhh`;RS@9j`bz?-u=1*+4|0bJe-*j1`<>ZtT?Z zs++ASL)S6NX|GYZY*6kLV)71ztHR2H4W8c(eS_p)249ioL&)+zW3R;JNVCg6-y zXJy6n2lp#wsqzu+{rWO?<)1~un3<}*QOtiJ43B4xTkx*zF zPAx_!*Z#pY03ysm)-J$vn(m- z4lFM^WlzpEVnhPlDfBSMj7}BksJ~LW!a#>-W@b{0t*~*Yff0rFFS38asjQgThf(^T zEm37;cqTO?qWeu82*|!yY-Ldo8@P-9HRRgFH*mLt=~v37yn8yRmMEDOdxwxVaTJp4 zkT0CMkaLfT34D`;0s~eshG+Q`mco>Ydoit$V12V|1*hW971>EX+r%psMV9d}AO^Y4 zXG1}+ALMJ}pxmA_@qqXp^)IbCW!5Q!lLk)g(2rqBO`O6*3NfeNtu&ko60}zF3S(2{ zva^x#{K|MMzJ&z?^9nsXuuVJydeq|4Q>RiY)824uo1VEEeLRjcIA`E2EBl3-I@iRb z_%@SLbk{i&y>$)S24&p9cUbs_G7Q$w(aE6oz;0T?vWYCtQ(exjoC%tfm0iLG6S+G1 ztPngCt3og+H}73_qaS=0YKcyEhKMx8MH81Ku@V1Lxgytm6BVp6W?sw4WCkYYA`^eQ z_AjZ#x`_>3<=A@l^3jQ~8R>_@6DGd*-~6+ZoF`2@h40gw6~{jrTi06Km7~%c9ILrv(JfCG9N%|2n=N%Ih8;F9k#OR1I}_T(Vnv~4 z;}FxbZvx0|6F}~o0CLj+ot?70cy8g%c69J9#eRZXnhA&Oku7xD@1n=L5B#18^0six z?*+_|qQo~GCnkAc2x4hQ52i3nn!)HsaUU^R{@iC_RCaFR5liK#yDzUkD-FXkT8S#Iq~o@ff#`SBZ4%Qp zg_mybmD{3fNXpjzgLu4(9|~HwB?VPvZ`K920sLj=m4q_5FBTKY&m4gZNZu@K1dLpXrnMT%S@=eOz_wdDX8M)S!Mu zjp#*nOrHzNew72lLe=!I2%TDZ<#8`G>o5VOU#C}E0K##KVYhp3$rv&i1pxYuKyQ_CGZks8$r`e97L-D)fE1y{tWOr z{&o|G(Xx$B`?71p9>c?&Bu*n@sbtP-&L^{f=0OMf3jEhgL3}pFycD%g1@p5s8%NnoJmd0y%op6BuFY#0L1`T8g L-y~FoZ$bSB@`)0p literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$Ship.class b/build/Asteroids_Train$Ship.class new file mode 100644 index 0000000000000000000000000000000000000000..68ae96450b5e9d37c4cda203e594e6927e82d68f GIT binary patch literal 8090 zcma)B3w%`7ng5@2Co_}DB?OZ23U2|E2_ZZM4UYgZ8X6u#8Xi()m|V!fWQNX6c&OF3 zZl(RTu2gLiq(EsEDO78h1e8{3yY24J+U-92a@TFKb+>O_t^IXdAMF1-_s)Z4>TlJ# z=iKj{?>pb)|9$7X@%eY3c^1GN)f0eLs9KuNIH_c;D}7r>DiTXfS=Sxg9e_`vVrOJe zq%j^z>}XuQZKo5>D5!n>weYuJ!IzHR?kJRSJpd2^ZV5&?OpW+7cOOhm&er zOvb>r-gw-}P;_H)wt?0yGy7fMw3A3DMXmoQ?>e*J@cP7B`e73dk3^$R+({XGeO*qZ zi%v--Z;sJlrI}cdvn~_q+0DHx_}j%_8`tBpJq`~J_C)rzyVH_%G%4l>_c-xnG?t-< zgYBL4dNM^j^%`;wS)NR!Gm%85GZOE0{LQ74-rCAY(%s~U#3^r7`#^i!%?c&>Gu^TD zl$i>{2JVr?g|S2|vshtz?V#0xgejiLx=vzXd9uqXr3N!>)S@l~3o~tmF-yU!t?QJP zIW{K4FSB_zrs3LB%*XWsEKnFaKvx?#U@U#JH`bNu7KVj3N`!Sj7TZ`NYyNI0wxc^E zi%V?;;P*Grr3d(rkZ!aQbdS2pCc*Dt^7P@uC%nb?*$4^gbe^=@Mwz?+78_Nl78&bo zjBsb~w=vS4t+z4Coo%!+9%E(Stv1HFvk%yqfUyDGrchY~-63qjOySsO!^RMqb=j!E zkN~#RAUDDxIPRvHjft2fn|9e4E}ME3MhtM&6c>mg#E}$l6I>002qTzpgZG!NZ*`vSB1 zMQ_h@xyc(@Il0Ldvsw9{%T6wpWaW4hBBVW*a8~v9Y;#f_k!@0Ch8ys8Mp7|(_lQ1$ zHr+JHU@2upw~8}Mx2GKEcBjLnt*^GNu2YfVEBDkJ|Vgj`4kmL)TPu+hDf@ zaDqvcuZ>?C4IhteViTjU>8~JvP3Nf2Kpc4ZJjJy-1m><-J&& zWaG#9360*KO7<*uFSj!KAzO_7OU~W?ax+bk z%`Zt7{ii}%ZFX7wRkA&qiZaAy>F(rS&oKeKTqKj-#Skvz7dBoIulj^X2>)&4Jbr1g z$y-KkD^}gT+l=612zld3tbb?Y_jr}0o>)9CdBIA&LICwYHb!HNY!4WTkgO1+FfOQHD-ugW5YrsX|Ljl$bD-od-{C`*m2u|mxt zIa54i#DPKXT<6}0DjiZ<`2xzisv}vqpKVKztxCkyVIB@Tc-yWtR(m#Bzw(0MR!o7f z3fZbm*^;E}dm_AEC7lY<)8^5e%2c_k2&kbfJ9$`US8X*+4QIFnLF}Tk5(?TSA}y|} z7*5iE&18~^HPU*DTX^+<35R61(#D@$XYlTSUf8RzVp+>Z zF2Z(I_O7+@SsXGgtP#3A9*eSl3-N03(4;Uj8}>mR?X2P}3kTm(1x+PIZ!r1F7Td>{ zjkKSGSA+s`vgx^n=(UYOrf_yD>s}KnJ!#ssd!q*@nz#gm@d@ej%*fWxjBM=8$ZpPzY~jqv=8D|qoNEl_lPy;6eHh=_P37Jz`Ob!qPdUpS z+3cBjwt8k{tu!MqVKcJbGb0;7GqUM3<3wsLr?JbW{A)PZn8GJ}U6L!LFE($yq)^Wt z)4Ab!T17jxKV093hVXebhO02853|G5`!F|Le-77`#1HhLNv4a;w3$1W^`RwP-iKDs zZ|=hi4()wd6}I}YMjmVB(IJn{u&)mr!r^n+(1%Sz*&M!zEgR2cYab%{X_Qlk)E#~3 z&Qo`iZ|6nCH`bSPHupRd{rKSe9FeLPC-)X7?=4Q=Uz~hLaq@?XlkYB0{z!51J;li% zD^5O8ocxL6-(@+|1ECR_hW@Vh}HVj=+F;fqka%u^h4OLKZ9NRVeHX|@ezFlpVE)ukUomD`g8b} zK8AnS$ML#8p@RDJYJxtguG3#oEAnHkFnG!L~lOMnZ{{KDueHB3{hkBUr2O?;zi7$Z5eCS22pGolZF zXD;B&g8Y1dhQmj7o=1uPE<*YRjMm@FJBJ0sa}H;&3R*5?@0`1MisCtQDS6FdraTX* zh#WWGI8!n81OhAsPZ?@gmU^vAJ(qXL7%6x92MFjN^7J2Joc;+N@*?Kwmy9O1dxocp z819E}v^C7)>HIM8bXmyqD!P=1H=biTIfoUj0IhjDL*fzrGrIk9fz)zOs+O;bzbYwO zMA9!P>6N0A*phgXUiNg7ByHlaC0hRQQH+!#*1&=&+1NtaO{Xw9yJJUo?a(m{2}`kR zp&i032)tUrqO5>sSAf~!30QRCDgn)Tch4YhpnrpM{afPicbKey&n$cuOZDr_zBjN{ z{{d0`Cidw+;-mUc1t#8ebqFSppERC^vhViH?ILO=1mUcKUd4A!$`<`|=q~Ta)28a@ z!!v@e0)bqv-@;h^Hm2xzP^aH5I6ds0uJHBTi5(sQ#}wWR=DOI-L!7lK5MgzpH!%&YK^^iN)KlcCm746}G8Ta}n@RTUiAkUNmwpLbxyJFqc)0pG2t z;sFA;imI-D{ENAR3&@LdWP=fHYE-$@A8RB=TB9(-8eMQ)W9~Ti;NEe&Swf`TT*HIb z9>#bMtyS2&;{txzUSEY5CEB#Hz90XQhoK3$HG%G%h)QcR##q{h)w2c{66qbKg>6&(DQf(BhCuF@D!%WOO2_}msd{j$ItouufwJ=37KVD zU8y;G<)yqnrYu|agvNBjq54kz%a)5n6>`;n!3| zGz`L$vOGa*<8N|m9`KT54mImMf*BI}O};MaWn^*^Wm2p=PN7Q1&TzONzwN_o9A3{W zIgNh=gf*W|TR=EmPepIQc&iDMtVNh+EoQ8iV79faAYOAkWkoSYX;KB1`a@2sxl~!u z?Kf>!9&#?WZ$ydJS|BTXQ)>BqBOm)dY^GF^Fiy-mj8URCr>{9x_~S#z+{>>sZ-9&C zHX5*k;Cdg%S}O|<7+0Vy<1F_aKW@B}dRVvQq}dcNaSohB9j6^fSUfM{@Z9e*E4ll0Ib$aPFO#5cu3^Kud7!U45wg}B zc`kU%Jb7fI(gG4Ce=^`xyta(uL|}+YMwu6d7qaX7O(?Z)Esz(=$qN~%i9G&M#FIDM zi$d^%QdP?T!7o#`o5|9_!`f0{X|_Ts70mheUblNUH~7weRl4#N#!Y`(4Nz9`-z5I7;cqH`*SbrBh=xiv-TcR`Gx$ze zR=VWbm1<6<-!!G3jvM`-1Iu{UqoE2}LB%jCKDV5M5R-MpJe zzgotTXSMpyO14^OskGbbtz}(+wTozvqs;0d?2;H^rCIATOxs@8yFEqAIdci|4}!#HVu6sN6waK^e9Pg(~G0{K({WP{+n+3^-S`I+CA!|hoQ zW^Fanl~vbNunQYnQ!({8N^2^vJ;Cg(Ij>gKRO~f`X+mJ_SzA*v(KKnQy`~~rOXb5@U_C-pj^bwPSOEyyatLnoT1f#xDFUN>Wxmof z=DS*x)BJ8v^Tzkm{FbXUx2SnuKlgfhl=?kJ{T`=&r>WnW0)4We1R4wUVQVS+P?>eP z?3hCw3KC0*v-W|B{{(!N`#ItEsU@D7N_D9B(+czXt~yQHH|7NKYxFCWSeT<^ntI{y+{xH*vRHwfO^h>7XHumE{TD1)OL=OdFfo{-z|4AS-Lsyq-}AIyNs3dRUGR7 E0A&q}C;$Ke literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train.class b/build/Asteroids_Train.class new file mode 100644 index 0000000000000000000000000000000000000000..b89a2d4852bd1e4b5a52bc5c55aed79b982b60ba GIT binary patch literal 2294 zcma)7ZBrXn6n<_tu*r65c`H!*LR)DY(n_?o)E2BlC>RZh1W~M7mt;$}gxz&_Q>4CE zN5A@TH1~ zz@bS$Fg?dA__vlk!?IOG1^Qjj$(z1!*=wo1fCq zEtvw{q3^QcS#n=fMuVcoKwZs&7@^HKgR-llSD>$%ZIy*uGgh2eZ$BY+^fXt$anUQ4`CyCM=C|9&x4MR9B!#pK$VSkwBxWly? z$?!cmqvI^jv0iS;*fKrlvd><|7*{bO&~wMQYoyA7RZ2~Ip0Sm+{6Iqj9TMq+j;Aq7 z=0^Rz1rBFhco6Fu=G~l1v$0_u@$JNF0Ek-(<;*Sgh~dxFkLh}BhOCNaRW01 z51g#CX?kg*%OgmS&`-h3Ix=`gAm$pLZ)R+Eto)Xdm|5vMClwi~Q1F^GUXY3zsTjhd zjvSU)mss>p4_CWw+)-_8qyv$gj^CZmk(L@?Y>cHD*DAt>}1Lf_47~EHofL zc4xrp@?&^c;P~#ijXJJrua!m@WF^W1Y++nZf9XoHZa^tN)TH&_P$@-RbtRgR< zxrQvtq_@Ud?P+056C=D|q=^dh*K$tT%bPQn9R2388kGqM=o#B)1C%5^5vIze@Oo>nFXD}USMl+F3d6IWRp4<{U+vYIRq=TX=$vW$4kx$0zKF_+ z#VJ-?;XNFoaE$nbylKKGr!>564se&Eo#4AI`3U;=Ttsk?&-PF`h(lcKRReUQi#v8) z!}&g;rSo+1F?v>raCjR7$?m}&98EsNz+()pB<11}PHkhjs!FUpLUJ4D>5{5{eRdlc zcViERbWbzxFk_wJ-&y{goI@HTd-zN@_&nF(Ge$O&PmG~1?%?t+rWO|B0!uKu2P4+N zc)o%0EiGlyQpC90nfMM}T)a@hWCgPm4?^gx6Ec;D7(QCTt6x_zzk}ChC?zaimHuVc zcnrO~vHEcp$9Of3Vj>KEGCY@5Ep#t;Z}1E6e%_+h)iSa80$BgzI{*Lx literal 0 HcmV?d00001 diff --git a/build/Connection.class b/build/Connection.class new file mode 100644 index 0000000000000000000000000000000000000000..818f1a2560e5474b189a32692c2da3497dd52a54 GIT binary patch literal 820 zcmZ9JOK;Oa6otZGW`#}se+TPIb$)?hM%|+c@(v8CmUnep3ntz*YP~Y zxfb|!pWg}Y6>A?8)};|nT0bzgwvSUIl&w8fzlEu1xlU6Sc#afaQ1T^8c!e@v<6IaE zMR1-L^r+wh;VhJ>i!rKCRFbjk5o&IP*<-x_S#QaDN7j4V{Xor+A!{a5Ib>C17L_s2 zQWNCykH%C<4MFOHW$mK8hXsv{PESj)p1r}iwYH1d;^hG&+CdV!+9LCSPi)#}>VBc} W*N|>TYBBvv_+HHOa*4+T8vg)k50GL2 literal 0 HcmV?d00001 diff --git a/build/Network.class b/build/Network.class new file mode 100644 index 0000000000000000000000000000000000000000..5b2d3963f2f49ce7418d7e7ea1a3aa3a1e561562 GIT binary patch literal 8526 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 ZK6)_l7p`Qkjq$hcAXC=xR~7MZ{{x&u|2_Z! literal 0 HcmV?d00001 diff --git a/build/Simple_NEAT.class b/build/Simple_NEAT.class new file mode 100644 index 0000000000000000000000000000000000000000..91e830c1777994e2d953a926971a8e3543c4bc69 GIT binary patch literal 4055 zcmb7HYjYFl6@FgbRuYTsU>htmZrtS1YJDuqdXw~PuyOITAI#U?5 z``(^&&U4Or-sQLd`QX<8cH@@@0t&09oQ3?neP;5|z%c_Mg~qeid8>Qga%a1bOrN!9 ziV6{H)^>}F3N7P$u~c;Cy9Wvd>*BbxSnN}XO*yl!RV)>3g^pY8=^vl8i;v_A=lb@` zcDJ-J>gG!VsYVsz93Lqay@?2IO_mlEqBEt!fEeb1+Hp>wv+evrdy&)Xeg$)(RJ4jt z&OK@sXnM#|u4Qmt{#vRvYG}CtBm^D35 z2iJ_}W~}++R>6_6KN%{{IpkvXcwI8cQ@|xT0rv=lwz65xg@IiPhEHZ3J-AasY8GGi znD{I{$Kbe^sY-cys7qvDTKG!UxD;xXOD7lY;$W#zAk{wKp%i%&%>5?r#sOl^+T^>1 z)1O9_cn_LbjRYBY+^l_pDJYcOf%$n!!Kq;n>ad9sFrKJWvcbRTK5ybE4zaZ8h|iY59y9R;Fl=MaTAb7f zECsR>ar|-&oEl~xri#|gxd|(;(_`R1569<-9Fh$Vypp9asr0E~F?zaZvzQ)AC{4_1EM0 z5*{<~C`(`^BZIm5dCCJ@Z_&hMJT8WE1tz7*FFl=Atq|gN51usfWih;(hU>Af;3)%F z6}GNm&*WTozf@%RvAKe6Wp&pawcKoO!Nk*ehAH$nC}gTdpbh@7qkVB)!BlFn9|>N~mT>=d6WR`@w zJ?iD`_e^|WRy`@SPuR}v9Md5A6`f=b>A-?@f!<7O-INtSCeAHb4qaZGI#t)&Q^kVg z&h}~Xv*K`WnMPCX+$D9GB^q#%6}AI{Z84{ zPl~R7Qb+WY(yO1;Q9c`ZmO97Z7LKkGRdBawu48ScZ5heThGn#6g3GvFel})4#HN$i zv1J*ZnPzNVM(SM+mf`Pang``7L_;wGCupdNa@|TpTlkitneE)s;h8`ec5p;vxPvY# z{npL50N;1=l;_eg1C+Ja%zNnk5IraPO!8mbb?h$Vt`jTvv$e5zM_l z=0Wb1y>Y?Zek+tVMzBGnto3%*yp5xmk+BHThkhS#gb@i|V@3em%GmcC^ekiGX5TiF zm5w^p#u{oP1~mr?LpbE4K10k9Q9A{+jN!>8tl9A^j42R(qKkgt%i)y5>y^KYr63sw zxt25An9dZ|^SOnyE39|cEOz1q?$egSI-&qh@?0|l6<*jO1Iobttg3sUqdisgYJgrz ztTB2uAU@n2WDm<=S6z^?n#q`NQsIkuzz=d4pOW6Fz?E_O9li&2AX3%9T^h+tWz3e+U_%Y?A8t2@CIU{LuIp zW>pMxsu_-I$62+B# zk0~E+ONDw|zf0~2elGBr*Orn?P`d22UkDRR81JfzVP)`OdEY{QdbGz+*hDKvOV!;c%Ly73d1Jk8@#x z3|6{P9KM=O24VU(7>q*&x0?)uaW6sJ&H~gmb$sCCkp0=G?_e$4`rmu-+uIbQpG`%u(+1kyyYcbxXWjjc*>Gk&?snU1mfacZ*q{9n!b# zpQGw;ox$<9&rtiuk_MN%3!S^pr_3P(4rNwY*~rJRiW|%*kYQ972}r>F4+Z8$mM<_> z!En2RF^RE=sS;yn7@Gnjo?}d`;btLuK%mBN?k}kR&JWb*-0sZJvH6wN+`Lgti{V_! z#TK@iDcr|Sq4bVQatEH@{|@KN?#H?KV_eJQ|7<#0;|j%AQRm4;crCNxUEG9+T_X77 t&_t_1yyu*lZDfc&Vg?HalNysNkUB5V!#bZ!NaF(1fKR+Y_9(02!9PHvZMy&f literal 0 HcmV?d00001 diff --git a/build/source/Asteroids_Train.java b/build/source/Asteroids_Train.java new file mode 100644 index 0000000..ec7a19a --- /dev/null +++ b/build/source/Asteroids_Train.java @@ -0,0 +1,987 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.ArrayList; +import java.util.ArrayList; +import java.util.concurrent.ThreadLocalRandom; +import java.lang.Math; +import java.lang.Math; +import java.util.concurrent.ThreadLocalRandom; +import java.util.ArrayList; +import java.lang.Math; +import java.util.ArrayList; +import java.util.concurrent.ThreadLocalRandom; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class Asteroids_Train extends PApplet { + + + +GameScene GS; +Locals locals; + +public void setup(){ + locals = new Locals(); + + frameRate(60); + locals.player = new Ship(locals); + locals.asteroids = new ArrayList(); + GS = new GameScene(locals); + // locals.level = 10; +} + +public void draw(){ + GS.show(); + // System.out.println(player.score + " - " + player.dead); +} + +/** + * Button released handle. + */ +public void keyReleased(){ + int code; + if (keyCode > 40){ + code = PApplet.parseInt(Character.toLowerCase(key)); + } + else{ + code = keyCode; + } + locals.player.processButtonReleased(PApplet.parseInt(Character.toLowerCase(code))); +} + +/** + * Button pressed handle. + */ +public void keyPressed(){ + // char k = key; + //System.out.println(keyCode); + int code; + if (keyCode > 40){ + code = PApplet.parseInt(Character.toLowerCase(key)); + } + else{ + code = keyCode; + } + + + locals.player.processButtonPress(code); +} + + + + + +public class Asteroid{ + double x, y, size, angle, maxLevel; + int level; + Vector velocity; + final double PI = 3.14159265359f; + Locals locals; + + /** + * Constructor for the Asteroid class. + * @param x X pos of the asteroid + * @param y Y pos of the asteroid + * @param level Level of asteroid (1-3) + */ + public Asteroid(double x, double y, int level, Locals l){ + locals = l; + this.x = x; + this.y = y; + this.size = 40 * level; + this.level = level; + this.maxLevel = 3; + this.angle = ThreadLocalRandom.current().nextDouble(-PI, PI); + this.velocity = Vector.fromAngle(angle); + this.velocity.mult( (float) ((maxLevel+1) - level) * 0.8f); + } + + public Asteroid(double x, double y, double a, int level, Locals l){ + locals = l; + this.x = x; + this.y = y; + this.size = 30 * level; + this.level = level; + this.maxLevel = 3; + this.angle = a; + this.velocity = Vector.fromAngle(angle); + this.velocity.mult(((maxLevel+1) - level) * 0.8f); + } + + + /** + * Bound the Asteroid to stay inside of the screen. + */ + public void bound(){ + if (x + size < 0){ + x = width + size/2; + } + else if (x - size > width){ + x = 0 - size/2; + } + + if (y + size < 0){ + y = height + size/2; + } + else if (y - size > height){ + y = 0 - size/2; + } + } + + public void travel(){ + x += velocity.x; + y += velocity.y; + } + + public void checkHit(){ + double distance = dist(x, y, locals.player.getX(), locals.player.getY()); + //System.out.println(distance); + if (distance < size/2 + locals.player.getSize()){ + locals.player.setHit(); + } + } + + public void explode(){ + if (level > 1){ + + for (int i = 0; i < 2; i++){ + Asteroid newAsteroid = new Asteroid(x, y, level - 1, locals); + locals.asteroids.add(newAsteroid); + } + locals.asteroids.remove(this); + } + else{ + locals.asteroids.remove(this); + } + + } + + public int getScore(){ + if (level == 1) + return 100; + else if (level == 2) + return 50; + else + return 20; + + } + + + public void show(){ + pushMatrix(); + checkHit(); + travel(); + bound(); + noFill(); + stroke(255); + ellipseMode(CENTER); + translate((float) x, (float) y); + ellipse(0, 0, (float) size, (float) size); + popMatrix(); + } + + public double getX(){ + return x; + } + + public double getY(){ + return y; + } + + public int getLevel(){ + return level; + } + + public double getAngle(){ + return angle; + } + + public void setAngle(double a){ + angle = a; + } + + public double getSize(){ + return size; + } + + private double dist(double x1, double y1, double x2, double y2){ + return Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2)); + } +} + + + +public class Bullet{ + double x, y, angle, size; + int count; + boolean owner; + Vector velocity; + final double PI = 3.14159265359f; + Locals locals; + + public Bullet(double x, double y, double angle, Locals l){ + locals = l; + this.x = x; + this.y = y; + this.angle = angle - PI/2; + this.size = 5; + this.count = 0; + this.owner = true; + this.velocity = Vector.fromAngle(this.angle); + this.velocity.mult(8); + } + + public void travel(){ + x += velocity.x; + y += velocity.y; + } + + public void setOwner(boolean b){ + owner = b; + } + + public boolean isOwner(){ + return owner; + } + + public boolean bound(){ + if (x + size < 0){ + x = width + size; + } + else if (x - size > width){ + x = 0 - size; + } + + if (y + size < 0){ + y = height + size; + } + else if (y - size > height){ + y = 0 - size; + } + + if(count > 900){ + return true; + } + else{ + count += 8; + return false; + } + } + + public void checkHit(){ + for (Asteroid a : locals.asteroids){ + double distance = dist(a.getX(), a.getY(), x, y); + if (distance < a.getSize()/2 + size/2){ + locals.player.addScore(a.getScore()); + a.explode(); + count = 1000; + break; + } + } + } + + public void show(){ + pushMatrix(); + ellipseMode(CENTER); + translate((float) x, (float) y); + travel(); + noStroke(); + fill(255); + ellipse(0, 0, (float) size, (float) size); + popMatrix(); + if (owner) + checkHit(); + } + + public double getX(){ + return x; + } + + public double getY(){ + return y; + } + + private double dist(double x1, double y1, double x2, double y2){ + return Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2)); + } + +} + + +public class GameScene{ + boolean online; + Locals locals; + Simple_NEAT n; + Grid gameGrid; + + public GameScene(Locals l){ + locals = l; + locals.level = 3; + resetAstroids(locals.level); + locals.player = new Ship(locals); + n = new Simple_NEAT(33,4); + Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); + n.addAgent(temp); + n.setCurrentAgent(0); + gameGrid = new Grid(50, l); + } + + /** + * Show the text of the scene + */ + private void showText(){ + textAlign(CENTER); + textSize(30); + String levelString = "Level " + locals.level + "\n" + locals.player.getScore(); + fill(255); + textSize(30); + text(levelString, width/2, 50); + String liveString = ""; + for (int i = 0; i < locals.player.getLives(); i++){ + liveString += " | "; + } + text(liveString, width - 50, 50); + } + + private void resetAstroids(int level){ + locals.asteroids.clear(); + int num = 2 + (level * 2); + for (int i = 0; i < num; i++){ + float tempX = ThreadLocalRandom.current().nextInt(50, locals.width - 50); + float tempY = ThreadLocalRandom.current().nextInt(50, locals.height/2 - 150) + ((locals.height/2 + 150) * ((ThreadLocalRandom.current().nextInt(0, 2)))); + locals.asteroids.add(new Asteroid(tempX, tempY, 3, locals)); + locals.player.resetPos(); + locals.player.clearBullets(); + } + } + + /** + * Display all of the asteroids to the screen. + */ + private void showAsteroids(){ + try{ + for (Asteroid a : locals.asteroids){ + a.show(); + } + } + catch(Exception e){ + System.out.println("Exception in showAsteroids (gameScene): " + e); + } + } + + private boolean checkLevel(){ + if (locals.asteroids.size() < 1){ + locals.level++; + resetAstroids(locals.level); + return true; + } + return false; + } + + public void show(){ + background(0); + showText(); + // locals.player.showBullets(); + locals.player.show(); + // runNetwork(); + showAsteroids(); + checkLevel(); + gameGrid.show(); + } + + public void runNetwork(){ + float[] inputs = new float[33]; + int c = 0; + for (Sensor s : locals.player.getSensors()){ + inputs[c] = (float) s.getWeightValue(); + c++; + } + for (Sensor s : locals.player.getSensors()){ + inputs[c] = (float) s.getLevelValue(); + c++; + } + + inputs[32] = (float) locals.player.bullets.size() / 4; + + n.runCurrent(inputs); + + float[] outputs = n.getCurOutput(); + + if (outputs[0] > 0.5f){ + locals.player.shoot(); + } + if (outputs[1] >=0.5f){ + locals.player.turnLeft(); + } + if (outputs[2] >= 0.5f){ + locals.player.turnRight(); + } + if (outputs[3] <= 0.5f){ + locals.player.accelerate = true; + locals.player.accelerate(); + } + else{ + locals.player.accelerate = false; + } + + String outs = ""; + for(float f : outputs){ + outs +=(f + ", "); + } + textSize(20); + text(outs, width/2, height-50); + + } +} +public class Grid{ + double[][] grid; + Locals l; + int cellWidth; + + + //CellWidth should be an even multiple of the width and height of the screen. + public Grid(int cellWidth, Locals l){ + this.l = l; + this.cellWidth = cellWidth; + int xSize = (int) l.width / cellWidth; + int ySize = (int) l.height / cellWidth; + grid = new double[xSize][ySize]; + resetGrid(); + } + + private void resetGrid(){ + for (int x = 0; x < grid.length; x++){ + for (int y = 0; y < grid.length; y++){ + grid[x][y] = 0.0f; + } + } + } + + private void setAsteroids(){ + resetGrid(); + for (Asteroid a : l.asteroids){ + int xCell = (int) (a.getX() / cellWidth); + int yCell = (int) (a.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = a.getLevel() * 0.33f; + } + + int xCell = (int) (l.player.getX() / cellWidth); + int yCell = (int) (l.player.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = -1; + } + + public void show(){ + float squareSize = 200; + + stroke(255); + fill(0, 0, 0); + rect(10, 10, squareSize, squareSize); + + float subSize = squareSize / grid.length; + + setAsteroids(); + for (int x = 0; x < grid.length; x++){ + for (int y = 0; y < grid.length; y++){ + if (grid[x][y] > 0){ + fill(255); + noStroke(); + rectMode(CORNER); + rect(10 + subSize * x, 10 + subSize * y, subSize, subSize); + } + if (grid[x][y] < 0){ + fill(255, 0, 0); + noStroke(); + rectMode(CORNER); + rect(10 + subSize * x, 10 + subSize * y, subSize, subSize); + } + } + } + } + +} + + +public class Locals{ + Ship player; + ArrayList asteroids; + GameScene GS; + int level; + int width; + int height; + + public Locals(){ + width = 900; + height = 900; + } +} + + +public class Sensor{ + private double length, angle, weightValue, levelValue; + private Locals locals; + + public Sensor(double angle, Locals l){ + this.length = 350; + this.angle = angle; + this.weightValue = 0.0f; + this.levelValue = 0.0f; + locals = l; + } + + public void show(double x, double y, double angle){ + double x2 = x + (Math.cos(angle + this.angle) * length); + double y2 = y + (Math.sin(angle + this.angle) * length); + // System.out.println(angle); + strokeWeight(2); + stroke(255); + line((float) x, (float) y, (float) x2, (float) y2); + calculateIntersection(x,y,x2,y2); + } + + public void calculateIntersection(double x0, double y0, double x1, double y1){ + double a = square(x1 - x0) + square(y1 - y0); + + double iX = 0.0f; + double iY = 0.0f; + weightValue = 0; + levelValue = 0; + + for (Asteroid ast : locals.asteroids){ + double b = 2 * (x1-x0) * (x0 - ast.getX()) + 2 * (y1-y0) * (y0 - ast.getY()); + double c = square(x0-ast.getX()) + square(y0-ast.getY()) - square(ast.getSize()/2.0f); + double t = (2*c) / ((-1*b) + Math.sqrt(square(b) - (4 * a * c))); + + if(t > 0 && t < 1 && square(b) - (4 * a * c) > 0){ + if (1 - t > weightValue){ + weightValue = 1-t; + levelValue = ast.getLevel() * 0.333f; + iX = intersectX(x0, x1, t); + iY = intersectY(y0, y1, t); + } + } + } + if (weightValue > 0.0f){ + fill(255, 0, 0); + noStroke(); + ellipse((float) iX, (float) iY, 15, 15); + } + // fill(255, 0, 0); + // ellipse(iX, iY, 10, 10); + } + + public double intersectX(double x0, double x1, double t){ + return (x1-x0) * t + x0; + } + + public double intersectY(double y0, double y1, double t){ + return (y1-y0) * t + y0; + } + + + private double square(double x){ + return x * x; + } + + public double getWeightValue(){ + return weightValue; + } + + public double getLevelValue(){ + return levelValue; + } +} + + + +public class Ship{ + double x, y, size, angle, turnRadius, deRate; + ArrayList pressedChars; + ArrayList bullets; + ArrayList sensors; + boolean turn, accelerate, dead, noHit; + long timeStamp; + int k; + int lives, maxLives, score; + Vector velocity; + final double PI = 3.14159265359f; + Locals locals; + + /** + * Constuctor for the ship class. + * @param a Asteroids in the game for the ship to reference. + */ + public Ship(Locals l){ + locals = l; + //X and Y for the ship. + this.x = width/2; + this.y = height/2; + //Size of the ship. + this.size = 20; + this.angle = 0; + this.turnRadius = 0.1f; + this.deRate = 0.05f; + this.turn = false; + this.accelerate = false; + this.dead = false; + this.noHit = false; + this.maxLives = 1; + this.lives = maxLives; + this.score = 0; + //ArrayList for the current pressed characters. + //(Mainly used for making turning less janky.) + this.pressedChars = new ArrayList(); + this.bullets = new ArrayList(); + this.velocity = new Vector(); + this.sensors = new ArrayList(); + sensors.add(new Sensor(0, locals)); + sensors.add(new Sensor(PI, locals)); + sensors.add(new Sensor(3*PI/2, locals)); + sensors.add(new Sensor(PI/2, locals)); + sensors.add(new Sensor(PI/4, locals)); + sensors.add(new Sensor(3*PI/4, locals)); + sensors.add(new Sensor(7*PI/4, locals)); + sensors.add(new Sensor(5*PI/4, locals)); + sensors.add(new Sensor(22.5f*(PI/180), locals)); + sensors.add(new Sensor(-22.5f*(PI/180), locals)); + sensors.add(new Sensor(-67.5f*(PI/180), locals)); + sensors.add(new Sensor(67.5f*(PI/180), locals)); + sensors.add(new Sensor(112.5f*(PI/180), locals)); + sensors.add(new Sensor(-112.5f*(PI/180), locals)); + sensors.add(new Sensor(-157.5f*(PI/180), locals)); + sensors.add(new Sensor(157.5f*(PI/180), locals)); + + + + } + + /** + * Removes one of the current pressed characters from the Array. + * If there are no characters left then we stop turning. + * @param k key entered by the user. + */ + private void freezeTurn(int code){ + + //Loop through and find characters we should remove. + for (int i = pressedChars.size() - 1; i >= 0; i--){ + if (pressedChars.get(i) == code){ + pressedChars.remove(i); + } + } + + //If there are no more charaters then we should stop turning. + if(pressedChars.size() < 1) + turn = false; + } + + /** + * Tell the ship to start to turn in the appropriate direction. + * @param k key entered by the user. + */ + private void setTurn(int code){ + //System.out.println("Turn"); + turn = true; + this.k = code; + pressedChars.add(this.k); + } + + /** + * Turn the ship X radians. + */ + private void turn(){ + //Make sure we are in the scene and we should be turning. + if (turn){ + if (k == 'a' || k == 37){ + turnLeft(); + } + if (k == 'd' || k == 39){ + turnRight(); + } + } + } + + private void turnLeft(){ + angle -= turnRadius; + } + + private void turnRight(){ + angle += turnRadius; + } + + /** + * Bound the player to stay inside of the screen. + */ + private void bound(){ + if (x + size < 0){ + x = width + size; + } + else if (x - size > width){ + x = 0 - size; + } + + if (y + size < 0){ + y = height + size; + } + else if (y - size > height){ + y = 0 - size; + } + } + + public void resetPos(){ + x = width/2; + y = height/2; + velocity.mult(0); + angle = 0; + } + + public void resetVars(){ + lives = maxLives; + dead = false; + score = 0; + bullets.clear(); + } + + public void clearBullets(){ + bullets.clear(); + } + + /** + * Move in the direction of the current velocity. + */ + private void move(){ + x += velocity.x; + y += velocity.y; + + //Adds "friction" to slow down the ship. + velocity.mult(0.99f); + } + + private void hyperDrive(){ + x = ThreadLocalRandom.current().nextInt(20, width - 20); + y = ThreadLocalRandom.current().nextInt(20, height - 20); + } + + /** + * Accelerates the ship in the current faced direction. + */ + private void accelerate(){ + if (accelerate){ + Vector force = Vector.fromAngle(angle - PI/2); + //Limit how strong the force is. + force.mult(0.08f); + velocity.add(force); + } + } + + /** + * Display the bullets and remove if out of the screen. + */ + private void showBullets(){ + for (int i = bullets.size() - 1; i >= 0; i--){ + Bullet b = bullets.get(i); + b.show(); + + //If the bullet is out of the screen then we want to remove it. + if (b.bound()){ + bullets.remove(i); + } + } + } + + public void setHit(){ + if (!noHit){ + lives--; + if (lives < 1){ + dead = true; + } + else{ + noHit = true; + timeStamp = millis(); + resetPos(); + } + } + } + + public void setAlive(){ + dead = false; + } + + private void checkNoHit(){ + if(noHit){ + if (millis() - timeStamp > 3000) + noHit = false; + } + } + + private void shoot(){ + if (bullets.size() < 4 && !dead){ + addBullet(new Bullet(x, y, angle, locals)); + } + } + + public void addScore(int s){ + score += s; + } + + public void addBullet(Bullet b){ + bullets.add(b); + } + + public long millis(){ + return System.currentTimeMillis() % 1000; + } + + public void showSensors(){ + for (Sensor s : sensors){ + s.show(x, y, angle); + } + } + + /** + * Display the ship to the screen. + */ + public boolean show(){ + if (!dead){ + checkNoHit(); + pushMatrix(); + //Display the bullets + showBullets(); + //showSensors(); + + //Edit pos of the ship. + turn(); + move(); + accelerate(); + bound(); + + noFill(); + stroke(255, 255, 102); + if (noHit) + stroke(56, 252, 159); + strokeWeight(3); + translate((float)x, (float)y); + rotate((float)angle); + + triangle((float)-size, (float)size, 0, (float)-size - 5, (float)size, (float)size); + + popMatrix(); + return true; + } + // resetVars(); + resetPos(); + return false; + } + + /** + * Handle the button pressed by the user. + * @param k key entered by the user. + */ + public void processButtonPress(int code){ + if (code == 97 || code == 100 || code == 37 || code == 39){ + setTurn(code); + } + + if (code == 119 || code == 38){ + accelerate = true; + } + + if (code == 32){ + shoot(); + } + + if (code == 115 || code == 40){ + hyperDrive(); + } + } + + /** + * Handle the button released by the user. + * @param k key entered by the user. + */ + public void processButtonReleased(int code){ + if (code == 97 || code == 100 || code == 37 || code == 39){ + freezeTurn(code); + } + if (code == 119 || code == 38){ + accelerate = false; + } + } + + public void processClick(){ + shoot(); + } + + public ArrayList getSensors(){ + return sensors; + } + + public double getX(){ + return x; + } + + public double getY(){ + return y; + } + + public double getAngle(){ + return angle; + } + + public double getSize(){ + return size; + } + + public int getLives(){ + return lives; + } + + public void setLives(int l){ + lives = l; + maxLives = l; + } + + public int getScore(){ + return score; + } +} + public void settings() { size(900, 900, OPENGL); } + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "Asteroids_Train" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/build/source/Network.java b/build/source/Network.java new file mode 100644 index 0000000..28a339c --- /dev/null +++ b/build/source/Network.java @@ -0,0 +1,362 @@ +import java.util.ArrayList; +import java.util.Random; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + + +public class Network implements Serializable, Comparable{ + ArrayList inputs, outputs, hidden; + int idCount; + float bias; + Random r; + double fitness, genFitness; + + public Network(int numInputs, int numOutputs){ + idCount = 0; + bias = 1.0f; + fitness = 0.0; + inputs = new ArrayList(); + outputs = new ArrayList(); + hidden = new ArrayList(); + r = new Random(); + + //Add Neurons for inputs + for (int x = 0; x < numInputs; x++){ + Neuron in = new Neuron(bias, idCount); + inputs.add(in); + idCount++; + } + + for (int x = 0; x < numOutputs; x++){ + Neuron out = new Neuron(bias, idCount); + // out.setLayer(0); + outputs.add(out); + idCount++; + } + + initConnections(); + } + + public Network(ArrayList inputs, ArrayList hidden, ArrayList outputs, float bias, int idCount){ + this.inputs = inputs; + this.outputs = outputs; + this.hidden = hidden; + + this.bias = bias; + this.idCount = idCount; + fitness = 0.0; + r = new Random(); + + } + + private void initConnections(){ + for (Neuron inputN : inputs){ + for (Neuron outputN : outputs){ + outputN.addConnection(inputN); + } + } + } + + public void addRandHiddenNode(){ + //Create a new hidden node. + Neuron tempHidden = new Neuron(bias, idCount); + idCount++; + + //Combine all nodes that are valid for adding a connection (hidden and output) + ArrayList validNodes = new ArrayList(); + validNodes.addAll(outputs); + validNodes.addAll(hidden); + + // System.out.println("add node: " + validNodes.size()); + + //Grab a random node to manipulate connection. + int index = r.nextInt(validNodes.size()); + Neuron randNode = validNodes.get(index); + + //Grab random connection from this node. + index = r.nextInt(randNode.getConnections().size()); + Connection randConnection = randNode.getConnections().get(index); + + //Add from the new hidden to the old. + tempHidden.addConnection(randConnection.neuron, 1); + //Remove old connection. + randNode.removeConnection(randConnection); + //Create new connection with the new hidden node. + randNode.addConnection(tempHidden, randConnection.weight); + hidden.add(tempHidden); + + // System.out.println("Adding node " + tempHidden.getID() + " --> " + randConnection.neuron.getID() + " - " + randNode.getID()); + + //Set the layer of this node to its output + 1 + // tempHidden.setLayer(randNode.getLayer() + 1); + } + + public void addRandConnection(Neuron node){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + + // System.out.println(validConnections); + if (validConnections.size() < 1) + return; + + //Grab a hidden to make a new input. + int index = r.nextInt(validConnections.size()); + Neuron randHidden = validConnections.get(index); + + //Grab random hidden to connect to. + while(true){ + if (!checkRepeat(node, randHidden)){ + node.addConnection(randHidden); + if (!checkDeadlock(node, node)){ + // System.out.println("Setting connection: " + randHidden.getID() + " --> " + node.getID()); + break; + } + else{ + node.removeConnection(randHidden); + } + } + + validConnections.remove(randHidden); + if (validConnections.size() < 1){ + // System.out.println("No valid connection to make for: " + node.getID()); + break; + } + + index = r.nextInt(validConnections.size()); + randHidden = validConnections.get(index); + } + } + + public void addRandConnection(){ + ArrayList validConnections = getConnectionNodes(); + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + addRandConnection(n); + } + + public ArrayList getConnectionNodes(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); + return validConnections; + } + + public boolean checkDeadlock(Neuron node, Neuron cur){ + for (Connection c : cur.getConnections()){ + if (node == c.neuron){ + return true; + } + if (checkDeadlock(node, c.neuron)){ + return true; + } + } + return false; + } + + public boolean checkRepeat(Neuron mainNode, Neuron connection){ + for (Connection c : mainNode.getConnections()){ + if (c.neuron == connection){ + return true; + } + } + return false; + } + + public void mutateWeight(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); + + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + Connection c = n.getConnections().get(r.nextInt(n.getConnections().size())); + + c.randomizeWeight(); + } + + public void remvoveRandConnection(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + + Connection c = n.getConnections().get(r.nextInt(n.getConnections().size())); + n.removeConnection(c); + + } + + public void runNetwork(float[] initInputs){ + if (initInputs.length != inputs.size()){ + System.out.println("Error: Input mismatch..."); + return; + } + //Set inputs for the input layer. + for (int i = 0; i < inputs.size(); i++){ + Neuron inputN = inputs.get(i); + inputN.setInput(initInputs[i]); + } + + //Run network and get activated values. + for (Neuron n : outputs){ + n.feed(); + } + + //Reset each hidden node to unactivated. + for (Neuron n : hidden){ + n.setActivation(false); + } + } + + public float[] getSimpleOutput(){ + float[] nums = new float[outputs.size()]; + + for (int i = 0; i < outputs.size(); i++){ + nums[i] = outputs.get(i).getValue(); + } + + return nums; + } + + public double getFitness(){ + return fitness; + } + + public void setFitness(double d){ + fitness = d; + } + + public Network copy(){ + ArrayList tempInputs = new ArrayList(); + ArrayList tempHidden = new ArrayList(); + ArrayList tempOutputs = new ArrayList(); + + for (Neuron n : inputs){ + tempInputs.add(n.copy()); + } + + for (Neuron n : hidden){ + tempHidden.add(n.copy()); + } + + for (Neuron n : outputs){ + tempOutputs.add(n.copy()); + } + + ArrayList validNodes = new ArrayList(); + validNodes.addAll(tempInputs); + validNodes.addAll(tempHidden); + + for (int i = 0; i < hidden.size(); i++){ + Neuron n = hidden.get(i); + for (Connection c : n.getConnections()){ + int id = c.neuron.getID(); + Neuron connectionNeuron = null; + for (Neuron x : validNodes){ + if (x.getID() == id){ + connectionNeuron = x; + } + } + tempHidden.get(i).addConnection(connectionNeuron, c.weight); + } + } + + for (int i = 0; i < outputs.size(); i++){ + Neuron n = outputs.get(i); + for (Connection c : n.getConnections()){ + int id = c.neuron.getID(); + Neuron connectionNeuron = null; + for (Neuron x : validNodes){ + if (x.getID() == id){ + connectionNeuron = x; + } + } + tempOutputs.get(i).addConnection(connectionNeuron, c.weight); + } + } + + return new Network(tempInputs, tempHidden, tempOutputs, this.bias, this.idCount); + } + + public boolean saveToFile(String s){ + try{ + FileOutputStream fos = new FileOutputStream(s); + ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(this); + oos.close(); + return true; + } + catch(Exception e){ + System.out.println(e); + return false; + } + } + + public static Network loadFromFile(String s){ + try{ + FileInputStream fis = new FileInputStream(s); + ObjectInputStream ois = new ObjectInputStream(fis); + Network n = (Network) ois.readObject(); + ois.close(); + return n; + } + catch(Exception e){ + System.out.println(e); + return null; + } + } + + public void setGenFitness(double f){ + genFitness = f; + } + + public double getGenFitness(){ + return genFitness; + } + + @Override + public int compareTo(Network o) { + if (this.genFitness > o.getGenFitness()){ + return -1; + } + if (this.genFitness < o.getGenFitness()){ + return 1; + } + return 0; + } + + public static void main(String[] args){ + // Locals l = new Locals(); + // Network n = new Network(3, 2, l); + // + // + // float[] inputs = {0.4f, 0.9f, 0.33f}; + // n.runNetwork(inputs); + // for (float i : n.getSimpleOutput()){ + // System.out.print(i + ", "); + // } + // System.out.println("\n------------------------------------------"); + // n.saveToFile("test"); + // + // Network nCopy = Network.loadFromFile("test"); + // + // for (float i : nCopy.getSimpleOutput()){ + // System.out.print(i + ", "); + // } + // System.out.println(""); + + // Network n = new Network(3, 2); + // float[] inputs = {0.4f, 0.9f, 0.33f}; + // for (int i = 0; i < 5; i++){ + // n.addRandHiddenNode(); + // } + // Random r = new Random(); + // for (int i = 0; i < 4; i++){ + // n.addRandConnection(n.outputs.get(r.nextInt(n.outputs.size()))); + // } + // n.runNetwork(inputs); + // for (float i : n.getSimpleOutput()){ + // System.out.println(i); + // } + } +} \ No newline at end of file diff --git a/build/source/Neuron.java b/build/source/Neuron.java new file mode 100644 index 0000000..4e11a59 --- /dev/null +++ b/build/source/Neuron.java @@ -0,0 +1,171 @@ +import java.util.Random; +import java.util.ArrayList; +import java.io.Serializable; + + +public class Neuron implements Serializable{ + + private float bias, biasWeight; + private ArrayList inputConnections; + private boolean activated; + private float value; + private Random r; + private int id, layer; + + public Neuron(float bias, int id){ + this.bias = bias; + r = new Random(); + this.biasWeight = r.nextFloat(); + inputConnections = new ArrayList(); + activated = false; + value = 0.0f; + this.id = id; + layer = -1; + } + + public Neuron(float bias, int id, float biasWeight){ + this.bias = bias; + r = new Random(); + this.biasWeight = biasWeight; + inputConnections = new ArrayList(); + activated = false; + value = 0.0f; + this.id = id; + layer = -1; + } + + public float sum(){ + float sum = 0; + for (Connection c : inputConnections){ + // System.out.println("Val: " + c.neuron.getValue() + " - weight: " + c.weight); + sum += c.neuron.getValue() * c.weight; + } + // System.out.println("BeforeBias: " + sum); + sum += bias * biasWeight; + // System.out.println("FinalSum: " + sum); + return sum; + } + + public void addConnection(Neuron n){ + inputConnections.add(new Connection(n)); + } + + public void addConnection(Neuron n, float w){ + inputConnections.add(new Connection(n, w)); + } + + //Use for input nodes. + public void setInput(float val){ + activated = true; + value = val; + // System.out.println("Setting input --> " + value); + } + + public void activate(){ + float d = (float) Math.pow((double) Math.exp(1.0),(double) sum()); + value = (float) (1.0/(1+d)); + activated = true; + } + + public void feed(){ + for (Connection c : inputConnections){ + if (!c.neuron.activated){ + // System.out.println("Feeding: " + c.neuron + " / " + c.neuron.getID()); + c.neuron.feed(); + } + } + activate(); + } + + public ArrayList getConnections(){ + return inputConnections; + } + + public float getValue(){ + return value; + } + + public void setActivation(boolean b){ + activated = b; + } + + public int getID(){ + return id; + } + + public void setLayer(int l){ + layer = l; + for (Connection c : inputConnections){ + c.neuron.setLayer(layer + 1); + } + } + + public int getLayer(){ + return layer; + } + + public void removeConnection(Connection c1){ + for (Connection c2 : inputConnections){ + if (c1 == c2){ + inputConnections.remove(c2); + return; + } + } + } + + public Neuron copy(){ + // Neuron copy = new Neuron(bias, id, biasWeight); + // for (Connection c : inputConnections){ + // copy.inputConnections.add(c.copy()); + // } + return new Neuron(bias, id, biasWeight); + } + + public void removeConnection(Neuron n){ + for (Connection c : inputConnections){ + if (c.neuron == n){ + inputConnections.remove(c); + return; + } + } + } + + public static void main(String[] args){ + Neuron n0 = new Neuron(1, 0); + Neuron n1 = new Neuron(1, 1); + Neuron n2 = new Neuron(1, 2); + Neuron n3 = new Neuron(1, 3); + + n0.addConnection(n1); + n0.addConnection(n2); + Neuron copy = n0.copy(); + System.out.println(n0.bias + " --> " + n0.biasWeight); + System.out.println(copy.bias + " --> " + copy.biasWeight); + + } +} + +class Connection implements Serializable{ + public Neuron neuron; + public float weight; + private Random r; + + public Connection(Neuron n){ + neuron = n; + r = new Random(); + randomizeWeight(); + } + + public Connection(Neuron n, float w){ + neuron = n; + weight = w; + r = new Random(); + } + + public void randomizeWeight(){ + weight = r.nextFloat(); + //yea this sucks but I am lazy at the moment. + if (r.nextFloat() > 0.5) + weight = weight * -1; + } +} \ No newline at end of file diff --git a/build/source/Simple_NEAT.java b/build/source/Simple_NEAT.java new file mode 100644 index 0000000..d858374 --- /dev/null +++ b/build/source/Simple_NEAT.java @@ -0,0 +1,177 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.concurrent.ThreadLocalRandom; + + +public class Simple_NEAT{ + private ArrayList agents; + private int numInputs, numOutputs, genNum; + private Network curAgent; + private boolean keepBest; + private double mutationRate; + + public Simple_NEAT(int nI, int nO){ + numInputs = nI; + numOutputs = nO; + genNum = 0; + keepBest = false; + agents = new ArrayList(); + mutationRate = 0.60; + } + + public void addAgent(){ + agents.add(new Network(numInputs, numOutputs)); + } + + public void addAgent(Network n){ + agents.add(n); + } + + public void setCurrentAgent(int index){ + curAgent = agents.get(index); + } + + /** + * Run the entire generation with the same input(s) + * @param inputs Network input(s) + */ + public void runAll(float[] inputs){ + for (Network n : agents){ + n.runNetwork(inputs); + } + } + + /** + * Run the currently set agent + * @param inputs Network input(s) + */ + public void runCurrent(float[] inputs){ + curAgent.runNetwork(inputs); + } + + public float[] getCurOutput(){ + return curAgent.getSimpleOutput(); + } + + public Network getAgent(int i){ + return agents.get(i); + } + + public float[] getAgentOutput(int i){ + return agents.get(i).getSimpleOutput(); + } + + public void setFitness(int i, double d){ + Network n = getAgent(i); + n.setFitness(d); + } + + public void breed(){ + int popSize = 0; + ArrayList nextGen = new ArrayList(); + if (keepBest){ + popSize = agents.size() - 1; + } + else + popSize = agents.size(); + + double sum = 0.0; + for (Network a : agents){ + sum += a.getFitness(); + } + //Normalize the fitness values + for (Network a : agents){ + a.setGenFitness(a.getFitness()/sum); + } + + Collections.sort(agents); + for (Network a : agents){ + // System.out.println(a + " - " + a.getGenFitness()); + } + // System.out.println("------------------------------"); + + //Accumulate normalized fitness + sum = 0.0; + for (Network a : agents){ + double temp = a.getGenFitness(); + a.setGenFitness(temp + sum); + sum += temp; + } + + for (int i = 0; i < popSize; i++){ + double num = ThreadLocalRandom.current().nextDouble(0,1); + for (Network a : agents){ + if (a.getGenFitness() >= num){ + nextGen.add(a.copy()); + break; + } + } + } + + genNum++; + agents = nextGen; + mutate(); + } + + public void mutate(){ + for (Network a : agents){ + double num = ThreadLocalRandom.current().nextDouble(0,1); + //Should we mutate this agent? + if (mutationRate >= num){ + num = ThreadLocalRandom.current().nextDouble(0,1); + if (num <= 1/3){ + a.addRandHiddenNode(); + } + else if(num > 1/3 && num <= 2/3){ + a.addRandConnection(); + } + else{ + a.mutateWeight(); + } + } + } + } + + public Network getBestFit(){ + double max = 0; + Network best = null; + + for (Network n : agents){ + if (n.getFitness() > max){ + best = n; + max = n.getFitness(); + } + } + return best; + } + + public Network getNetwork(int i){ + return agents.get(i); + } + + public static void main(String args[]){ + // Simple_NEAT n = new Simple_NEAT(3, 2); + // Locals l = new Locals(); + // for (int i =0; i < 1; i++){ + // Ship s = new Ship(l); + // n.addAgent(s); + // n.setCurrentAgent(s); + // // n.setFitness(s, ThreadLocalRandom.current().nextInt(0, 200)); + // } + // + // float[] inputs = {0.4f, 0.9f, 0.33f}; + // n.runCurrent(inputs); + // for (float i : n.getCurOutput()){ + // System.out.print(i + ", "); + // } + // System.out.println("\n------------------------------------------"); + // + // float[] inputs1 = {0.8f, 0.1f, 0.73f}; + // n.runCurrent(inputs1); + // for (float i : n.getCurOutput()){ + // System.out.print(i + ", "); + // } + // System.out.println("\n------------------------------------------"); + // n.breed(); + } +} \ No newline at end of file diff --git a/build/source/Vector.java b/build/source/Vector.java new file mode 100644 index 0000000..e279471 --- /dev/null +++ b/build/source/Vector.java @@ -0,0 +1,27 @@ +public class Vector{ + public float x,y; + + public Vector(float x, float y){ + this.x = x; + this.y = y; + } + + public Vector(){ + this.x = 0; + this.y = 0; + } + + public static Vector fromAngle(double a){ + return new Vector((float) Math.cos(a), (float) Math.sin(a)); + } + + public void mult(double n){ + this.x *= n; + this.y *= n; + } + + public void add(Vector v){ + this.x += v.x; + this.y += v.y; + } +} \ No newline at end of file From fbfaa2f29ec4d4433bec76f0b72e0b296b9ba545 Mon Sep 17 00:00:00 2001 From: waltr21 Date: Fri, 29 Mar 2019 13:29:42 -0400 Subject: [PATCH 2/6] Feeding grid into network --- .DS_Store | Bin 0 -> 10244 bytes GameScene.pde | 48 +++++++++++++++-- Grid.pde | 8 +++ Ship.pde | 7 +++ Train_Files/Asteroids_Train.class | Bin 3622 -> 3623 bytes Train_Files/Asteroids_Train.java | 2 +- Train_Files/GameScene.class | Bin 2882 -> 2945 bytes Train_Files/GameScene.java | 22 ++++---- Train_Files/Grid.class | Bin 0 -> 1548 bytes Train_Files/Grid.java | 72 ++++++++++++++++++++++++++ Train_Files/best.net | Bin 8193 -> 0 bytes best.net | Bin 8193 -> 74049 bytes build/Asteroids_Train$GameScene.class | Bin 5245 -> 6086 bytes build/Asteroids_Train$Grid.class | Bin 2579 -> 2731 bytes build/Asteroids_Train$Locals.class | Bin 861 -> 861 bytes build/Asteroids_Train$Sensor.class | Bin 2852 -> 2852 bytes build/Asteroids_Train$Ship.class | Bin 8090 -> 8161 bytes build/Asteroids_Train.class | Bin 2294 -> 2294 bytes build/source/Asteroids_Train.java | 63 ++++++++++++++++++++-- 19 files changed, 204 insertions(+), 18 deletions(-) create mode 100644 .DS_Store create mode 100644 Train_Files/Grid.class create mode 100644 Train_Files/Grid.java delete mode 100644 Train_Files/best.net diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..04ba73ad8b7d2ecf83d5b4c0b62e0e44c722ceb9 GIT binary patch literal 10244 zcmeHMU2GIp6h3EL%FIygv=ngAr7NYTl)r5$DHsad-3qCKRJNss0?X{qNJpnLb!T=L zT8mA5F$Vu01mn+(8jYz>8clpsVq#4EOB7?(@Zf_F`r@O}XyUnZXGyzdUxAQ&ley>K zd+xb+&Ntu8*?SfMFj+7<0b&3k(Z!@%Pt|n_)3a+yiG(9eiDVC8WJ}&;)^@W?=86G< zfIvVXAP^7;2n22o1Sn>+BCX(3)B*v4fI#3H0_^(`ql?KzC}+70J{?pAM*xzwG#nIa z(>WlpiG?x|%2_T0Q(BXs9xyb;@Q8ujob)j^on#`Evs`j>KyD5g?u_9H1%utmE*4A& zOmHb`fq+0@DFW=ZSq51sfCcuV^ZV!7N!#-Lc>G6<)YLAkTP{h8q^wjk@y{nsAo$;=onHgDH+t%4TaC+k0)btZG=Pz=XF#Ie)Lxqc% z7W-#=#T3s^L@t&6n=kt(D=V~t2b6=OR?c+6q#E+Dt!GV} z5A`U!CG|mhq{!XogL{;{QX_7WM|1AP1o`9f;XW-Tsb5H^*xm{l={0V=_NRKr(#ED$&8ye9wr}m~+0%FJK~_Awg)|D7!>JKarc8<8 z0WRhtJ#lT_T}pJAm}Q==d; zOy0I#iK@$ps9d|FTT#?nVlvn6+D+Oz;w;zp?jC-EHdZwAlfllU|~Lo9p_pU0Pphp*ym_&PChu7Y<1WyW!d?=9wCF`aj8 z*EvI@jHxSN2=bs)kZ>Ra`-5O%g0~>ud;5foD!z))K> zgB2l##~o1%1Ox&%2Z0*CZH(pr@2~#<|IN8Mv8zBpAaFwvz}o(Ff0DK;=Oik3Wx4hk zU8m_{h0UAgGBBYkNXL^5((%+`dBq?lLt|lTE3iw@IJ2MSl3G-5_@4pd{14*%&zN_; Nba9oRueaIx|9=(R1El}} literal 0 HcmV?d00001 diff --git a/GameScene.pde b/GameScene.pde index e532e4a..a255792 100644 --- a/GameScene.pde +++ b/GameScene.pde @@ -10,12 +10,12 @@ public class GameScene{ locals = l; locals.level = 3; resetAstroids(locals.level); + gameGrid = new Grid(50, l); locals.player = new Ship(locals); - n = new Simple_NEAT(33,4); + n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 3, 4); Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); n.addAgent(temp); n.setCurrentAgent(0); - gameGrid = new Grid(50, l); } /** @@ -75,7 +75,7 @@ public class GameScene{ showText(); // locals.player.showBullets(); locals.player.show(); - // runNetwork(); + runNetwork2(); showAsteroids(); checkLevel(); gameGrid.show(); @@ -124,4 +124,46 @@ public class GameScene{ text(outs, width/2, height-50); } + + public void runNetwork2(){ + float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 3]; + inputs[0] = (float) locals.player.getX() / 900.0; + inputs[1] = (float) locals.player.getY() / 900.0; + inputs[2] = (float) locals.player.getAngle() / (2*3.14159265359); + int c = 3; + for (int x = 0; x < gameGrid.getGrid().length; x++){ + for (int y = 0; y < gameGrid.getGrid().length; y++){ + inputs[c] = (float) gameGrid.getGrid()[x][y]; + } + } + + n.runCurrent(inputs); + + float[] outputs = n.getCurOutput(); + + if (outputs[0] > 0.5){ + locals.player.shoot(); + } + if (outputs[1] >=0.5){ + locals.player.turnLeft(); + } + if (outputs[2] >= 0.5){ + locals.player.turnRight(); + } + if (outputs[3] <= 0.5){ + locals.player.accelerate = true; + locals.player.accelerate(); + } + else{ + locals.player.accelerate = false; + } + + String outs = ""; + for(float f : outputs){ + outs +=(f + ", "); + } + textSize(20); + text(outs, width/2, height-50); + + } } diff --git a/Grid.pde b/Grid.pde index b32d37a..578f01b 100644 --- a/Grid.pde +++ b/Grid.pde @@ -85,4 +85,12 @@ public class Grid{ } } + public int getWidth(){ + return grid.length; + } + + public double[][] getGrid(){ + return grid; + } + } diff --git a/Ship.pde b/Ship.pde index 718ff7a..63092ef 100644 --- a/Ship.pde +++ b/Ship.pde @@ -105,6 +105,13 @@ public class Ship{ turnRight(); } } + + if (angle > 2*PI){ + angle = angle - (2*PI); + } + if (angle < 0){ + angle = (2*PI) + angle; + } } private void turnLeft(){ diff --git a/Train_Files/Asteroids_Train.class b/Train_Files/Asteroids_Train.class index c8ebd1d7cc16269a21cb6adba7c61aebbc4495a4..908e8d7b17111bae5673130ab1b85c7d33766657 100644 GIT binary patch delta 77 zcmZ1`vs`9F2M6bB237_p1_p+}$rCw*nFSf$CokiO(2`{kWzb*{V=!V6XRrj)_6(8? fZVXZk-VD+V0Sqz>sX!e93{3wSv^HyS{$l|EE-DR3 delta 76 zcmZ23vrJ|~2M6aW237_p1_p+J$rCw*nFJIkFXxERl3@^KP-hThFk}#CumI9_43Z44 e3{nhU4AKn#3^ELxShc8Bbc$?Up2 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 literal 0 HcmV?d00001 diff --git a/Train_Files/Grid.java b/Train_Files/Grid.java new file mode 100644 index 0000000..b185fbb --- /dev/null +++ b/Train_Files/Grid.java @@ -0,0 +1,72 @@ +public class Grid{ + double[][] grid; + Locals l; + int cellWidth; + + + //CellWidth should be an even multiple of the width and height of the screen. + public Grid(int cellWidth, Locals l){ + this.l = l; + this.cellWidth = cellWidth; + int xSize = (int) l.width / cellWidth; + int ySize = (int) l.height / cellWidth; + grid = new double[xSize][ySize]; + resetGrid(); + } + + private void resetGrid(){ + for (int x = 0; x < grid.length; x++){ + for (int y = 0; y < grid.length; y++){ + grid[x][y] = 0.0; + } + } + } + + private void setAsteroids(){ + resetGrid(); + for (Asteroid a : l.asteroids){ + int xCell = (int) (a.getX() / cellWidth); + int yCell = (int) (a.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = a.getLevel() * 0.33; + } + + int xCell = (int) (l.player.getX() / cellWidth); + int yCell = (int) (l.player.getY() / cellWidth); + + //Cap all coordinates + if (xCell >= grid.length) + xCell = grid.length-1; + if (xCell < 0) + xCell = 0; + if (yCell >= grid[0].length) + yCell = grid[0].length-1; + if (yCell < 0) + yCell = 0; + + grid[xCell][yCell] = -1; + } + + public void show(){ + setAsteroids(); + } + + public int getWidth(){ + return grid.length; + } + + public double[][] getGrid(){ + return grid; + } + +} diff --git a/Train_Files/best.net b/Train_Files/best.net deleted file mode 100644 index 62a2078d6faa54013ba200c60ef011c3627ff16d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8193 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 diff --git a/build/Asteroids_Train$GameScene.class b/build/Asteroids_Train$GameScene.class index 43e0c6d294d4b1dd0dd82c535e0ccf5e2714a9be..da97f2b09c4d5e689c08946a0bf66a31dc8f9cdf 100644 GIT binary patch literal 6086 zcmd^Ddwg7VmH(d1ow>>6woNBZ)ARu;ZDBG=ni8azhCWD7?{jCKJPqIyiJK@9)U@XEb~cmh$=$dmn@Bl}*Cz(-uB7eQ zCJaHvp2WUHQ##@FHEr6x$4=%2p^TGGIkrG{aFWg>6X~2_PJFVUxVzFqK1VPu-jx~{ zOxrhhu4~;wT4^7TS)Wby2xd>&sdVy$^8KmY;$?!FlR0$p@|2UxUm<9SPFbBySnR7( zw@qNI&Ggu15L8;2hUsAhP-S5TW(xw*x^22L$AXE{GR(z%6Z5Fxxh=D>0OtvUX?vfY zrj;FG?ya@35Eszitevy-+~~TN$3{EqwwYKgm^E3NS{ue9T&QYXBxsy!P{;pmkt$qg zp&XWp`g2I{>Q4=Z5ksR&uTZ0!EG)yt^x$ARalp==D*(Ew#Uw^hJ}zvkB!Ev^8gEb4}R;31>Kw&NsDXhMjaK z(UWUhyQytm(*}jvHQ7wk&gD`B+axD7?Y49IrH-8sV>Q;8Xcd^9c78aM-D_bj+60yg zYtLo|+EZy_b3rtI7P(#dEM>OT#r-WUs&2c5^|*?bBzk&U`)r5EwxVMkb=#C@gN3U# znll*7wL{q~xqQ|cai&1$(7+vQE(WS1` zO;pf`wkrg06jV=k&6=T9y2s9zB0*Th70G;lo?ueE@#p~H=x%-ABcfaVsOxQ z$U2`mpW=C6d`l_z(AuzWOzXx07wnUjVVowDiUJhK84H6&1a>7eSzEZHUiyV?-S?bCsl6yBM23>q=HTZyq58`fOC{erz7;jJ3 zP(GDzYRzU72jZz*p1wPRdrW+YrPGbi#AOTjY7Gr0({>^o#)omgiI33Mv#iOClk{?^ zX-j|BPV~45b8W)u$qZQdC?24XdoBL#>03-vHxj7)6{C**7hgrv3luI3!lYf3?56% zr0gk%dxr+~Z!H{Grb-nKAa$EZcCMKE1k2R941X+>n*qjha$kbotIGE5_bYrMN&hM0sb zF||mUyS;QUR^O^6w^_oLlndpm-u?xxS-+EYS(m39;+NNV??4QI`iq+jf|L@G5V)t1Z|zu{sf&b4ITcw)2ay}*+55Tbf2 zI<2|L_{F5wl7-`WFX0s?i-=cQtT$-;)QhVK&r-QiP|{Fqv_1g#R$Fn5B`xL9Dh8%x zC#!-a`OnGJe%y-$;bk(zk;gcRd*<)#Ps1fYDRE= z>=YJt*H<(*j9|$LM0Md5V%_!nFamB`N{;4kPNN09!5{iVyUY=+IDwYPs*|{~ljN4h z0@mpmD4^pp9$kVsf0wekhpb1LT!rbp5PNgQisBX&tAdSw$Fxd!`WGd6Nh zt!w%)I+GbqK)e@~0o~cq#L)FxWcz7gKz!n`N-39D8g&VpfyGF2^ z6t%VhJCZ73uQy#u8(%vHG! zCvh7kN8U+!6tVGOKo*dl$58IOkB+{qdmDTK70o@K1ocb6^-Hq`Pqw2}uER{}=BvjJ zz6k8ZM!BAS?3-AqZ$L_J#9KJtAqjj;cDufbdA9n#S&2Qk9e2AZ6n1{FB*S<_n(hxQmD*Mb;5d@AnsQI5;oZziX8mdCN)MSJCXP9HssR zJa}k@F^>2*!SqZVR=UUJ&3BO_5G1jG*P#_bU+^hBtoVsk8@E>nZx1PT1fMG4Guu4| zdhGGBrxWVQ`A0`@JL{{M0$yx{r56>_hbrl39;eVPdvKHNW#5{nkNR*}9M?xzcxH{^ z=ZL=R(&!4j11I@Zf(Q=!K8n$EPvA*6rX~w-@+*QBM*{4;LYUcZR0r&&yZ6S zbG4^1o%VMdk6~uR6ZpK~X*?XSFW~Pvdrolg=&J-v{Bb<*0`Z%K3m3mlv=s2&$0!e2 z!dSiRBjP+JIAjQOWFO{pTq64sl>?}gn{cJvJT5a<`Z_`1@ti1$Y`6TQvs6TncGHAq<6l^( z{(TGx|FJz*z%NPq4gY_qP+==X&ggMjp4`j_0IbFEO2M;+DKqcBAJcs1lM-n( zT-tr(XtNuGQ)o4fA*CJu2+l zJcRq?<9tCnhDYTSctSqOzW-Bf)IW_Er*Sf$-_<#t?^-?D>0@36r!FsnmEJnFBNF#OLHuiKEoByTc3*Zcr(!^40 zNQ8;HY^-FgNBJmf5M-X2!cSCg>Q&9F8s#@0!zXe9sH|KV9%VHuJ4u7z1hb1dy&l`5A0he9G(0!pLiwF^Z-?51%EnR;#eI$vTeB jylo%GR%s_4{M?f|9=6u{-ccmxH?5t4?bYp%p6xZbCc3o{HX@YKv`&613pL^5q6rNzzKkeuSVm zM>j>|ekWF9jk3}qYqat9l~^m#i7wfug$mXY$f+256c&^BXtjX=IDj}duQ*ELQkcw!*Tv#-2U@X7U^6CiqBh66Qa#%IM!?DN7J-lB zHd$p0l-*7W+J-v}e1hOwAK4VCibs08tJ+eDSZ}w$o!Bln*=7~)V4MEi*!ckN61W>1 zpHpt?J<(WqPs+dmp;*Qp#hi*`_=3vS7iFa})4mU17WfJtlQF|z z62R94jw@64L^K&qE$vGx@4hZDD32O*nfa8!X*?<4G^YBW!Z!>&O>k!->`%qwRZU#U zNUAR(@J&1;tL*-oV|Z5JIi*oc_VjJe!&CUSz;|$#Td60KY~jjgGQZM+@8Jal-4);9y^_oMV^zAB$3{`lfX%Z5#AB_mBJeEEK4T(dvmj(`2Q;KH~gJp)lbphWM3jlC<>N0uaC$@&aw0l zx!PG`zkq)U{2Lc#+UZMQz$JmpxJbxnp-dw$kHq_<4g?5-2={X+Yy0EzXez1IZ&OVb zCQXoy^sM;>{fR`hm-A-}uHvy!&vro$a2pasiUE!3{#?ZCcLzMwHw zAdB+KZw^qQAU73o!6TiW(PXl$MsbW4fKRX!C7DuyzxIOD3&oXP-=7gTaJ?+l(H zn!p94iSlsXB$uCHsqkwJkAU|{D~`%@d5u&iw~9kW1}Bxb6MqZYwHKg6W7;EY@+UVB zqUaO??cop~hB0Lb(?X{ZZg)*GhEX|$YIp4k%xvM;>Pi!Jids#~W1fcgu&cIW7z>85 z@Hnfppiw@SUy`0l&6rP%(MT;=N=tAPEk!rAqKSF@uqwm&AU?!Yotj}+lKiq5E&OUx zjgfVf!tADU^e9_(>n4^e>i)2a<)^T+-MxAkH#1T+2%m|FJ8GhvuW7zdGqIi_6TQt! zq!1$}5~ITEpu%+zqTd$Z;l9NTjvd6yi#0o0%=z5{v<186^pl9X#%rn_3k_} z@~V=p$SH8uc4alF6j(VB`TUsK^(xj-*7sbjby$y2VHZc%g?ik>Ckxggh~1dTV)rtC zJ}j3JGq8>SeiV+WF`%(smcwcIyfq#^+6ZX+@TS^Y_(I@s*GtR|zORGIB>Q zMEPz(Ra!+jj~fX%Fj~z6n84BSD#lI>@yP-=w&x-Yaoi?`IVbIyg%f zTs(gK5!cSd%g0$EFojcnUe!mw;tFJ(&$eQH&iP_C_Y1tryyfh|FYy|mR8g*hHi9wW zA6ecJyi<`s!auB}uKYPaj(z4;#Wyur8`yv{78>>Wb?s4PdZ(S6RO=XmPrb=4g)VB8 zy9!G(o`|ea&J$&o)dU&jb)M6_p6w{jL6&y&{QV|0jNfOiaIOBZg0FA!|J$m53r+kv zH;*hak=+K}1v}l%yKWbXXg5meUifJbrcrutW-PNF1alq`{&K~zWj~k6!3rX-NvHK@ z>)cVB?{Y!vv;p{hTCOA)TEeBgBL2Czb-RTWnyJhi|5qZN5&6%5iG*GLoYbJ2+}C$_ z$kN-&P<7ZOtD+_uEtS@459K{@82LHo6C^6N4EE4fn5)wEKbWUdSJ?hTX_VxIwILce zs>e5gF}aJCarf3bt+Kt&erC2|ovja`+-LXd)pKmB+k8BNYFiZ9Oe*!zHQAj}r)}5C zt9y+jBQLWew}&S2)>0>*roP$D6B_jJktVAh!aL~7cs=R4Gt(D0@@nMF=c;0()fAvI zZUci>(v-}2l_8I&(lqXu<)f$j@FE47&&oe}om9??Mk6;$DKt8Ai;y=0A8g#j28DBd z?Je<+U;(r&*sWdwk7tr|gvZ&DV`Y$+6Da#S1s1B{7PC+#O=num>);q#sfv9hrq%py VU|Pd;JkwgH7nsgq8elpT^d7WphkpP7 diff --git a/build/Asteroids_Train$Grid.class b/build/Asteroids_Train$Grid.class index 7583f70132032b4fb94be711660b9b61893952de..41874f9203210cc69c562ddd5a5547222bba27ca 100644 GIT binary patch delta 487 zcmYk2O-Phc7=@qr_k5NV+|KWvpU^x$bg#FuEE{St42q&b56ZWnZbcZ#39w3j{=7*G#~RP@bW&Zv*F_W5RsYwBlK13c1xp6CEibIJM zhA}q#&-J>RYa;)ej=2}^L|2^STOB3mKJ%|ZH+fISO>X%a(?!>q4rBVIn~m_`1~~i= gi`x|9+8w67-a)`ID$M+Sr@~#=7SH!wM_gyIKYPPax&QzG delta 360 zcmWNL&r8#B9L8VId*APD%jsbap%y`U*b)gDb&7!(52KTHScnJN4ng%7M448Kc>L}V zbnI4MWH$w)L%G&q3r6Ws)0DEH^-Bt(Mjzhrye_YY=lvuR9E(;v%d0?!xuxh0FDQAp zkoYgBbss;1@LZXhZ22s6sMuStTGpJ@c9Uj$`-r{MU zq&7&Y#W`(})i$GgM@~Cj)Gm3wr=UHqYM*QRz%A#`>Jtz2naBD!xHe9$F8Ntd|w%R$QlP@nA7>Y1p{qhKy-u98cphLXo@3 QU6Fe(k2~IX%sbAa|9`?(PXGV_ diff --git a/build/Asteroids_Train$Locals.class b/build/Asteroids_Train$Locals.class index 73b3338ccd9809ab81c4820491c6fe696e7f56b3..b4cb86bd174dd2e0c9d4f9ba762ee90ad637a25b 100644 GIT binary patch delta 25 gcmcc1c9(4f4>NBN11D23g8)+qgE&*@WJzWh08U#43IG5A delta 25 gcmcc1c9(4f4>PX<11FOrg8-8fgE*7&WJzWh07b(DLI3~& diff --git a/build/Asteroids_Train$Sensor.class b/build/Asteroids_Train$Sensor.class index 906b82280ef2145c2b889ef4663ef0c617f34a89..b4cbf99d1eae49748dd7dc1c1a5cbd84e496792c 100644 GIT binary patch delta 184 zcmV;p07w6%7Ni!i0|psg00{zK01yIS02KmY02%^e03QNk03`xrlN<)08D;st4dH|~ed;rb@eE`}5egNVEe*o|TfB^dffdK{rcL5Lrg#j4?h5;l3hXE@BhygqT mjFZa<-vN)4s|j8KlamSxSpk@nWC}(BoRg~xJOQAS=n6d83@h^h delta 184 zcmV;p07w6%7Ni!i0|pr@00{yt01yH#02Kl*02%@>03QM{03`x3lN<)088iSB0yO|8 z0yh9I0yqFT0yzLl0y+Rw0z0$R2BrZ~J^&K}KmZm3K>!&7LI55DLjWTJMF2hmMgU;~ zM*xTdNC2w>N&wCRO90veOaS5nO#tu$P5}D?PXPu3MF9{3Qvn$QQ~@LcRRJpkRslQ$ mT9eBN-vM2ds|j8KVUr39SpjB~WC}(BYLlx9JOOT#=n6diJ0v3j diff --git a/build/Asteroids_Train$Ship.class b/build/Asteroids_Train$Ship.class index 68ae96450b5e9d37c4cda203e594e6927e82d68f..2e2eb43b48e65223a1208d2f2cbe47fb06835bcf 100644 GIT binary patch delta 2976 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 E0ngk$(*OVf diff --git a/build/Asteroids_Train.class b/build/Asteroids_Train.class index b89a2d4852bd1e4b5a52bc5c55aed79b982b60ba..eebe4d9560517d78fd35c81c04fb4e9494e95525 100644 GIT binary patch delta 41 wcmew+_)TzwC 0.5f){ + locals.player.shoot(); + } + if (outputs[1] >=0.5f){ + locals.player.turnLeft(); + } + if (outputs[2] >= 0.5f){ + locals.player.turnRight(); + } + if (outputs[3] <= 0.5f){ + locals.player.accelerate = true; + locals.player.accelerate(); + } + else{ + locals.player.accelerate = false; + } + + String outs = ""; + for(float f : outputs){ + outs +=(f + ", "); + } + textSize(20); + text(outs, width/2, height-50); + + } } public class Grid{ double[][] grid; @@ -530,6 +572,14 @@ public void show(){ } } + public int getWidth(){ + return grid.length; + } + + public double[][] getGrid(){ + return grid; + } + } @@ -729,6 +779,13 @@ private void turn(){ turnRight(); } } + + if (angle > 2*PI){ + angle = angle - (2*PI); + } + if (angle < 0){ + angle = (2*PI) + angle; + } } private void turnLeft(){ From 84ad45623633ca7f94a44e8d29faba800084e01a Mon Sep 17 00:00:00 2001 From: waltr21 Date: Sat, 6 Apr 2019 21:55:18 -0400 Subject: [PATCH 3/6] Many a changes --- Asteroid.pde | 4 ++ GameScene.pde | 22 ++++----- Grid.pde | 2 +- Network.java | 9 ++++ NetworkView.pde | 28 +++++++++++ Neuron.java | 10 +++- Ship.pde | 3 +- Simple_NEAT.java | 2 +- Train_Files/.DS_Store | Bin 0 -> 6148 bytes Train_Files/Asteroid.class | Bin 2818 -> 2934 bytes Train_Files/Asteroid.java | 4 ++ Train_Files/Asteroids_Train.class | Bin 3623 -> 3676 bytes Train_Files/Asteroids_Train.java | 17 +++++-- Train_Files/Colors.class | Bin 2828 -> 2828 bytes Train_Files/Connection.class | Bin 685 -> 685 bytes Train_Files/GameScene.class | Bin 2945 -> 2870 bytes Train_Files/GameScene.java | 18 ++++---- Train_Files/Grid.class | Bin 1548 -> 1510 bytes Train_Files/Grid.java | 3 +- Train_Files/Network.class | Bin 6453 -> 6643 bytes Train_Files/Network.java | 16 ++++++- Train_Files/Neuron.class | Bin 3375 -> 3492 bytes Train_Files/Neuron.java | 10 +++- Train_Files/Ship.class | Bin 6246 -> 6282 bytes Train_Files/Ship.java | 3 +- Train_Files/Simple_NEAT.class | Bin 3344 -> 3400 bytes Train_Files/Simple_NEAT.java | 13 ++++-- Train_Files/best.net | Bin 0 -> 85116 bytes best.net | Bin 74049 -> 85116 bytes build/Asteroids_Train$Asteroid.class | Bin 3880 -> 3996 bytes build/Asteroids_Train$Bullet.class | Bin 3236 -> 3236 bytes build/Asteroids_Train$GameScene.class | Bin 6086 -> 6002 bytes build/Asteroids_Train$Grid.class | Bin 2731 -> 2697 bytes build/Asteroids_Train$Locals.class | Bin 861 -> 861 bytes build/Asteroids_Train$NetworkView.class | Bin 0 -> 785 bytes build/Asteroids_Train$Node.class | Bin 0 -> 506 bytes build/Asteroids_Train$Sensor.class | Bin 2852 -> 2852 bytes build/Asteroids_Train$Ship.class | Bin 8161 -> 8197 bytes build/Asteroids_Train.class | Bin 2294 -> 2390 bytes build/Connection.class | Bin 820 -> 820 bytes build/Network.class | Bin 8526 -> 8741 bytes build/Neuron.class | Bin 4165 -> 4320 bytes build/source/Asteroids_Train.java | 59 ++++++++++++++++++------ build/source/Network.java | 9 ++++ build/source/Neuron.java | 10 +++- build/source/Simple_NEAT.java | 2 +- 46 files changed, 187 insertions(+), 57 deletions(-) create mode 100644 NetworkView.pde create mode 100644 Train_Files/.DS_Store create mode 100644 Train_Files/best.net create mode 100644 build/Asteroids_Train$NetworkView.class create mode 100644 build/Asteroids_Train$Node.class diff --git a/Asteroid.pde b/Asteroid.pde index 528ec89..cabda25 100644 --- a/Asteroid.pde +++ b/Asteroid.pde @@ -71,6 +71,10 @@ public class Asteroid{ if (distance < size/2 + locals.player.getSize()){ locals.player.setHit(); } + + if (distance < 100 + (size/2) && locals.player.accelerate){ + locals.player.avoids = locals.player.avoids + 1; + } } public void explode(){ diff --git a/GameScene.pde b/GameScene.pde index a255792..eba679b 100644 --- a/GameScene.pde +++ b/GameScene.pde @@ -8,11 +8,11 @@ public class GameScene{ public GameScene(Locals l){ locals = l; - locals.level = 3; + locals.level = 1; resetAstroids(locals.level); gameGrid = new Grid(50, l); locals.player = new Ship(locals); - n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 3, 4); + n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 1, 4); Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); n.addAgent(temp); n.setCurrentAgent(0); @@ -126,14 +126,14 @@ public class GameScene{ } public void runNetwork2(){ - float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 3]; - inputs[0] = (float) locals.player.getX() / 900.0; - inputs[1] = (float) locals.player.getY() / 900.0; - inputs[2] = (float) locals.player.getAngle() / (2*3.14159265359); - int c = 3; + float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 1]; + inputs[0] = (float) locals.player.getAngle() / (2*3.14159265359); + int c = 1; for (int x = 0; x < gameGrid.getGrid().length; x++){ for (int y = 0; y < gameGrid.getGrid().length; y++){ inputs[c] = (float) gameGrid.getGrid()[x][y]; + // System.out.println(c + " - " + (float) gameGrid.getGrid()[x][y]); + c++; } } @@ -141,16 +141,16 @@ public class GameScene{ float[] outputs = n.getCurOutput(); - if (outputs[0] > 0.5){ + if (outputs[0] > 0.0){ locals.player.shoot(); } - if (outputs[1] >=0.5){ + if (outputs[1] > 0.0){ locals.player.turnLeft(); } - if (outputs[2] >= 0.5){ + if (outputs[2] > 0.0){ locals.player.turnRight(); } - if (outputs[3] <= 0.5){ + if (outputs[3] > 0.0){ locals.player.accelerate = true; locals.player.accelerate(); } diff --git a/Grid.pde b/Grid.pde index 578f01b..743219f 100644 --- a/Grid.pde +++ b/Grid.pde @@ -38,7 +38,7 @@ public class Grid{ if (yCell < 0) yCell = 0; - grid[xCell][yCell] = a.getLevel() * 0.33; + grid[xCell][yCell] = 1.0; } int xCell = (int) (l.player.getX() / cellWidth); diff --git a/Network.java b/Network.java index 2e84b3f..9a3f1f5 100644 --- a/Network.java +++ b/Network.java @@ -175,6 +175,15 @@ public void mutateWeight(){ c.randomizeWeight(); } + public void mutateBiasWeight(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); + + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + n.randomizeBiasWeight(); + } + public void remvoveRandConnection(){ ArrayList validConnections = new ArrayList(); validConnections.addAll(hidden); diff --git a/NetworkView.pde b/NetworkView.pde new file mode 100644 index 0000000..8809d24 --- /dev/null +++ b/NetworkView.pde @@ -0,0 +1,28 @@ +public class NetworkView{ + Network net; + ArrayList nodes; + + public NetworkView(Network net){ + this.net = net; + } + + private void initNodes(){ + // for (Neuron n : net.getInputs()){ + // break; + // } + } + + public void show(){ + return; + } +} + + +class Node{ + float x, y; + + public Node(float x, float y){ + this.x = x; + this.y = y; + } +} diff --git a/Neuron.java b/Neuron.java index 0ff38a1..21256e6 100644 --- a/Neuron.java +++ b/Neuron.java @@ -62,8 +62,10 @@ public void setInput(float val){ } public void activate(){ - float d = (float) Math.pow((double) Math.exp(1.0),(double) sum()); - value = (float) (1.0/(1+d)); + float sum = sum(); + float n = (float) Math.pow((double) Math.exp(1.0), (double) sum) - (float) Math.pow((double) Math.exp(1.0), (double) -sum); + float d = (float) Math.pow((double) Math.exp(1.0), (double) sum) + (float) Math.pow((double) Math.exp(1.0), (double) -sum); + value = (float) (n/d); activated = true; } @@ -130,6 +132,10 @@ public void removeConnection(Neuron n){ } } + public void randomizeBiasWeight(){ + this.biasWeight = r.nextFloat(); + } + public static void main(String[] args){ Neuron n0 = new Neuron(1, 0); Neuron n1 = new Neuron(1, 1); diff --git a/Ship.pde b/Ship.pde index 63092ef..ba8fc87 100644 --- a/Ship.pde +++ b/Ship.pde @@ -9,7 +9,7 @@ public class Ship{ boolean turn, accelerate, dead, noHit; long timeStamp; int k; - int lives, maxLives, score; + int lives, maxLives, score, avoids; Vector velocity; final double PI = 3.14159265359; Locals locals; @@ -35,6 +35,7 @@ public class Ship{ this.maxLives = 1; this.lives = maxLives; this.score = 0; + this.avoids = 0; //ArrayList for the current pressed characters. //(Mainly used for making turning less janky.) this.pressedChars = new ArrayList(); diff --git a/Simple_NEAT.java b/Simple_NEAT.java index 5a485b1..a57dab1 100644 --- a/Simple_NEAT.java +++ b/Simple_NEAT.java @@ -22,7 +22,7 @@ public Simple_NEAT(int nI, int nO){ public void addAgent(){ agents.add(new Network(numInputs, numOutputs)); } - + public void addAgent(Network n){ agents.add(n); } diff --git a/Train_Files/.DS_Store b/Train_Files/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0jhqH$qd>&}%s*XqiR3pMJwpIQvD%|G|OJDz*rdx!ns{MOrFuU-Sl!vhn!SgVJ8 z89z#9kNNCF3f2i!3Pc3f3q%E~^pKZ9{K+n6VgoiBsMg=agGI4POq)&ApjK8}^qHU9 zA8lg>M3wM(E$53T$g)qveTs`d!%6}Np7 zy5GbBSONz{cSzu{K(mP!91%Eb;Ft!jsr^fgzUDDV)M-g-K#Oqi`1I6sBUD!g-V_OqakJm}209!bR8yE-5U< zGKJ*=D^a0P&Q&2U3xO-Rs?aJiZ31D;R=9@i25u~pNMIi38@QuzS18=W zeS1dI$5b;CjmBzY^^wLH+pEx^M|P5EgFV=N*~;bElKHVgXMpU{k!;hE?8A|4){*So zk!*?5D-Ai4JyG_NkwHUOtAj;2|^L`|wOa=-#c>2MDXWCUno%Z|O=$jvIGB?U>uS!5ALx>Jpl5f5tH zc`e1-WIr>)Rb)*Hy=#?yg72Qu4`7T+XvL3ibI1lt+yg47vA4j|hM zX3xh0Rx3sXi?9nzxC480{X{rvJWCfR2y}8-LSPHi+LOJ#^bwMEgk9tfT3N+iwX#Qb zVq{s1rak=qKCa2`#Hg}|=>6}un@J|S0e_iPPiMcWRnp~5*_7mr_sL` zIgaKxhTmA>ra4pU3pdww#BEHt9STjf@U9c(M22vh67FGZ`jbJ4INj0iCGts#ul>~L zuMv7(7K^%)1opl5RHV=)+el7DnWdqnt=uswcRSm+K|Qr5aiBRrDotdX}|0npIsBwcnY6f6AIn MCFiu7>0DUz2Oosk1ONa4 delta 1318 zcmZuw*-jKe6g>?y-7`HU7?g=5NPw`&hzO!6iVmxYf`Fj7pn~k1D4@8H;sT0_+HRme z6Q2l)sPRF4_Qk{>@L4~=2PNvcJrf{=?)14;_nupI@2Tov-XU+`%ij+l0c^wz6B#(H z=eraB)D~y_bRz;s1nLEj3LFzSF3_OoyO_jBW{oCJpvge9{yCH^jur{EnrK72j5>7x zk8yb>#MLRTEiNZEyDs0CNh4nJZ64)TH2|0>FWEvP!xQ-hdTm}6D zEq%Qm%?dYhOCei=!wMs~t*{we6z-r#Ay*Q&BFDg}!d=`ma9^PUdlf1L_Tzv;Ek}76 zlL8(H-H&{Qhj?VbQh1Cf3Qq-g387S=7$pXtDLj{r$1!0Y3IA@@I;=njCG+rO^|p9y zz_#qcwk*=N?8LTg%eJhS)+N>2mIc!;7d@aMkK-`D5NT|`CN(lrz}ai)FlbwR@2pm5 zyH;p@b>}F;;g1cz5C<ys-rkX+$=1Lqs0q`yUK-3?8f{P!*7@x8^Gx=BPXoX+o1f&5koW$ciiUuBJ zBUbQl@uJyIcOcATGNXJ>hAhrB@|Us3G=4sQYo#`Aff`-Zq?-%&Kv6eME+0`;Tus#^ z-O1MUsgk)o-S!R=c}JJv8dHm?7fGrLc4JkVUb~avA^}FKms})j@gmnr-ADC;wI%X= z<%D%#>I|ahdot~NI82#F$mE|B;xFta*0p%;QD*U16Ye8Vv@d;?k=C{nG4GMy^d9RL dv&X1bUFe?pJ#jH|Fu{FI-d8!ggY<;q(0|NDw{rjh diff --git a/Train_Files/Asteroid.java b/Train_Files/Asteroid.java index d4e8638..5252945 100644 --- a/Train_Files/Asteroid.java +++ b/Train_Files/Asteroid.java @@ -72,6 +72,10 @@ public void checkHit(){ //System.out.println(distance); if (distance < size/2 + locals.player.getSize()){ locals.player.setHit(); + } + + if (distance < 100 + (size/2) && locals.player.accelerate){ + locals.player.avoids = locals.player.avoids + 1; } } diff --git a/Train_Files/Asteroids_Train.class b/Train_Files/Asteroids_Train.class index 908e8d7b17111bae5673130ab1b85c7d33766657..f8d4315d5718d2ccd68cec0bf9f1d83b6c4e47b1 100644 GIT binary patch delta 2053 zcmY*aX;@TM7=F*(J9F<`t|=oRk25HVD53!_p@V|ph8AgwVYp-?3^*)<$%vTCsHv!# zSyP&pOJ-5oqCz9C?Pc1&XSQjJ^{4+nD!u0poXRaMP z1z-gJHjss81I1YCq%gG99RyuJLR>)Y`z$&bku{F{>D9u_8>kK9|Yglif z2U=wI1`Qhx^hC3qY|`+Mfuz{VW*K?dKsX6oWbhGr?p7x^J}P%VCQZaqNM!OyEyELnfx-P620e*jMi_t?&o^CQ8AIccaY2I}*;js5kMRH1FdB6Q}W^i8DBB z;v;-)qE@B^CA?4M=u>>L*T9e)V)nh~h?r%w0R`vSp0usSc5Yomt`=konn zBw%;XPOmI7@h1;b?3u1h_{&6{ggjHya1YAb#@go!!&&VQ6*W~)3WVBP9Tg&6%qIbu z{3F3u-^nHf?&8>n>9pk1ijz)yU7lxo9%;qdPRp~mmS^uR&sJKV&9yxHOKV($M z*@4JLJw;56wCaVTDso95*|(a}9*&T0e9;4(d1u2>BQ1)Rfoz{+IH3~O}j+7`oO0KHp z+G7i@cBJftrzjhGPKV=OE8g44OiB&i`#k5E@nt3`@nt;x)9=km1KFkJY79tD2Zok*U|1BxnQ|N>%8%ey*T^VFv58(+9tW<` zG*OJXF(seDOt&YBf*Vs}SF&W(hnT=Gl1jNcDb*wj$xE@$VZ*|_jl7Qn;p7$gMd-Rn z1-qwkVTh9Naqq)G34E+-0aqn(3u~c_7DZ8LaeD4LjY*^hs6mFthNiG1>6{EEPqLO1 zHp$&(WUv;Wx~v#EVGa}HBLA4Z!V?a9+?6e)rCS2VHPm{wWNk~la;YxYnds~>rY_fz zZeea*7fFeRBxoXUpBN`clVU6#WTBWM^Y~8-tfR7$iAMCoVydW#aF(#0&D7#De=t{2dH&{ke=CHmqO&r^> FtEiWm@9h?>~~Wr(H-qY?@#xM$-+QCenA ztEJ{rRF$C)$lcHe!ubJE}B4EPs6<95@H74#ySY&GjtP`+a#|D!M%XBoDNWcT4{h*FU z6TPuan1^&cY$7H0WTQwnnFy!g5fMHrem8q)_?TF45%9Rko{)?p0-hB1DFII#c*exD zcuvGy-36sAfFBRDdfvbbI<}eEjvb=%qKTc@Wnwq>n0N^<>u55OC0V{=;8hbPS$ItZ zdkws9;0+=78F*71HyhY5HU|u}xC;iwVi;&O&}Ja2qg|BPuMiNQK>?jDWoo!m z?U9X+qZQ?tV_}|vGL$I96;~}>v>-HVYT@`23*}g7p%l|COvBw44q=Xt!xoON{CkBvD$8*>~s=74O>84;WG%~=yxklP#CVgyuCWS>!> zDkJ|G+5JM4Ccx2!ARId8D&QQFmf zz*bx(%WU(*!J*_yClX2pw?>RKmRJM63{!y9Qfec{mN-Ov zOm2`jJ&LQR_2f2yOCal_^OWMaD2ZH?6s}2tvVmNWOy(z6uFnH^iu;dedXFjA5e%EKyn-BL?rt(80@=*`pYWHrgv&do02`Y7`4KAz}_k-|=Z+oyBJ z0Xj@4ox#->*B&^eTjwx@u6fgTfPby5^n%(p#0NcXu!0>h+YskVFn7W2y`kCft88Rz z;*(GinHV1k+ucYur4u)@%;Y$sZi=;|nIU4UHIDx%;7VvLLSAK8vYft*n8BEtSj<(c z=fW-J;wd7ZQ(b>>~Nj99^V;;L^58U>Pq@Icn GEd3wuwR?U5 diff --git a/Train_Files/Asteroids_Train.java b/Train_Files/Asteroids_Train.java index 5d393ae..381495e 100644 --- a/Train_Files/Asteroids_Train.java +++ b/Train_Files/Asteroids_Train.java @@ -17,7 +17,7 @@ public class Asteroids_Train{ public Asteroids_Train(){ setup(); numAgents = 80; - neat = new Simple_NEAT(18 * 18 + 3, 4); + neat = new Simple_NEAT((18 * 18) + 1, 4); locals.neat = neat; for (int i = 0; i < numAgents; i++){ neat.addAgent(); @@ -43,23 +43,30 @@ private void draw(){ } private void runAll(){ - int totalFrames = 180 * 60; + int totalFrames = 45 * 60; int c = 0; for (int i = 0; i < numAgents; i++){ - locals.GS.resetAstroids(4); + locals.GS.resetAstroids(1); neat.setCurrentAgent(i); int frameCount = 0; + boolean longLive = false; while(!locals.player.dead){ locals.GS.show(); frameCount++; - if (frameCount > totalFrames) + if (frameCount > totalFrames){ + longLive = true; break; + } } double curFit = locals.player.getScore(); //System.out.println("Accuracy: " + locals.player.getAccuracy() + " Score: " + curFit); curFit = curFit * locals.player.getAccuracy(); + if(longLive){ + curFit *= 2; + } + //curFit += locals.player.avoids * 2; // if (totalFrames - frameCount < 5) // curFit *= 2; neat.setFitness(i, curFit); @@ -90,7 +97,7 @@ public void printBest(int gen, int total){ removeLine(3); } int percent = (int) (gen / (total * 1.0) * 100); - System.out.println(String.format("Generation: %d / best fit: %f", gen ,neat.getBestFit().getFitness())); + System.out.println(String.format("Generation: %d / AVG fit: %f", gen ,neat.getAvgFit())); System.out.println("Progress: " + Colors.GREEN + percent + "%" + Colors.RESET); System.out.println("Time Remaining: " + Colors.YELLOW + timeRemain(gen , total) + Colors.RESET); } diff --git a/Train_Files/Colors.class b/Train_Files/Colors.class index 00b1fda2ed3e8de1636c2642404d9c8b18191dc5..70d8da1d30686101c82d45b42d9441047b8eba2e 100644 GIT binary patch delta 19 acmeAX>k-?)$j#l$z{pU;z`(%7PzwMo9|M&D delta 19 acmeAX>k-?)$j#lxz{pU;z`(%7PzwMn(gThF diff --git a/Train_Files/Connection.class b/Train_Files/Connection.class index a247b770345adfc814eb46d44d613dba13c8c310..3b12ab63b69fc53590653ae12588139e9f57c7e3 100644 GIT binary patch delta 84 zcmWN_O$tCj0D#eN1`8=QWr2{*oI}|sM4|6vlsN<_z!5@eOQBk-(%?B$pi39LtC-KXm!r>PxH3KhQtGB5Us%R<6~D^X$E!_c{CB?>_H7L)poN@t-c7 zod#BL-eVQDAy%>_L>*f_@#+oRJOVT*bC;pfBgl5u>`-Q>$K5n}+`}#n?^Ul^y{O?n zk4tG$L91qnDeTs;Z657(DC`kQoK8bmh;Diey&ieg2I*6Kze2ylfX5&Y=(~Hhs0TIG zL+U-Ouup61RCq)e9(5~z%=%Ts$F!2iJ>oo}Fr=$bD(qJn4hcNvsr$6y8N-1@t~2f) zlxh;^og(K@;x8vZUQU%|4L2E{wH#)|QptJ;x4ylj&r;4h%X2(0M0I~hs}iG@wcKnu z!V89k&9+IC zY*6nu^-k%+B&RJ&&RD+SOT$^qS4>&HX4>+NO3x{LtMDDG6{;LU)zR))eM_t-<}iOx zbZ@k@E827Fu>YJdE7%qrtn6v)k`;ep(S}4v#*vbha;v~E&yB1WMBACN(kHPQINC?S zTM`9kqf?RSGFKVta*8=>#)VlEEX}!9v>v{{2|Lb=d`_PpCZ!n)Hi_o<;MGf1Gaq-B zd4`QM8UOXQ6tt7n_rydn&L@(lb9q0jm2lU zR-UDe!g)ywPm0E&LhuSHAF6R>i!9mXGRd|``n@ETOZqN4$?WurA|T2?(;155bGF@W zp30~x@&C73@o2cDr_L?+uUnj!TsM83GXE-ffqOB|E6JM+7MCq>mygyB`1>gbB-hWmNlG_I{L4l%kBxDOaPjofmPOo)T$)-Q3H+Zbi)5s!+;leMp5}%* zH_3_#GUo!n@Y)++sy91XD1I%MvxNeg#HDPNX|0!@Y@@q@2DVGEOUPDs&@02ePyQbJ zg&Cn)#w994&>}awRj%r8rfB1P`DOe}Cx0-2e!nXTU7*NN<2bWq%B3inAuvm!FyU~% MC#}CTRm|pp0VBcqJpcdz delta 1334 zcmZXTYgANa6o#KObC@%8{K7)iSV|Ym0wx-88D%Ouh7w{VVj`);1ml3>KtO62n^d}| zVpEw>Rz{IsyabMAM)!-jR=->I$F=(3zy1(ed(RN7wVJigyZ3&-_j}L&_W33?WB1I& z=%uqGzK)d*WYM6^y$%~({A^UsCS@93?xV>i!u?t{Yu2J! z)M2yB6~t7~st#=mTeRFdg?6?n#6^;z!=W?419UlbyUeD}Pmjh26}BtvaM{U2y7ysi z>JhbiRI^yBB0rBg+2Dt^HYD-)xFwNugeoWsqmC<$wfJ`{9N+0cv{8J zC_EbwcuuqD9riiwPx`F^`+ziwiYE`HY{PO;SjGl95%d4l|#SbHC{IyQG+*l)9@Ba3xBw~C)(AK*?83O zHUoxt^o{Q-4Dw!y!vVuF?lQd32ZkD|ET(OVY>$N6Bk@>h`OfBOXHQ#4+~GsRM;uQc z^He5IaMEysQ-+Tjau_z8CS^FoCx*M#xke4|)NGYzpX$O{J~NzC_*`LxFAQJumBZJD zZ}`^m9p4*%&`m!ooL3lSk%BZ8sEllj)-^}tQEMpb9rfhfv1reF3vWSTg^Wjv205^V za6Hx?O_uu(1{cT`1g|^`S)?CG2c3>GL5V&rov`2?$uZvwt0Eb8u61PoX{OB?5GLCn z%BvKui{~$LENhGe9z9xGv(CR!G(-ODu2#+E*yBubSUE=CGKcCsQOfz#%0K)IMOhk{ zl~AP@t3YU(wk`@0mS{=LD@t*F(J-E2oD_5Gi_UO^JU7;#l0}OO!5MO)pb}fUm?{R- zSjm-C%c_iCQ0%OJSrwJ#h?Se7U?Q~on$9JBtAgIiHx%~e6vbry2guG?;bloK8TIU64PZas{rrV``wY|1A`1i$Lui%A@RVbLEMAC#D zEtI0Prr2AuFPC|Tj&NB-aqB@g*9WDMbyrGOxL;ri@yd<{Ft@9rdgwCjago5_d_xmj?E;fx~QKfJTnfB$qiN z_qCayXyIoz^PBAWomT#2tL39xyx=MVm#B7FZCT@F%cYq!M%Fk*!er;>&T-{4)uuaI F^A7<=4>kY* diff --git a/Train_Files/GameScene.java b/Train_Files/GameScene.java index 5f187f9..e21f9ce 100644 --- a/Train_Files/GameScene.java +++ b/Train_Files/GameScene.java @@ -72,17 +72,17 @@ public void show(){ locals.player.show(); showAsteroids(); checkLevel(); + gameGrid.show(); } public void runNetwork(){ - float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 3]; - inputs[0] = (float) locals.player.getX() / (float) 900.0; - inputs[1] = (float) locals.player.getY() / (float) 900.0; - inputs[2] = (float) locals.player.getAngle() / (float) (2*3.14159265359); - int c = 3; + float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 1]; + inputs[0] = (float) locals.player.getAngle() / (float) (2*3.14159265359); + int c = 1; for (int x = 0; x < gameGrid.getGrid().length; x++){ for (int y = 0; y < gameGrid.getGrid().length; y++){ inputs[c] = (float) gameGrid.getGrid()[x][y]; + c++; } } @@ -90,16 +90,16 @@ public void runNetwork(){ float[] outputs = locals.neat.getCurOutput(); - if (outputs[0] > 0.5){ + if (outputs[0] > 0.0){ locals.player.shoot(); } - if (outputs[1] >=0.5){ + if (outputs[1] > 0.0){ locals.player.turnLeft(); } - if (outputs[2] >= 0.5){ + if (outputs[2] > 0.0){ locals.player.turnRight(); } - if (outputs[3] >= 0.5){ + if (outputs[3] > 0.0){ locals.player.accelerate = true; locals.player.accelerate(); } diff --git a/Train_Files/Grid.class b/Train_Files/Grid.class index aecf9400a7e9353d0c0e2d983ab8756e48b61878..e6056482ceb245b110b3503b74630e1acb80ebb1 100644 GIT binary patch delta 748 zcmX|772Dj;tuih|`KkMgdss#tu+#7F|s8Wlu0#>B1+8#S71 zV%)lMfg1yX-~t!Aa^b?bS2u3lxF)rD1|s+7{&VL)XJ)=LGmp)$aPD*A{R)ual1r3> zAtJO`X$^6Rgq1c;%sTC^NQZSgT@KR~rkfrsy_%#;F@0A0ZNh-dpzRLQAN=q~rkBT# z9?}eJMil;QGua7+bNTs`M>-|rCE&%>$khsJ3_ICn*iE_Sh~X&ZhGSNC5HnQUgyWph zqzxxIrAZl1Gio?PMo~0y_uk~pRCdBJ##zHTE9beOxoD`P#`~y#j|8W0j^Cf0Q3TUt z*R#{z!ed*i1TiY8j(oD1rM4{Vt>8!-L{UMd=pL`&OR6fb*J;$kwC>z;dc~P@Du-$% zw-kRKpUUH^Ridi|@L2+z32GL_sY8~B`5+Et)ed5FgNZGBD0yffv lQnp@syP0nf1G!@%#XcdIWbbDnQf7ByBa{-aS$aMW`~x4CY^wkO delta 733 zcmX|#Ez7EqvwK>4VAs8|K+w<3v&jX{kBZQQaj$_7Pq zH}VTiOiVBm{7NKljayw97p~NVh5i5q&y>Kux$oTj&Y3gMIdgvmXUx>cmACJK1Y<5` zGzTapVWlO&0a~pb)P$|m=8Cjir^6*lXOJ$st@LP8E}J-HrPoSdVfW|q*CWgKA~w9= zWx!4j&|A3lM>dno<~po7;%JUO&OOqDl0!bdpz6<7Qe)UfxgkP@=9nQ(h2glBorDd0 zY`_VIG{c4wGMYidNlqC~b4F2=x}D43ni#)gILkT1c`FxaFkEC*bIGum8gE`L2a2v{ zbLs4z>#YA@nMwZP<^A*WNE2TnxQ zde5Dbxa?tlP_weqFYABBUQrZVz_&nP5jP!wLr^itr1#so9Iabq%XEmX*E3I7XV#*& zEfSJ9XL{mca>Lo~O&0V{6=z;ZMjzFp*YezD6bN^fkT(c-hY diff --git a/Train_Files/Grid.java b/Train_Files/Grid.java index b185fbb..e3b2864 100644 --- a/Train_Files/Grid.java +++ b/Train_Files/Grid.java @@ -24,6 +24,7 @@ private void resetGrid(){ private void setAsteroids(){ resetGrid(); + //System.out.println(l.asteroids.size()); for (Asteroid a : l.asteroids){ int xCell = (int) (a.getX() / cellWidth); int yCell = (int) (a.getY() / cellWidth); @@ -38,7 +39,7 @@ private void setAsteroids(){ if (yCell < 0) yCell = 0; - grid[xCell][yCell] = a.getLevel() * 0.33; + grid[xCell][yCell] = 1.0; } int xCell = (int) (l.player.getX() / cellWidth); diff --git a/Train_Files/Network.class b/Train_Files/Network.class index 67cab1c796e0fb652fc8318310a8e7eb3691588e..27c1709479da24c39944eb178e1f22180f14bcd7 100644 GIT binary patch delta 2883 zcmb7FYj{-E6blF185Aa6@ThDic~!~m8+0VzokF<`JjhY)oz4?0W)A9ZR= zeN~|LwnZt0YHI--1dJp|D1?aG;tQ={E6}3WM{5--ZN)etu5)KXkgxvm`)2kz_uRGj zS^If+jXrZ}@X)zE`v8m)I57qH#-bGWY4Ia1?l-X7iRke08hx@>iys?!z)8G?{)qw8 ziFo`}1Ape^>!0i0x;Q+DhqPF)-~K|MZP4PET63e`ZQ_d{er4d{SY+T44g0kgztNA6 zYD>S>VzWNmq7}C4$H%nzos*DO{bE}z9>?|=>~LZyp3o<4T0E)6E-l)%=+I)ffv2?c z9s`|DjK*FAzn|g680^zxzZP8v4roK&2A+1JTtf~zF#*qL@vIhIIsngUGk?(Hj|L7I zc;3JZ=4AOmo-&JV&)Q#PNX)agGFfeoin>i6Hn&A($GI9?0^UIVWS@7rc`&M4UNTec zb#kC>gjVx4=7B-bcJtfF%#1T zt^v^1-liqZjS5#`w!l$c-{Nm>QmDbp3WxEE!UBEAtN4?F7ZqN^5rw08UE$BDQ$hR% zZzvqYafK83tHR%KQsGTp&#IWx+|*QG7w~CgZ{cmN@OOoG@UFspn(IyQDcq>VJG6xN z^;Pw_USY9*{D;2upIB(%1BHL#L&1=#et)ySJZDDJvX($jqi=bmH!#2M#^T~)10N}z z!fAzn<70(0TJ=BpufqTEiNZ>pRrnOg1x9s!U`4b4ChgpHG-!pu*IY8q*HAyJB|x)t z0{(h0Ls5g%=21s>VGVi|K0`>M7Yq9%+u&`wp=9dHy82~d=T0GHW*TLKYj94XPlx6j z%u)CrS`_ZY_uCqbrzIi9Z$;U6tCh&Mg4l8ima=hd_y(pThMmL&L2xB^Hq4-8uDqZc-n?7Y@ZAZOJzSd`40{MM z1{U=q!@#$>`4q!?2p4!G3VHFHsL&l>VKC*E31`Auo~%!pnWs&pz!B2QOL~zev@tX~ zNxQQ+qHZLXHxS&Zi;dPWSO?q{f1BMECb2G&M`eFM>~ zLyN$+#7YwANzBjJ1XBBb2qDYB(jFv)9boBN=t-`LMBm{WTA!l;HYPrg}? zD2ro_+2tDLXvd(9$T2^3re+%VSQhQ8KD0n!X#$h{~awp5F4f=vONH4Bo zJQxe!-+12sLfVfaU^MNQmJZ*^tyq>b;NZTUmOE&9H!bg>h3yz&zL%6E zMP^L$CE_+c$$7z%oBQ6^tit}5BZ2!v4A}Dw@e4@9%Z$Nc6yp_)<$gSluwsv5K3->W zy}=GXhVSAyJL-fLhhZ?%!ljuXg2Bq_L3;ltgZ#b&e}v^yhMj>iUrH_vdSzQ{ z-8;?`8DurXNq$$}V!ghNLaxPl*SbW()(d4|IXfVi<^pJm7|pbb7>K6h_U$wlj;s8$(gyGm?>|N8O5CCq%ylVOO0jt|#Z9SFwJb|rEG1@1 z+HlJ5)Q0o>xoJhg(pvXO4>?5fZ|lIQ0lyxhC&0%{9MH?z0>>J#4nm zSUn*o^BlXN4-b*~2C?B$i9)N`(IyUbv*Qj+3{Fcddc=udiIWUba*4!Cp(KhsC@#4| zlB7Z$GF?(-uB6El86>M@u&j|G@_?kv<5bx#LuIdI%6`d`S0!7H5PMAWtRTOJ)ILTx znlr~LYgRUYi}dix3-{86n_i^zJ$oQu50oGl^zmmn^mz!iVZ^dnq8fcDmNP$ua_ir3gbAe`JaWSyGIzNr@FrR^S2ywW{DN!~{)aVim8uq6?+fT)*zwQAq-B5|AAhfo$YlL|`llTt))p zkRfHfH+VU6WIS?Z0t#hfKLN)6b{Yu&zZTeqNf&j1Oh&X!A)X)02;mF6YtlvCCDRDv zC)I)m!Qp7P`Y4MXFp1Y>}JcY{z7M;e|6nH+%SVc^5xX In#?_)1JfTYbpQYW delta 2781 zcmb7FeSDQ=8NTkbbM|g$&&IwPgN=PCjGcY(p@0L#$(P190tYk-a*R_9*hb?FEz5&N zDvB(7D>VtqBEW`#V;eFVBx*U+$WSw_{HQcRtx&?bIj{RYXAbwvKm7f+`+45yx$gV9 z?$2{}QrpB}_lHNi09=AzFRsKb(J02PDz>P&&BEurnIz_^HBvrs6*R{JC2C zg^FEz_DfaRt)F{T?DZ0Ie>8rDmMHA=;sNYe)BzO-RXnJoRmC9{Z5G;9ufxJ&FDBq2 z3rD<|gwEM2A69YHLYEpkX5qLOmnr1eUQELyDo&_4s=hy}W*$@VxP{+X_^pK}?0It9 z(=M2uXIHyY>@wFrcQ>PA_qnFZ?e^q|8`5?PVro|VYt}CEulH961g5SjP#y5wFGWSZ-D~MlHy|KEuDNwtv zcu{rzs)jm)1^B!mvclig*idg!iQgGKg{KX^q*i~AlNP!S{(xr;{)kfs&tj#)b9mn1 zPk6!L&v?<`CH%$UukZ`Jvl{B_{WXDFwe`0kURH%y3|_@+27gy}Yp~kjt14bqOaIWP zR>5yjt)KtIatp5;yn%lS(&jWaHZ+!GU0uJvDUelHyP>W+P_w$IsK~;b2B&ex;4Qpu z@QyP5H~wSrUz|1Ah<6R%!wZ5ctHK|+uAyC~w^nv>YE7#D8p@?$^|HFBM_p#g_ZKXw=#(BHMnmW7^Jq90WaIV23gB!8IAc#$^ zTdWh(x-xpA1dG`xF3iGgM6q$06A0#U=fYK#OwT92nW;~FGqprPv+JzPn6om`&dOK0 z4yR5f7E>+(#0NL4AJ~)M0kM-}_R3QGXw1^QFYs&x-2Etp+d`Fy06i$~g$NhN#4^%a zVox`vRJqak5<*13$WxYtnzxUb#k`A;9X&?P4TrlIQ5IJ8A>G24xp^O>dI%R>8&+5x zyORp<#gh$ z-GVgSiVSQaiq+#VzHM0HxIxrbhWZX9U>m!>IUMY-5Y5ta2)sP3j06hfb90qI@_-M$ z$h1(~gSe0btX2oTA$|tY2jfSMRkT4w$m7fqYHf%oZ*D+@!*RZSZ^C$cN@D7i!ggGI zkT(M5mI;e;54r6nxBJPh1%=qhgzsmA9w2I6*yj%tmX{A|v{K^`HQK1rPL0FVc!)jU zNsT(xD@WRWC;a+NzOMX3u-cKj6XrpTNgUgbJbPDSmW;C>PrOL-?bC@lLErBFHhgT`bOtdvj{ z<@Um25%gfhz$Tsi8n8ahat$LC0oYrU@`42mH@jqa|0})&9}`J+>h=^T{&Os?=aI*? zh;t?scvl~cg|D$#vuUmo8^T62oO%O1blkn4#zOIq$r*XbxZJ`-sdRo6`pO zU~;^)0gfdPUL$lPu2Thjaq?ACXzxh&QFc4>T=GgOvfoM>L%Ats-N*an)cjy^m9LcIFxzwVxk!oOT(L(!YNjYGn@-=qlW3L;}~1dDb|d$xCifIJI-Mj zhfWL5qm_O72*=Dx^b*y_uMa8vC0!sFv5)g4LVQ7S%jM#cQuN3?iIOD}Evv*UnHq z8fXZ2%Ggd!sPc7SVtFSfRTXsLl8VCoc3jG?o$PKYXYUlWV`@YT)wIMjn6Xg1tr zk%*R2NR$i=mrRV5(LrQLHZmm#7fY@aO;#X((!POc&W3M>UvCV*p5KYfsyLua$~rMk zX-qHYb2E;kxPt5Dg$K$=z()e2lK~iwtRV!(kw88P_>e9Id^cE#EGb5|j7OeK7$9)1 z5)iiQ|7n3X%pB4IG8rD3LOg%S!h|pEu9-u+OG*gh&z%Deg1=2}r;jq(0W(Sdio15e z<7yfBx_di3?iNOLVDLEoE;C`|3dG5kbYvDr$sC6}Eycw$bT{GKVJ0J}r=gHR(oT;{ pZG0(NO#e<8mrV}Z&C&TjhO-@|`rw5#L7P4F%eEQc<(&&Re*{@S9>V|t diff --git a/Train_Files/Network.java b/Train_Files/Network.java index 2e84b3f..eeac06d 100644 --- a/Train_Files/Network.java +++ b/Train_Files/Network.java @@ -170,9 +170,21 @@ public void mutateWeight(){ validConnections.addAll(outputs); Neuron n = validConnections.get(r.nextInt(validConnections.size())); - Connection c = n.getConnections().get(r.nextInt(n.getConnections().size())); + + if(n.getConnections().size() > 0){ + Connection c = n.getConnections().get(r.nextInt(n.getConnections().size())); + + c.randomizeWeight(); + } + } + + public void mutateBiasWeight(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); - c.randomizeWeight(); + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + n.randomizeBiasWeight(); } public void remvoveRandConnection(){ diff --git a/Train_Files/Neuron.class b/Train_Files/Neuron.class index ce9cf958a4345f6f6c4ea2da50b5625dbd621dd0..5e107d9653abbc5903737845a1356fefab9314f9 100644 GIT binary patch delta 865 zcmZvaNl%nP5Qd*-fN$oTP7ER;f>9F0;3#U;gIkbg0C7R1QA|{D90nYh8J0l>)BzQD z1ZmtA_kBTw5aPif;BWBY)x^7rF~(|4^y1~|s(P!ctI|D^^C&m@>DPykz*6426cP53 zM}tGe#q-B$v{sW1?{$c}c>jd=*~os20~QA@Vpfg&X{N=Z)uGMDR1&Ue?bbTv3J%+> zBi8B=Aw;K37e_6Q*~H@(NsDfq*yC`*IwvhoS@c?*_Hl-@4(D9v5Vkn)<$^sgTJ*VG zqTgY_;qtpLUZn;{zpBM*T4rk~)(}4!?TnN~Lv6K@Xw%+=neM4q#&md=C5O1;FsQl8 zHO+NyDBSXREEWkTqVbsKCbu-332JV$NK?!j%^ilVRjnx}=x|qakNcVjJk->%L9^bX zmhGBH3@g%WBJHiVSutf6t2I@&&rWtZE{`=&c&f-YAJejDX`b<1k(O6fRGep>7n+y6 za(JzI!^miJYDJ35934;JoRU018maP*C4q6K2d7MslixQ%?!csVXwqz~_-}YmWngwe zYz!Sp9mD@ldMHYTIiw3qrEeKCWVsgw-aO;{ost#W!yov$jZnq1aWAS=%o zeIXmAW|R5gTcx&`@4m&V)&$&nz8%tWr_^jU%AaN0+zeH3dfjaqVTm`$(?;YQHnNB& z^UYnU_L)NemaLd`j*HgJTv`awCOHW+;9sY@%xC|$a8mSc^68PAPl$F(>U(8Y(0G30 zb*P;EgA}>7?(f`%lfGmG0`Ey1Cw&a(-}bJka27x3@KMihQ?KtYyogI5)8uo_q+e#a Z%mM~wOT%)8WUDJO!8N%hB(*8*`3*Hwr6B+S delta 712 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 V$@o}S9VLBr#7O!$^*Zo}{{ulnI3oZ6 literal 6246 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 sensors; boolean turn, accelerate, dead, noHit; long timeStamp; - int k, numShots, numHits; + int k, numShots, numHits, avoids; int lives, maxLives, score; Vector velocity; final double PI = 3.14159265359; @@ -37,6 +37,7 @@ public Ship(Locals l){ this.maxLives = 1; this.lives = maxLives; this.score = 0; + this.avoids = 0; //ArrayList for the current pressed characters. //(Mainly used for making turning less janky.) this.pressedChars = new ArrayList(); diff --git a/Train_Files/Simple_NEAT.class b/Train_Files/Simple_NEAT.class index 2b70b3d0e3a7b70445d85c368d0217c6836fcef6..f84955bfc199d4b2e5a3b7f34041a51a5eb5527d 100644 GIT binary patch delta 1410 zcmYk5{ZmwB6vsc$F5bIb9>Azzfg&^{Sin+46VVlmG$P5eq_Ttzk&Gx_#86o+%}NDi zEs)f*m)U-4Cdb-drs=0up;O^`m)#yt%Jza2{bQB?sHw|kkB6mO?Ryn^RQ;mv_T}&r zy$Ua@OP|6ko>*ViUB9{vcy!bE1iY5^Cid!6kr{fZ-mI0<4fv3ibC=tG`OQ z{wj6&t5oi`W1mle4|roqVaC0+TBQ#`o*W5>f)$) zdGa?Xk~b{+P2BHWuR2Q>SWD#(w~77%ntkidZv9G)Eg(zqPD-huoMp1B_-%?U%;zPQjuVbic=RUkabyF zeOH1NDvCN!)@)Hb3CeVv_N+>KMiRJ^rzUY@R2c~P3^WJ_&@b0FAQw0!&A6Yo)eH+E z2jt2|WC{+llf(3JgcwIFZC<0f z3Vi~nCD#mPGLMynM`-2y6}5Z K?-WCTXa5CWlp)r;d$Ei0E5@=3~8m#nRn#I2Ou zTPZcLQgRg;k-d_p;M#0+u+gc{4h3W0IvT9y+hA;dy+rxK3#IZe6MG};t@p3s;>WxT zgzIUsZ=lI~V_vPW?ed_+ZbxWQxzZI95L_>{-avu9_Di$XxpgJ9$B`8O$-k6omXH=AGgLbs?cNN2z~)-< zFzIE}M69K38s94MXpVIF#l?3C zObL;r@4%Myk8r!~_7dqc@_1a%@`OB{r3}lEUXTZNQHF6uj=pRuiwNAKKnm0$HCjH) z^(vi~tKYP)(e^xLi*!}EMp?+1JdA7dAg= num){ num = ThreadLocalRandom.current().nextDouble(0,1); - if (num <= 1/4){ + if (num <= 1/5.0){ a.addRandHiddenNode(); } - else if(num > 1/4 && num <= 2/4){ + else if(num > 1/5.0 && num <= 2/5.0){ a.addRandConnection(); } - else if(num > 2/4 && num <= 3/4){ - a.remvoveRandConnection(); + else if(num > 2/5.0 && num <= 3/5.0){ + //a.remvoveRandConnection(); } - else{ + else if(num > 3/5.0 && num <= 4/5.0){ a.mutateWeight(); } + else{ + a.mutateBiasWeight(); + } } } } diff --git a/Train_Files/best.net b/Train_Files/best.net new file mode 100644 index 0000000000000000000000000000000000000000..2f8ad95c09282ff83e4d67110847c8c20513e180 GIT binary patch literal 85116 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π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π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 delta 947 zcmYk4*H4r|6vclZ+hBKg5m5w8RyLwoh{UMD8e=dfDi{-^SQ5xaH@LbAfweuY4SPYy z-Y7Q2f+&8VAolvECO-J;yMKTo>YatC4|C7CXWF@U=F+Ivp!egiCw;&aK6H31oVwAO zGi0}71leg+u~$*gKKDoKc)5XyL8dQn$V=9IuUT_hNBg5g};UMMdQRyR2Ad*m4>bO=gpObM=B~ zEM}w@#Z|6}R2Q$U-WaiPj$1f>g_*gbxM^m5kytERQx_?#UKcU?EkzsFZT-WQ?Y^tH zN4r+;Y-fk!fgb0cT-e2958W1lWHGVu=Bgs`w_fptnHG+k>TO=S=v6$W?_s@rk~6J= zG#t{W`MTFzvamy#gGCaD;*_Wfahe&Np@efR7A1=miSsF?OfbY~61b)03dscfDRD@) zQ`h@uC3clf=p@w1o`An)RMRus zQG>~?)4Yw8~!ZELn*4?pRd3Bv#d_N(?4971~PPBAj^8BUca+E`dvTBorQo4*n} zNh^2(4`Ayd6v2H16-r@@Cg zuv*S18NLYkHr@72{D(NdX2o8JDP~UWt7->HSrlXw$f2eLbLwJANj8;YTWR){p`|Q` z>fuN^j^&wC=giNOQ-MfD=H=5+z^eLLSBVYf+0lU6OI(%*u@sWh5Jg3lG)$-wsv2cc hWB*TuHI38MgxPZI=Gx7g3%9H(bK@>+)=YNp{s98CGy4Dl delta 250 zcmWN~&nts*0LSt7XFQ(g*)wb!*@pcf%;Q0{rfdgEbJL0)mLe_=4vx;dxX9&ulACs+ zlz+q3|DgQ-Rj4WP`UhUkL^E+!w}U%eZi#YF9}lE>B+C;%&&={dkylE*QQ@5`ALh_* zxSz!MBFDGsamrQ;iyyP*EQk0tr_N0wM3>q~tDT%Iit1odE~^T&C666NI8Y}IMLAN8 zW5qd9uQ_usvq}1uBG3R!8l$mRHt-nUC!K0W|Y7;Q#;t diff --git a/build/Asteroids_Train$GameScene.class b/build/Asteroids_Train$GameScene.class index da97f2b09c4d5e689c08946a0bf66a31dc8f9cdf..ad763f1c69371a2bef4112c5a4694d0f93a2bad4 100644 GIT binary patch delta 933 zcmZ9KdrZw?7{|Zg&ad0iQ74@)l*`EK9Osmf?veOMMX1f(N{(wMs zmV2wQ)Xo$dLsDbLgu>3qm{~S|wpN~l&1Uc3_w&5p_xb(a@1FPRi27;Kb`7_+1DL`2 zP1>%6=C%%1JOy+DK#xY(k@NrU6({<^xR_H8|3*pTSjAkYRnT1JQ zglI0tJZ2-0OR%0xQNm>?Wsd69{V=b97gs{hRY>4!q;m~2nTLGlV;$FGBMY!gc$8LL z4!kjq-E=6SJS0~;@3FE62jS5U=kILCTiW&>`p5v{zA2fTr& zY{F~a#78#cJ6rIB4h*st!)&8JZ_^@-<6Wk)oq4>6OnHwb>imGlax2{74KUf*f(Qp@ z{>26*?~X@?Nh8~!7FZmNsT{*uCD}@{Cgm!kG_lH6gqT8qXEQb|#-L2E%(lDHuF#o4eIz7 z4eUcR-=UrF(a8_!rV~B@*%x!7 zFLiZvN*Yedm(i)d45y}QB1lV!g>U4W&erC{+d1Rm}|5GE=Jwy6rJf-kzf#%vBua8qEhP zlaK96 zVTaxB)Bqav7P}On@$0Dg1B6^fvR6^;Gr37a*smO`M{!WIIiv*~Hv0#)oFm#qv$krbff2RAfb&Wj`BI5|rHnFV zY;Dk+?-|#kA)b*=i;@HV|DQ;HT5ggvtT9;ckQAPg*+zcn(eBv$^&Zk*_gCDr@sC1v zN;ga2DUt6j)AP#X2NiQcCH$x$KWPpZRbyOZ{T43Su70syT~RYvb&~69<%T->RX=k} zH@K}k{HBNeu7CJL|8Ym%{E3IVq;QYn#(eHm#NSl$ARJ9dW$F>mMAJ3Hl1ikEEd0U@ zq!KW55q6WuM5{b{Ul|lw<)}&5ENQn%8FitV18mAhc8;gy8 H<23OCdECyw diff --git a/build/Asteroids_Train$Grid.class b/build/Asteroids_Train$Grid.class index 41874f9203210cc69c562ddd5a5547222bba27ca..ad2318f7b26a6a47068de92bd0d933e15636f3f4 100644 GIT binary patch delta 1022 zcma)*Pi$0G6vlt|yf^8S*BqzSez5)d~(L&2n9p1I$J4E7Y%l%H#-t#jH1H? zFKS|9^4KvIWO{mfvLkla7VzmQhiNo#SBeFFg^*7xAH|?OchcmGUiNzw{3uy*sM2Hz z&y4d!?5Fn^FVf6{9H;$HJN9p)czA#g5n zi-1`oYL->8#Ab7gZ6aPacp&*RHUYKkr}k^O?N>=$C08du@HrFSx!`zP7ZA?IlBx)PKf&3PTVpEF$4!ci{~&Y6gJAe`!cmL|`-bNvRE>pbsAu~@9mQ9p{8;-%KsI+LxsOE1pP>{l0G@-BtbwX)CG zdBq2-&g`n(P0ddoiI?1jt?0U1=@+JUCG1?oN1u{kQJuKm|9{la*(PE8O%^XKpO~{u zYBlzHBk@`WOWIi{+h~^UxN;9WWG6Yvu}5~%DIGe6-3&{fQQ4zYxQ|nEKMV2zAIO7z zBAt9D5Al_1ztNhT(zW9B?p0gXjJCMJNnTUac5sQ;H4^>xF6b`m{SaxhPVt6kN4IY5 zUa56d2f?*k!<(G;9*Mg9ANvm*SYw5nYK1errI^;Sb?Nv2wstUzXLa4AIHx$I_zvb@ DB^}FU delta 1058 zcma)*O>9(E6vuz}yf-tQ>7y+}C$(Q%+R;vjmNL}Anv}-IQlz$srPc~j=*Pgcr8CkQ z5k;(D3|6Boo{L7^7#9*;5y|+KV2m4MTp4s>T)EM>5k*Xj3H7{bLtMJK|8wvEf6jg9 zf8Je+d>9FRbMv#yKo_rF3|*1_5Pdx8FvPH->}V=Klsb_*X0T#yd+grx*S{*KhkXtY zGhzs&CvtmJC-WuxK#)2{9UfuK6)Wl=r$4}BZo5@$#@zvHaB-R=0aAv_zFa=Fke!*% z9U5Jjn8`RCC2jEM@(bBHwy_Y?%sR}WciTs1jw$$K0|NtXV|HH?cy!j`NscSM zkebp@2za#eAq+W(ZB%=rr@R_zFRFjq;Uv}CRVKT?bd`7dtivhNZrtv6)AnzTzY{c9 zsW5-A$^1#Zxkiimi%xT$F7vmW^}QZh!Dns|GXJRJ26vbhwwRl4rGIz*Rcw6f?s5M_=awRah49|lH%8h&?@raE@V`$Dseib zorH9-L$=Z*ojQhXj7oxovR%i}#VJX$Bs+LZ?%^Hj=6$(W?cd7RnsY^VmaM*et^akW zExzM4&#OBfoM%xZ(dYS|?n3S-!B*=9hTWfoch=rl%5_u+{`FkLi@fAEg`&Iq|HJy$ iS>a{X3a@ZRv03NVr*EL36^!CpUF#HIRUB7b!u$)qh|)Iz diff --git a/build/Asteroids_Train$Locals.class b/build/Asteroids_Train$Locals.class index b4cb86bd174dd2e0c9d4f9ba762ee90ad637a25b..0d581407ff05a2c283c53a15293d1aa1eaff365c 100644 GIT binary patch delta 25 gcmcc1c9(4f4>NBV11D2Bg8)+mgE&*NBN11D23g8)+qgE&*@WJzWh08U#43IG5A diff --git a/build/Asteroids_Train$NetworkView.class b/build/Asteroids_Train$NetworkView.class new file mode 100644 index 0000000000000000000000000000000000000000..d7191fd799e5c03cd8e35e0f1a3c257388a38cd2 GIT binary patch literal 785 zcmah`TT5F(5dL-(lb(1?VvLu1X=@vc#1cPZIx)3eiIT30Tgn-JkDXcWiwaNH{da>r zIycz7Ur*LwB}0M2Su${4{lzeMbz<;Oyg`BR#9Hl+W97Z}d2CW!6M+J=|NT{Mnybcj zX?9lFq!Bap^L%Mel0Y6W$QzI)Q7D&rGh}DTH-{q061`3d_3qxu|YK?Ug0(A3Rwbg@RsB|(p$h^{63*J literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$Node.class b/build/Asteroids_Train$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..3b64fed07a3919fc6c3ac3c13ab730b04f174c1d GIT binary patch literal 506 zcmZWlO-sW-5PiFejg7HQ+gQJ~hYD>3D|l1{DFlR450)O4ZM)PhF@Yo%{aGH0;K3i@ zj}m8tr+ApzeKWiB-ka~A&o2NMXj$M4-c6dxBv!NZag+!ZwTJOcS}+;hg?JIYP(<_I z-DDxB83TKz2q@kdO4*Z2+vg0mL1DxtHLp~pvTKHB=U+Dnx?={jPdsHXR2;0MY{P)- zz($S1=yb=r({QkclD=&@uux*C4pbzE%jbzqMq(05hWa3$if}9vrSV_U)Y6E%NS%8l zb@qL{Or|nWdO~plXWBM{a~nl6>4zdsWoqGw$O|^fgWeTdB+#IZ>L9(8q16JetDO;| zg^{xj$_}9iaF}#@{^<&v{s*dldxg4xvV!+cb&e+Gx_-kGlzEB@&(PpYY*W3J^LW_7 cE+LwdbMpMASq=KXM~Gt|2Xxvw`yq~jUw(;UqyPW_ literal 0 HcmV?d00001 diff --git a/build/Asteroids_Train$Sensor.class b/build/Asteroids_Train$Sensor.class index b4cbf99d1eae49748dd7dc1c1a5cbd84e496792c..74653cbb3dec760dd78891e2a0b2e6c2b8b0dd24 100644 GIT binary patch delta 184 zcmWN`t7}4G90uU`_X>ykC1H5rh-mOqgk{6QI53LIA_)E)-a&T-*{68H+d!Rggb9{~ z1-oD}Sp<{OZqcVcQ*&yrT!vMEn?-n7f|q6ZSV53gL|D^)V{Fy&$OfW(#S`BU=R1=8 zK$@THy)lAZTDf9)t+Hu|jW8?0(D^8f$< delta 184 zcmV;p07w6%7Ni!i0|psg00{zK01yIS02KmY02%^e03QNk03`xrlN<)08D;st4dH|~ed;rb@eE`}5egNVEe*o|TfB^dffdK{rcL5Lrg#j4?h5;l3hXE@BhygqT mjFZa<-vN)4s|j8KlamSxSpk@nWC}(BoRg~xJOQAS=n6d83@h^h diff --git a/build/Asteroids_Train$Ship.class b/build/Asteroids_Train$Ship.class index 2e2eb43b48e65223a1208d2f2cbe47fb06835bcf..5f44d1d3f371f58270f73d66e04e6286e9665828 100644 GIT binary patch literal 8197 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 bm(F?q88k)*^>9qkwgkssW91@s1JwTkp((3V literal 8161 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 diff --git a/build/Asteroids_Train.class b/build/Asteroids_Train.class index eebe4d9560517d78fd35c81c04fb4e9494e95525..91a530aeaa026af20fb31c4f8eeb90fed0f672b9 100644 GIT binary patch delta 167 zcmew+cuk1w)W2Q(7#J9g89Fy|g|hldI~JFu7UgHA6vu}YC1&QS_@$PV=NDy%Wu}%h zGH@gD*cqA`8ALFY=clAHGO+joDRzdo&9SUInHY5@i*tmE>M?M!=ri!K7%+&j7&1t* p7%|AQm`rZuuwwRN;GDdV!%)15fsvsF=$2L>-44X^K-|H=2mn|AE9C$H delta 72 zcmca6^i7cK)W2Q(7#J9g8Jah8g|cp5&$^w7k$ZAFN2n+-0~ZS)10M@NgBXhdgCvU} cgDi{ii=4 Y3VD|?a5Jo6kYZTLpvtgnGC#8_03lTmWB>pF diff --git a/build/Network.class b/build/Network.class index 5b2d3963f2f49ce7418d7e7ea1a3aa3a1e561562..63aeddc01b26f40deecca2da56eb08cffb0deec4 100644 GIT binary patch delta 2063 zcmZuxTWnNS6kWU1d0$E?v@_Fo`oPjoXZoUmK?qO~Do9%)f}{e`0t1v#ie*s42c-!g zYT}2SL`*aiNzkZO3WX_9Cx~c`UYHO;O z82jpmWsqeZnypx`3aqZw4T8k7c~vi06;{_4PN=J15PCLL7p$roYC~96S-qK?u*Hha zg!vyQ4XxO!R#~$Lv}xFmc7bhCFf?w#!o?v$tgkfpIi1K(4PWR)VrK_~v-E{8HGG8* z)om@5J<4bES`KRX8i&+)+cf_P4d3Ahfy0+uRuNoWSG!=Se&m#f)0itT&msP32LwN= zL$(*>SJmI{bzZ6QJ3ty#HyMcsdfu4S;ZmnsHskm!y$Ijh$uZ&x5Jxkm!6u$V=`GX zRkNO%F)uhXL?7Hzh0f>2t=@1Bwxns2jBnI#=X6W9CMlAt0@^`wH{a1F+3jz`#1AM| zZzdMa_+%YT6NYn4hJ|A@Y}kNa*vS7Dgp@I)VnUvln&C^ zjXv0eM065(KeBOv*LGqk4r2n2U=ru)IEFfw{1wj2aNG!TxRHd0XpkgAoINDxLKgNa zr+Y~JK3Fjk=+Qfl%bnP-Cc6vdfLiX(C_l-3oJLQaVXjW20B0Y`TTv9!K`Mt0NDY0l z7xB#7SVrtX%suq9VxROT?h%&nx;snGtCEa9vG^88Re`5p&LyV0%K%N{F_3Gd7`k-~ zNjxZw=X zU8j(5pa?fHg!5>McN)4eoAW~4!E3mS6`bG0UsxkRqX?SC#D$n5$25Woo%3$W-YqA?YJaB~cnANmhzWJ`lI8p}m$zc5=Uy&LWy8gH@YZK>X&hL1En^jZ19$B?|A$%`=1B_Cm+Jz&tBdzf~-i{uZ&7wThhqh_gH|EOG6S3eLUqo61N% zKu!{=O+advR)JP&} z>W|eb*29F%D0MN~h}2)ysf#4xXq5VJ%#A#G7Jtr0ap^B!jG=a2CXf*@ONnvqf0{}> zk*3n0(8H0gixIUrpuC> x(pMe>;zzQbvZ4obF(k%dX!i%&Az|s)NY6-i3K%Va^j+sHG^n{x+ac-;aZ=PoasZ& zG=1p#VAC{RZ2VwtiK2^28i`jjZ<(ehnVOR1wTp^^{oiGA{NR`8Jn!?KbKc)M=l{HG zryiVQ?;6;)1Hj{wzrlXPtU{Jz^Ve8!!8fYT;+)+g$gEgg_j+APePhXtruv4+^O2@- z-O@5EHVRzjO-+qWrT*y+%T`4EOY4^}t&7ZG6bgmx*o2q`n*|w<2-eVsE$XNx-@Hvj zJHAx|mMrHE4d1~hFfI&-7ufL_zSpo5ohoQ8k=?4+>NEeK;Q)SAE3I<^Co~+xF9Lf( zVMSGVMN?x#nI3XV!)YuMm|hJ>rcbp)a7GzzFBkqn)FF;(^-IFlD+2-#Wf&{*uP!VZHu; z^)jzpa7$&|cjYGuoDUor@WQzC=l2#zX~XSC@Y z&(5pE{wxhYA&X8zwf(GSddlUvTI~sP?ToM2JT-Dso$=;yt@kc}u`O>lV`*#wUuI%TCqz+9I{e0Sw+{?k|Li=s;uRH zy`;-dzCS?c(-e>1(k@OCay8Kqt6W4k8!JeYZoJK%fucN)-_#i2IN76Wd_Kon7GxvL zWc;pH`7#Ri#+#%Tui;Y)%q$U9VGZ7eMOL!ZxVNl|dvEu7GrOstq3qgF_SP%Da%nh+ z^L*tY)H=@DNIRw-7ixlSxLDbao|>XIT&^k(#BilJh8xCcz^9md+&gFZIffOI(6@P1~==IH?L z^GuhN88X+x>^8Pv*M<%mO+W_P#ZVJy6JtfYm`E#@%A%OqJ0MlG$;B-d5J zlyQQynYz_M3z;}T&>%cgM8IPBr3AS$76mdcKBgzAPar^L+@ZCxpcF}Ex^$#S8r5JR zl9>aTOsL!hx(uPeqN9tX<7fhX0=@K`mLNNK@2Q?)E(1*O^M(ooGL$nY&|#_6Zh&*U@}C9o<95-CS#Q2 z9Qxrnv-GlMA~c!ALZ`4jPh*6Xt2c9KVQOmbCU?ugWpJTb^9DnPfR{|6;ymT3S0 diff --git a/build/Neuron.class b/build/Neuron.class index b4da8353047d34ec35cc62a4c0aace4582c7eeae..3a1c664b8cc719af104d2350d0713a2a8de1d1b8 100644 GIT binary patch delta 968 zcmZuwX-`v85Iwi;YvJ`lRj8m=Y(r%!BDkSYMa0qs14`0FY&7aqDimnTQi+wss)>mv zg5X7Q!L^Dj%KE6FxT407#_#$|jMHL76Z4X}=iZq)_sqX+-Q( z7cn$Sup>)EGyFRE7?K<14!NLN_SY9w%fSW-0kklvJ;%suavZr13LX2V-ojE-+GKxS zz~?>gDfi0lwH|MMLy#K;YsnP}i;*UR;hKa!aL3SqgdX%J;wEnEaEoEV{57snd(h*P za0hp}PcXB4yjw772k}sc2YgsCsvqGo|14NHMDR4mJj7tksroBF*yi=u+jDm(;5ma} z&d)D3i-=%E!YIbLMQcxrU?R3r7)&`%UZyoAL=ctm0#m$8Yqh+@j1I3DQsSiEKtT;L z23^56k4(B=V~Bs%4ziT7kZ!FyJOBY2YGIj8f!AS(qA9a0iq@Vu>WIT575_ax9ScON#P7|5V7JADb%R1>T? zNJvE~NjOSK&GmY>u@Xk?zzS3$3zaCqF7ns#klw>w{JVZLt0imXYor`uFR|_8`z0qk z5I>ueTni7=SsjV;Ae+`g)bos_2G$t&48w|E;hCVDK?deol2`Oi^N;ca#EDACwkUifPk-WfJ=y5LI z25ByKt_?`UC0ypEhV*cM)ijt}(oCYiI*tTFI|)fz0(q+xT+Pdm83or%G^4mNjfgvM z9HuDlPvXg=?t`1;o-T)bmz*g@wRA)oBPha_uTXD@V#iJ(D?E9B-U4Av#;;K`_K8^r_43hU?2ZO%My~J$~IFzJb3B>S>BaRVKsZ^!KFqU-2#UZ7LoC%Huo{K@HM47@%173*FN}e>0Vevy5V%ekp zh85D@J&>WJwH0J0&}!EZ>Pw(A>b7U{;^w|kbR6Y&{WzAziK0UV*=*>^u7?>LkdKX6 z1UD)vk~=Gd)mTHG8CmE?8klIx@K|bK!DbX-D@suV7wYIr_2N^8mu(XvZV@%y#&!^@ zmOa$YE)nOO*zQ!uWNOS(Db|en*asWED;A+8W`EY)zy;Y=D0SJvuBaBT`Pk7EoA61X#ghuM!cJSEqrVN`>rVe&5} zU;mF2nI$CybF8^-+hL@Bj*~rs9Gs+WpQ0&F!+|q2MIT+{EIjC^`36!~ST)-}Ug0&> k8R-UZ=pKw}+wqo=juce9BP3Dn7DUYi^+b42bRA~?0MW(9CIA2c diff --git a/build/source/Asteroids_Train.java b/build/source/Asteroids_Train.java index 1c75428..797da2e 100644 --- a/build/source/Asteroids_Train.java +++ b/build/source/Asteroids_Train.java @@ -149,6 +149,10 @@ public void checkHit(){ if (distance < size/2 + locals.player.getSize()){ locals.player.setHit(); } + + if (distance < 100 + (size/2) && locals.player.accelerate){ + locals.player.avoids = locals.player.avoids + 1; + } } public void explode(){ @@ -326,11 +330,11 @@ public class GameScene{ public GameScene(Locals l){ locals = l; - locals.level = 3; + locals.level = 1; resetAstroids(locals.level); gameGrid = new Grid(50, l); locals.player = new Ship(locals); - n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 3, 4); + n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 1, 4); Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); n.addAgent(temp); n.setCurrentAgent(0); @@ -444,14 +448,14 @@ public void runNetwork(){ } public void runNetwork2(){ - float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 3]; - inputs[0] = (float) locals.player.getX() / 900.0f; - inputs[1] = (float) locals.player.getY() / 900.0f; - inputs[2] = (float) locals.player.getAngle() / (2*3.14159265359f); - int c = 3; + float[] inputs = new float[gameGrid.getWidth() * gameGrid.getWidth() + 1]; + inputs[0] = (float) locals.player.getAngle() / (2*3.14159265359f); + int c = 1; for (int x = 0; x < gameGrid.getGrid().length; x++){ for (int y = 0; y < gameGrid.getGrid().length; y++){ inputs[c] = (float) gameGrid.getGrid()[x][y]; + // System.out.println(c + " - " + (float) gameGrid.getGrid()[x][y]); + c++; } } @@ -459,16 +463,16 @@ public void runNetwork2(){ float[] outputs = n.getCurOutput(); - if (outputs[0] > 0.5f){ + if (outputs[0] > 0.0f){ locals.player.shoot(); } - if (outputs[1] >=0.5f){ + if (outputs[1] > 0.0f){ locals.player.turnLeft(); } - if (outputs[2] >= 0.5f){ + if (outputs[2] > 0.0f){ locals.player.turnRight(); } - if (outputs[3] <= 0.5f){ + if (outputs[3] > 0.0f){ locals.player.accelerate = true; locals.player.accelerate(); } @@ -525,7 +529,7 @@ private void setAsteroids(){ if (yCell < 0) yCell = 0; - grid[xCell][yCell] = a.getLevel() * 0.33f; + grid[xCell][yCell] = 1.0f; } int xCell = (int) (l.player.getX() / cellWidth); @@ -596,6 +600,34 @@ public Locals(){ height = 900; } } +public class NetworkView{ + Network net; + ArrayList nodes; + + public NetworkView(Network net){ + this.net = net; + } + + private void initNodes(){ + // for (Neuron n : net.getInputs()){ + // break; + // } + } + + public void show(){ + return; + } +} + + +class Node{ + float x, y; + + public Node(float x, float y){ + this.x = x; + this.y = y; + } +} public class Sensor{ @@ -683,7 +715,7 @@ public class Ship{ boolean turn, accelerate, dead, noHit; long timeStamp; int k; - int lives, maxLives, score; + int lives, maxLives, score, avoids; Vector velocity; final double PI = 3.14159265359f; Locals locals; @@ -709,6 +741,7 @@ public Ship(Locals l){ this.maxLives = 1; this.lives = maxLives; this.score = 0; + this.avoids = 0; //ArrayList for the current pressed characters. //(Mainly used for making turning less janky.) this.pressedChars = new ArrayList(); diff --git a/build/source/Network.java b/build/source/Network.java index 28a339c..b4d2fc7 100644 --- a/build/source/Network.java +++ b/build/source/Network.java @@ -175,6 +175,15 @@ public void mutateWeight(){ c.randomizeWeight(); } + public void mutateBiasWeight(){ + ArrayList validConnections = new ArrayList(); + validConnections.addAll(hidden); + validConnections.addAll(outputs); + + Neuron n = validConnections.get(r.nextInt(validConnections.size())); + n.randomizeBiasWeight(); + } + public void remvoveRandConnection(){ ArrayList validConnections = new ArrayList(); validConnections.addAll(hidden); diff --git a/build/source/Neuron.java b/build/source/Neuron.java index 4e11a59..513f3b6 100644 --- a/build/source/Neuron.java +++ b/build/source/Neuron.java @@ -62,8 +62,10 @@ public void setInput(float val){ } public void activate(){ - float d = (float) Math.pow((double) Math.exp(1.0),(double) sum()); - value = (float) (1.0/(1+d)); + float sum = sum(); + float n = (float) Math.pow((double) Math.exp(1.0), (double) sum) - (float) Math.pow((double) Math.exp(1.0), (double) -sum); + float d = (float) Math.pow((double) Math.exp(1.0), (double) sum) + (float) Math.pow((double) Math.exp(1.0), (double) -sum); + value = (float) (n/d); activated = true; } @@ -130,6 +132,10 @@ public void removeConnection(Neuron n){ } } + public void randomizeBiasWeight(){ + this.biasWeight = r.nextFloat(); + } + public static void main(String[] args){ Neuron n0 = new Neuron(1, 0); Neuron n1 = new Neuron(1, 1); diff --git a/build/source/Simple_NEAT.java b/build/source/Simple_NEAT.java index d858374..ef4ec4a 100644 --- a/build/source/Simple_NEAT.java +++ b/build/source/Simple_NEAT.java @@ -22,7 +22,7 @@ public Simple_NEAT(int nI, int nO){ public void addAgent(){ agents.add(new Network(numInputs, numOutputs)); } - + public void addAgent(Network n){ agents.add(n); } From 3e8cfc428e0eb956166b772cadd23748f05568f2 Mon Sep 17 00:00:00 2001 From: Sam Carson Date: Tue, 9 Apr 2019 01:46:46 -0400 Subject: [PATCH 4/6] Fixes --- GameScene.pde | 2 +- Simple_NEAT.java | 4 ++-- Train_Files/Simple_NEAT.java | 20 +++++++------------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/GameScene.pde b/GameScene.pde index eba679b..3b097bf 100644 --- a/GameScene.pde +++ b/GameScene.pde @@ -8,7 +8,7 @@ public class GameScene{ public GameScene(Locals l){ locals = l; - locals.level = 1; + locals.level = 4; resetAstroids(locals.level); gameGrid = new Grid(50, l); locals.player = new Ship(locals); diff --git a/Simple_NEAT.java b/Simple_NEAT.java index a57dab1..d17756e 100644 --- a/Simple_NEAT.java +++ b/Simple_NEAT.java @@ -119,10 +119,10 @@ public void mutate(){ //Should we mutate this agent? if (mutationRate >= num){ num = ThreadLocalRandom.current().nextDouble(0,1); - if (num <= 1/3){ + if (num <= .33){ a.addRandHiddenNode(); } - else if(num > 1/3 && num <= 2/3){ + else if(num > .33 && num <= .66){ a.addRandConnection(); } else{ diff --git a/Train_Files/Simple_NEAT.java b/Train_Files/Simple_NEAT.java index 72566dc..d68fab2 100644 --- a/Train_Files/Simple_NEAT.java +++ b/Train_Files/Simple_NEAT.java @@ -4,7 +4,7 @@ public class Simple_NEAT{ - private ArrayList agents; + private ArrayList agents; private int numInputs, numOutputs, genNum; private Network curAgent; private boolean keepBest; @@ -15,8 +15,8 @@ public Simple_NEAT(int nI, int nO){ numOutputs = nO; genNum = 0; keepBest = true; - agents = new ArrayList(); - mutationRate = 0.60; + agents = new ArrayList(); + mutationRate = 0.60; } public void addAgent(){ @@ -116,20 +116,14 @@ public void mutate(){ //Should we mutate this agent? if (mutationRate >= num){ num = ThreadLocalRandom.current().nextDouble(0,1); - if (num <= 1/5.0){ + if (num <= .33){ a.addRandHiddenNode(); } - else if(num > 1/5.0 && num <= 2/5.0){ + else if(num > .33 && num <= .66){ a.addRandConnection(); } - else if(num > 2/5.0 && num <= 3/5.0){ - //a.remvoveRandConnection(); - } - else if(num > 3/5.0 && num <= 4/5.0){ - a.mutateWeight(); - } else{ - a.mutateBiasWeight(); + a.mutateWeight(); } } } @@ -185,5 +179,5 @@ public static void main(String args[]){ // } // System.out.println("\n------------------------------------------"); // n.breed(); - } + } } From 989718f0a48e312e09ed484b338db33852633099 Mon Sep 17 00:00:00 2001 From: Sam Carson Date: Tue, 9 Apr 2019 12:55:56 -0400 Subject: [PATCH 5/6] fixes --- GameScene.pde | 4 ++-- best.net | Bin 85116 -> 105805 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GameScene.pde b/GameScene.pde index 3b097bf..6f04c7c 100644 --- a/GameScene.pde +++ b/GameScene.pde @@ -8,12 +8,12 @@ public class GameScene{ public GameScene(Locals l){ locals = l; - locals.level = 4; + locals.level = 1; resetAstroids(locals.level); gameGrid = new Grid(50, l); locals.player = new Ship(locals); n = new Simple_NEAT(gameGrid.getWidth() * gameGrid.getWidth() + 1, 4); - Network temp = Network.loadFromFile("/Users/ryanwalt/Downloads/CODE/Java/Processing/Asteroids_Train/best.net"); + Network temp = Network.loadFromFile("/home/sam/Documents/CIS_365/AiProject/newRepo/Asteroids_Train/best.net"); n.addAgent(temp); n.setCurrentAgent(0); } diff --git a/best.net b/best.net index 2f8ad95c09282ff83e4d67110847c8c20513e180..f3956b3110b3815679758ebfe07695d636521835 100644 GIT binary patch literal 105805 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 z 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πsV)U$9xNAZ{X3>>e*Onz6p?iD43<%r3weH$UR%}ind%*bg zd69bhENL<9XBd6b%|}m~jDm+kWS@B9J`^GePfvuR$aG9;$l1xAqj5J-3UJ($^H9jI z4-19E@jOHiE4T(2nT{1t-sjiD4)<2TR6W4RbWGPG{=!zA@`y{Xengm@heGn_Hk5Vm z$=XDj%06Htvo_V^Up|cOjGGXC2PQv7GHWY0*jHxt3D-@_3!Z_H^H9i?+<~r*_+TsU zWeC%}BAK-fGcQusddu3VR;612BeS+bcXP8FEo&4kui$=!faZL`f~(0RG3DK2#S#4^Ch9I(OLdhiB(K16L_3TcI$he9sRTa<~P zh7wAY+QRCQoQFcDs_mVZgpbJ*?|9}B6EX)3H8U=pj+Zy6JOeebkvZVs*=|O&a2hMB zX*30lJQXe|8QpbZ6YdZ_w>5x~siIM^-4``nH*x1vk${n@;;b(*;~vqhO}uXxtPLni zf0W(xTbsRVa}+0@5({-$YnSuv$avFW9Va{w(F$Lk03%byZTbf)7A|EArD_}P03%by zp9lP}Qu8oYa{Mr0WU5#*cEP&c)hs5lvA>TnInRzbC+%Bpi<=mShVUnNhASU%IaY&QHbLdQSw5%qVw0S<`0<+n+*l(@n_45)-_ZENz!M8q3hx7N$x)I`p+BYUbg zEx&o0#l&r9JqCP9A>{U5}(yPm;fw4>8Iz{tc?+&FyIzx6C88QW+G z7@2sUE-N>?gHI5tf*Z2|t0InB_bs~mjBdx;sBjGvz{tdN@!6*4bH{MqEN?KA1DSYc z?e?_xdWErI2gpwq$;8t%x3B5w02Y%3Jgo$bOgyblmznn;f-$Qjnt;6`nvlBdY6ml% zJJVW=n2hTUflW(S)7v~6*UfWn4A|Zi*xd%rYuE4vC2>d~vlTuPn4op+HgjFpCU%;` z?9N{ZOyh_B8{J%tZSA)Y3jI!C-9PCTp1>2AWJ>pZznH;&yM)pch1+Ej|-hR(Gf5e!e-Vlytw2M zZt0H>%K%d&u!zRTznfH9tT;$|uWK6uJ8V{J>5u0SN$d0iuxSw3rH`r3U-2q0HU9S> zz_bahFj4ts7o0^)G#2*+tUZAx8=ENI(q`)>anqj+SVsbTR(5&R&*KPBO9@8W}7vD84-ng3>&@A9dA=n-;G&-btkaFwf8fe zp5a2Ni2}fS5?JOhyWce}!*bt#n4;x8JK{0cVrE4it{ZI(mulraJED{Ey-P+Si-~W{ z^8l(T4?E@Lq|Mw98c*#!1)veU?M zc$-R;DovqoAp{mTcCKb4KAuYYeTOv_InR!~6wLQ|w;C5ZxAk|x<`A}*N8j!5AHiZ` zs}9V@iXkxFtbMy@gs_;T+dep#QHm$9ClP;?>+qy1iC7C6zMN-Aj=1b{tIEf9>#AxD z*gV44!}nJ2JiO_}lRLsHfl>;AjmViX{r&@N>-J+jV2cPWZ(v;~g+I8ZX@i)_VKIUE z&*qEJk(Q%51Dd1UBkRR`Ww& zTxjf$k6*%2w69`HQaIh;m-Xa4 z6cQFt`zRK#9!uOuZ2{~#Vf(G39rmjgYolimZ33*G!1R{=N$A)H7wWXk2QYH2eZOd+ zzYbnq5#6aO0PG!MD=n^3osCaCB@xd>fHe}BmBBopbJ}d762(!>9P*jKK9)}^NF9Wm z;N;FEX5R=b_ssVTukog*r~Y~fh5jV4kDfihOq|2o#G@}W+q8+mY9FbdsA-K0^?DZy zwtob+w8Yf^GwwI>u>iRLMb1MZ_ZyveMPf|S`oMm`lnL8#RgZ~jcx_PJ=C2lDtq5#b zZ0XaPxZkLaWiVUHc_?I>@aFF;>TDB=CwyaUZ3)}sx6kKmV2oDxgd9oELm>qbdxm?g zz#Y~0F(Y|*lsH~bWw z%gA{sWND>-!}OMOz_Uu%I z>z4ZGJi_EW6q0l-C^39G#taQ%;*#@FNJ_!h=|@|d5K;k`k>xxTvf-}M4ZA7WHjY`E zkn>Q;7?pD+7Ux*Z`ta5iu(=T}73v(beu(!4>Yoc!w`m0CVB9;*JCU_XRA)0IWCnqy zfBO|4gm-6&&Mb5-2;%~q= z+yql&X2K66FyoTw62A!;8(h{2Y>@=EtKj=P>y~pF!;Q?wiYBlNq2>D(!dRQge=$?H zI0DmF+q>*V6pM+ow^c!*i3E0PoUNI{U0gS%Yo7s|OJJKn*Zgd`I{~)k1mvjp=EjIfUPF5!38rP=;5tEh0%3@ zttGI?op1CCp5wZC*USKHJ%KgnBxV`li;vWs6ORGgL}0^y&+HM@axU{^Q4C;P32feS z<7#hw4k!t^^#-sV1eTn=NoThkTQ|`p(@4N}6WF9yLk9OAj5|b<&U8pFfoVm!jqcMj zhr}mN2HSoDYo34f>`{CWr?zJn0hUi-opZ0u942B5rLE6HVkYO=k$|q6PM;%i6AaHX zQ}i*yW-+pR-hF=-qq?mx1KUXgYc|OAeKr(h&)$3otdPKB+Du3o-vMKHo;m_{j=+?9 z_iFmHip3UuF8OlEB8F-1s>v5O+vih8h%lpTGh_n!2^yiaTUx8gme@Ca?|D z3=*Z0Cw zuzet~2LEfW1$Zk^pl1-Bjs567V*y*J_+Pm?*uIjOujIk$TNqOrBLM6NffXd2 zE2+mLMD(j+0ARlfOtCp`>1{lz(h2#@!RRl6&2|ny{^26EmU+nJp(XR0&9x$p0qd?W7=yY z0TU9~z>|4n6t3VVcojm%CFj`@!|&F=YjM&ju3u6Hm?mL6zWVgXYqMCJM1{FLE$7*h zv{pTbufsU7(5U_Sg|-auq!S(=<8N>j%E5A-)s>35J|!N8bM# zQD@z<%XGR2d%c`zM--#S{O*ERS8R?Y!9bGp?1;Nn>@F58^^#II-sN1%?v)?SL zVw)g-RSTEoRC*EEsGTaiYu@6P(#FbwnGsmGvf>_X_p=zSbb!J75?IXhMeX-zvzX0E z-xRP7Ah02#{B!YhaG^oXumj3@cI4=q%F|2nDYm3{;w`|e2%G=2K|^&~lAriB%?Ok8 z>_`Vm%&vB6Y@uRm+E1_zBW%Z>^mB1H#C2O|1XGQiXGf|mrzdu6=@3QhV8Cd?=J$2^ zyS{%}8$HF8+4SViipssa$iD?P0+laCNz#Iwe^|I(=Z5mmu zSV8YLU}Fhv?Vje+ZN@AnzPMvNV6Frfc_m6YsuPQeyx)HWYyyF;Q@+qPc_y}L8bDT~ zGMT{KT{6Be!SkDBLSI;2k@M`xvFKi%(p&2G(kCAhUIc8$-8;FAX+kK0SxnV2E5a!#Js`afY!L+3kUG5NPY7=5nI&-e zkn`-wL&w3&eh)FWe*0IzVhP*ipW$^C$5>1<_b@XJN`I6+RW!Nzv+=eL#s(L@2U{{> z(_Q$);I1mhJg=_@Y(9bA&G=Gmi%+qsNfuiGOC_*_CDALo;)4;jS)c}38iAe8)u~#9 z50u3zxy<2X34!HS40(7Xj;)(G-eCaPmJ!&MfiAJn@UdRf^_3f7D+%m*r@OZ5qj5`< zzeNI;MPRcVe#H2;6nbc+7GP@#Y|E)$zZOean<%a>3$Ppl^FCr-zG@|l(bmVe0=ALB zQhdA7J@DwI3`;%&wuQj<@a~vid{ClJjN}(z1It{qXedvx;w972rkqhk~uD%ATZbGsZ|plSd8}jGze^` z3Czc>%Bko!wq3ajYg{U43Cy}F@N+0W7)ine6@V2J*z!SzcAn2zo5;zI*{0_StXssG zcr(28D*m9#Y|~2w*0v}mdagQdg3g;XDD(<}1>FC%M58r}NfJ%rt}r>zjttxVhT4mV zB_(1$tV_<4OfU!AQv%a*FZ??Pj}Vco@G%&Ne|}z6x#t76S zmez)SC?r?&A9^TcH1ka%DgXHz6a^>dn?jtJ1_`Om2arI?c_?Jm-+}L^d9m%IHOqAX zBl9frrw#)QUSmwK^a)^c@~o@jc6C#5Zza|A28_(Jg73W?{}-PiN?aaT0!HRpE1Uc# z3vj|N(%%EKnw+OS{!QFw)F%(ut^f6JfRTBYr%iXu>h&xp`e_JbR?gENJG*T0d4t#R z{=c^FJg%nhdmMOVN}2~DNl2Mf(s)lrB&CociIPSnq?DHMwBQ*D5QIju@FkA zo(vf>M935}{jB4x`~Cc0>-_n=p0~C4KIfjj*WUN6E~6jCT{oI%&Gv2XwE8eMI&G!- z-)I8W9y&&{iRvyqlW5=3f<|YMPnp-+>Apv-kiF`!1B|9)Mi<-LxI6KTH8g}*Dg>%M zp0|6FF%&Z+(aZx2|FU*kq|saFX3KaC^KtnFH* zm%chaD57GydSEnbn>Ey9Yo$C!>tqTuu0XZNhyDq_V^w)(_3uJ_DT@=u@_gtQ_ zA$Fk2!9`;{lDP<`$!*=JWuss%Qq@ARe*I*pxUEW*?ZAPoH@iBuhs#h z$=#o*ul^U)`Dl#KY*_aMsyz~qTJN7KJ#`y3>o72y+zp&`XHCdVydXK&KmRg;YL9*w z!+iX-uu;n|^B@|{0h10Ne-*%A0Xb%v(LG=^2VDKDx6Nu?TO>&`@D-3iwMVK>wWhww4f;4c%X_VD&i2;Q|H*}BIMAR0{-N4UD(D#3(Z6!vyI zFq$e_$c)py^91{5;>~^DXsT$D9IDzCUt5q2Q+I-BG*ztqSl3~~7VO)htsjBWR5AME zBCWAFle4likX8s(dt5jc)!hxha+JjST?a-}#pt(Zb>+YFjf&P~*a4%dVzqCxWR5Pf z!&#Gn(Nyu_>wBA}A4}2CIdGgNQ0=k#@`CXdIQL34OS!v1Q$^?4(px|AY=E_p?1N}D zRXnsY>6SU>3yjYK_`+PE+GBaByUhnYIAmPixVP_Vs;J;z88H&ScVc`?xslRTas7kz zVeYt_XS*$h!(f4GkBsRfj-TtmU$>HyQ!>D4s(4WCbyhE&q9soYA$Jz|r4YG>Hi=dU zAB|~e$~{@v$i$`5B6C>ToM+ZKS==0QgRtF?)l;~YPH+XT^ji!oy zR>f#-{lqg#dP^Hbqp9M`;@C}daFt=yue|_9Q^mQrLJdu3@zJbrd2&-UO%=y(H;K;2 zRfch^&Vpz!$q-Vfs=y&m;<<{M=?gxCOUCCsVe)8aJg*=LF-oLdM~ zd*s{Xl>Ee$fSF+fJ7$4j3R&b+SQ#IUjdo?sfc+tjcAV~3+1{ULk}B)2f0;nFNA}w4 zhm-IO&w5%vU0@waG<*HT0h8bH(M0M`ApIAp_PBGm@Vl2W&#c>e!37ccrI5mb>x{Jq z^GwVR^#Z0y8uhxl$YpgX&)AMlFmVY~drVfmDqCp5Ge)x$>=Fd3J$mXsQS0N)GYPW| z5;K8nkFm|Gde`HG&v^X%&48YyZ;_%T4;wp-miG)^G!UrvP*O_!l)ac|qBmmLT?tfs zcmyOGl%(*?`s@g}rvlX;V!h3BDqk_$r%l{-(iSe*BT1u|1N$WojzTs( zDht>s!g{Q=iBrO-UUK2H7BDly{yQ@?X)&%@l7}a`yI@J!N=LD5odkyv{tYHBfohK~ z^E6)jzvP+7TPp;ZEr~Xv!p-tJp4>Cb!eELPsP-6is^_yW_;si#emLxL1*$zJ$(^cc z3d9RCG28-}BWZN^p=^ta|2uFs9SO{tu$+R26L#PpknstJGZleqkKQurMtgAsCE62W z3T!Hg7F+95I9{59hM1iJHl47qYdm&K4)8;e3`tuB%$+bvok_|PTmhLbe=L9U20@WU+8c8EQ_T`!Nv#$xjqDZ5ol)q_Rxr~i2Kf>Ltb%b4<{WMln zdeEV;5mHcrUkXv5AG=bF)1YL61=r{X60L9Wx@=A9bE>lIH$+P!thLWhyF2gszFDfu zbC)-Tu!va~7i&+$A%q(nK(x(-eawz7+}?o9XUT40TM0XJet5GHPBpA)U;wb~lvz0F z#dYDMNiIYm0k(^<&!IE+YA(e_72KnN?IFxS+`Y#NJVa;Y-M<6dN0@SCeQjDRAB~-( zGaOhBVNAdLgsKwk+o_AUfE^_4n3s0kDNI2b6O#*nnZPfFSoXZ)xEasd*?IG>LbQAm z?O?e=@1?jHNnY7&0xKZQBjo31bv#%T8SQldcAPNx5iN~=xXLijx3>a2Nm%8h&p*oX z^0M;#;oWM1q7avXW~(aO;dN6P4qHWmqL7cSxfPRfzreZ_1Oh81joKV;-corT@2UM~ z_!EQzMIqf1*KI4Ef=n%OC$Nho+61j!mF^4iX59`|2X=+9=8ZA;$l(fylo55 z*r5I~!0r;3Bwqe74YNTus0X)**An*fMWDx=7dX;WdX5mSp0J*EH9W22Lop9c1j zu+AGFB(EKZ(Mm6k0QQ)$jfE>Njvj>UYqBb^XN2|ZZRsL|XIxBpZa-iz2;2Ou8{>sb zn<%qgDzGNP!hOe?AMc4nSbMMzSTkYAB93MT<4BqI=39WhCrm3Pw!H$bfRa`N?i2En zFuTn!7C(sO8G5ul53- z=2;aV@B*esn8&B_zD*Y~n$E&VU;_yA%ut^1aE@ozH)3A_GaxKN+4*MCHDp>_T!9TH zY_QDJhTNY#lgu-Kji*3SNKN~fLFdQwj4?1849ti`TV@@5;VUlUk}bEN0y813i>YLV zp(jRjp9jgdKv9UixM@ytD9_lSWXO>Oib76C6fgX63|ZgNu#FWc3OPC|)@|fYWIL?+a`SVQU|K&%%)J8D9zOAAwu$$6#wZ%R2R4&LJC@(uNW&JH|4mz99)uZ|w4bynm}inHF;&3k z5VqZT>MAuop0Q@}p1`~byYn*f_c>*rl@5+N4{SbR-7Fp(cEV(vH9p3DEd2>fsyeCEHE;+muOC69K_r@_i;k9O5YL$Qny|SO_@$5qb$O`{sW{TU zzL4e#RC}mx%uKx77aO%4IUCqA(x`2x3&z?`*r=UqXJBE3b&3g_-iFVq*djt1SOj4` zJmM<0VKylFb2SdwD#BVLEB(H0#zuAOAj21^_890M=a_(}E2T2CY=Fg(XyNL8LwtVl z(L_2fkAcM!W~d*vCm(OU#8adVEP=4mcSpVt#P4=RPfx=lE>P|9bwgri#y7mY&$GA( zFquR%dDm5Lj9O`#H9Su(x9sM2(pIh^id8XJH#*ayALF zcDNX^PW{fp5OxywuEcG@ipAJB&ob_*&m?S4#lrs*;L%HixOXR%WfWF?GA)>vg?L@d-<~sq8%a3 z`K0Jc{5qbAcWxK~>=sywhN!U8T`dYxB=ebW&i1$Kw9&p)0;hhZM__wTyG zak@aY$D$)&kEE7jv_M^W%TnN%LfT|iOE!4$Ofp~P2CxUD(dPE?G4Dd~f>@mU39NxI z(P8%rM?7g{On3YO_LQ*EkC>(6t=Q;xS8l3#PMFOer;~N~x-J_rVIV|%MVLkHfD+jw z8146egMhsu%*eSYV=R7o`Z!;BgjE`c%*_4xBelb2((rSfoiB~Zo@X%+jp4i`#R;mU4cN~F;hCYNp&Ea0PApC1a- zpgyZTrC z!)$&r(xcbZCy5YkGGTYOBo1xF<4tzS7?{Zg>ND8uxQvy-*iDY0aNwnI1^#d$h_(rYH4LlEQ4PlcH8hFb(V&5io z`UWhTFxjTuVH%@&#+V$@0=Ay8>KP4Rx=TlDVwDaop0JRw@_!0eVc+ChWq>6THev9% zKUW)hCQ4h|6WAugKAy0<^*|4YFk4?ASSn#ttjivq$wt;cIsjNYVaD@V9|ljh*_lwgjUwdS`k8+d-lQm}i@ndErP~{JDF&n=rSu2&E$FB5v|c1ETFEOroe= z=ZyDMGGFyGu>FK}lpP!U#T7@ocDWv~1B6Xp!uB)A^EYN6hSm)rFjPgksBa~}gcN}{c~>9qM0HY!s2z|G`^ge`b+V4^+F>u+(ka(zR11lkH)JEAZ`kr{*20Y{DUNK=!(RMEv zVd^gW&k|0yJDw+Op!}FI2L@m?uUhyC5s=DY;XxCH7mUc8Uh+a%rc z?6l;bg=?hIIp4#=jdC&CrQ>!G?FM13@x2=5aA(AbJj;Pq681jqsz%2)9Kxuw9l)vy zo7#KKj|n&FJbxKnUZSkHmHmPt{)3J^)dq?fj1~}m}hS4#=?i1$S)wg61 zW`ow}wjKxeh_D^Kj&v@+!ViHNIUCN&1?n^8b|_pfn#(iM8CmWwG?HkY{BnM-z=e|0 z_L}`SnoMWHOgkpO(zu7$EvWt-Fq+WX6#IuAmu@`eyT16#+TA75^b$kT2H>PBX-@9~ z(P*-5akP0@R5La@&f+dGBNFX-b!O|X0%WFFHG$E!-dpC*)Bo~##>l_w2YsVM*k5XM zeU=Z;L?^bu$FkjA(x|4x;D7cQiAjFE*548n2U21(kt;Fz zmsrU$D~uqo7br2&?saeYrc2oIH4#sN(Nxj-N9oOb^LQrq+7ktgri!M*V7wKEzi92JQaheyM8g?0&4`H@nCq;cYgVEeqBmtutrGG|hugNptiMs^GY!;-k0<|NfsuRs(q|ua&z5x5zhyU+c{o|JTtAg*FX#P{k z+5~Dx^b2LJZI1Dbu~SJ0MibAhPubdWxbtJxo8d@apmsz}F6tNa45KN?Sp%bqXJa2Z zdEdd6$XnB+Xx8H4v!wnD%~^|xiR}+^H;X2oO@23bYdz(eb+S6FEdtdZ+oMw2-+7KqRtpwefohNKr6~^G zF#8Y z^ZKwZ+9xoh6fF+prf8aY7Cg)Fnt^wL?G+7atU$HL)pxb3f6w~3KFf*DSakzN6VGHb z59MU(U8v!*w)S;oq~C0-ikk6pmMoNYg=jSKjJ`9*@M;p@s8x%hE-;#SdR1qXsNy|k zM+S14!xPfz`{?eK>k@DXVNpXM8cjUE$R__P=*%;AQ3#h3yd=@qKkHcPy$++5mT-N0 zO_=g@w=wnU7)@#7V`%g(Vfj6GU2eiBi=7yt1FVHGCF{BA=4N~}CSXxLuup_73o~qW z#Iq=7=G!O0S_#{K$YkTFG1xb|oAJQD6PDn+u9xR%Y}D?U2-r`;?qozxFpzE#LvtWM z6{z-btx+i46T(Lm702oQWdhY6X%{yZHydK3bDSc9btH|tnt#-t-JNHWBYPkd7pV3~ zZLpM?)`ILJ3%6dN+N0rC@w7*Z*yx0ZaMUMI?V;|RH~F#>&)Ctc?g3LFean8K^!z&J zA(9E2BY>$BwoFA$A#)1$?R!xeux>WjXdOIQ}!Ro`hxD|JZqY5YI%j%1eRu zCQSK$QiMIeL13M2!u3s;uxA>Pa{E4GGzpUm(fScK=3&jiMiF-Zn9roCn3J=*ZWh4I2xIbR-?$>Zr?xM*0J9`)^pfb* z$3EDohE4!55n(IzXU~0G$TP{@4$8o63Cj*?JQfhcGuA*3&ISakJ)XILOWTb%OY+(` zAJ}*jt$BaYiR}mYXiV5TA7GAzr8s_>$l{YF@+evX%$YE)kFRgev&FtGWR?PRC2a5b zri3uuf3t?aAV(6Y_E@R1QP~$$Db}`=JFw{_+RBtvA17VBZkLw93Mf$R@!sk7>-ji` zFpBlCYZIvU*iovs)f`V!C3m~E0;BuyT8G;O&iK@`ooB);in8-a-+shwZak=pmv^GW zUSPh2b@_2`*@?G!-2!d40}CLmy-kwgmUB2#Sz~Ub3kdr#{*Kq-$;dKg#zC}T!g>s1 zSLWlFgpBLCk-(M^wl?mRTG3(boAJ&Yz(NU|5_~8z=ohkKU6ud~Crs8rZur;D$V}Ys z0E;B->-|&7`Ir(ga_`RrTTNKzY%^EcNIsgVc4`~2D8h=iS&Wxm%QHz#A@=~TBkaH4 zaVnG2cqR@~41s8Igmtj+bTHk6L+BUX0Bi$ci=wPzYQOS~k!yi3Mg*!oUbY+6F;%(( z%4;0~mO`R!$zFcwy7V~hl5RI(n+Y>>^_Zbmi6h-`avrd)gq0qBv;DIj_HAm>cwpNJ z(^2&IJB%Mo$>sSUf$bt}-!9GKo=^B_tWPT(Y6?_)yl@B$>(CARHt=*Kuze(2*DpWS z;uLr$N^wyHmP6Rb(F^@fXJDfvmcmOn0@WTi7rJDo3`7=W>-3iiRC{z>6VjmvCT600 ztGEwRK55kcvHkTwxXLiYLLny?sP-6@`#4v75;nR_=?}2uB$|fC8l~_xIMPoxkZ}oA zd*sEm?)ItX88deYoFfTTd)$cY5j-v*8;z)k^F@Jbk5~0C_gCV6f%SS0TSb9tkC}!I z2R?7ZXrUuI0AtAzN-U>72#iB!dWpMk7YWn25^zLrG0&`D1R6lJD}=o?(a>h~Fj^mn zp1`gWHt5H%ylBjOS*5K|3@uRYv10Gpfybn&yZaw*;<`nm9bGc4;na7&QAY0poEZyL zdpI?0jW@%YT(nD@TXye~Xqs`8M!k}rIdt~F2GME>yWO}nClBv}WLxx3VD*H(pBu0+ z*%2?u?E7%WB~b0L`*mRNH8_)tW{u1O_LxLdQ}NjU437}cevgs?_KdJr<7vOVMq#5m zN|C@`5cacpNK&Zuaenm90az1ZaR#P`^`x_<@@IH|S)ke@t>W-9W;oxdsNPE(*n1K! zGG1d=1g27qXr~gekA!uatEHrg&#AT1CRboz2-DKvXl^E*2IZz70``qCzs1?@HbwA# zV?;eHfc+p$E4Fi7ehyx@xjTme`%T!Ne!r*n+JYmEaD+5ZpxPs&{6haFG8j$q->Y^V zNVEsK*}0pFqCrzfGLnhqf2Wu zhu*-x1?s#8rc9Xfo@bjKe_}Md#zbIhgsoML&@UW{ed}IT2TYT&&)cqd--nZfB+X(L zupWf{s9)q@pMrgpxpV=THevchwLEe=A?wx;4q*h!I38b#+MQ5`ee)@Y54k`Yhsv^q zLRUO2Wt_)CRhB>*$2aFyo%`Zb&-&_{12Z6fi$8B0oPozpl4Glm0vk-&$?kb8uUg>{ zm>u7N4I`}apuw@W4m=Z`eOLm_h_I6-+mCL*1EP}edth=9DC6k4y{#?{H=gX&d)##! zO`=^`p0smxB=&8I`5uU7L0ER%y;VlndB%)fQvuAHu+`O3TivE%v~e0If!PptJkzv` z#!iejxDWSQ{TRZ=*(Z;Ujz_jqKNg~mBka13`_B`tJd@l_ffEdYGLF5)qSptcAIpkL z$hg|k34c?y?WNVO7;W|YpAgN7H0sxNXSfG`?Iqfz$~EdjSn`z~>C146W`^fmL9{7^ zDUZnY412>j%8s2m7uYnybc|CR7WcxwN$x!bHj}W%-xiY$`|wPp5W_vE9)$JCT%nyA z%rnN+9ggV)syzbdU7IL_TWryoTQEfnRC`Pt@T%gJ5+BX#{klstarp zVP4{aGBO8wCfV7<-TDy14t91J`ePHa#1_ac1*$##LrczI?2T-^c@(fP60Ksxi~~zB z8)U|ZCj*NhY<{rifij$tm;vE~fUP3z%(K-wk$8kCQXKSmWfH3PFjgslBl{NncE$TL zuox1p-PQXub2NA+S|<LAU}knx#p=5=gYNLv~Ifm_@S&#i77961HIU z4SNrKXVY3KHw#!YVX>CO7i;5$Z!J#bR_8Rr9G9%JRlsv3vBP@qE^HyJr%ZN?$9aCF zY-s%`XmlH4Zcmm4*W>px%b#RMJ>P==D{f#t#&MHFCShZ9jXXwU#wGstfwCFSZ{j_++ks^hW+C4a*`SX%tJVZIPy*E+e!5NDC*qbzv`gtXusjm2b9vw_ z>uY>8X4!Y{gLH(jA)2KV^UQfB$@|1DyT=F{RPC{PH$Kj+Q6rqybT~nnPh0s#cRcwi zeXGgctRlj+@d zn!=MOOZjM$F>hreLG8^Wij4pxR^U%@Z4+>LBZP9A14AsP?$fE!FEc zUN=#iKWr-msy%`e%F08e$4z!qxtmo(h9Isi+b>_mH!4mVsSDBmBP`(Ywr|dMJQJlA zajVP&!e;g|^U==Znf3C>Du~uV*tYwJHRs@#hw<&b57<+}T1DjvOQm0;9T;*P*mJ^8 zeh3b1#=VS0FOM6-E5Z)lOEOQXECDqMIj^l zY~5lg%|pIcagHZ5MZh#+K0+XPKzEQ^QmbEOoK41 z2l3?z$B`NCf#c1NT7(&AIZynBhklZFLm&keC<=+)dn^4Aelg0(EUE#fL!wQvom!Lr zj&D@7^I0mezJ$#zVs2&3K=w-)w%7tiA@aS(B~OvwEdLeoWC;|7oauLL+0EB{H1RB^ z3K;z$4G(`b=hR4^F$;&ov(RxU>6>J~nrl)!?A!IxS-?gRmURB*(G2MY@gEOmY63+e zlTwT%5C7w%v5T%jrYi8;9uLgt#v0@NCMjI2_?HR%w#P61@8jQ{!e~>Ahe9-S(zmVb zx$~cccqZP??EwX9M{ENb^#*T@rt}9+8U<=cCNYP+$0Z?~Q9cBi9ceT()o*{nH=c<; zu&}Qes2#beTjB6Wg=Z4`>V?1@NVJ>dei#|g;TdC+*9dGPVRzE{kFCLtr`6-3+|8Oq zSl(uh>h2ae1W(0F5N$GHNnH;tFK@=a?Klm0L7;Zza%!>Z&i6bkZDpf?%^=ZQu6)xw z$M8(_+~o$aS%h8OV%Jb1$1}z#3G%m&o`ku+{CWReG)9Zlh3&sU?MO?;nmsk6c_!Aa z<>n9{60O)GXo&6tjAl{7-333wiafUKi7~5T{1(?jqk)7SS$6i!!0|YQKA&LABTze1 zcc(nR_5ThNN_PNTOrjM8yB=SLDFNeLT?cF_VI4gEK8(cl*y==t46x;dm;Zpp6INW>EkPn(K8z=y0hUPE z$R(b}`7s#HtnCi4O@uWUcI%ZcJ-pgiJRevpVVhSU=(by$ad{?l&jPI-Q5!kb{K+3| z)Kq^nM9U!2^a^#aCJ&e?N?IfUtw*4F{?Mv2Uhrh7j!#VFNOE zjXX0S*@}zCzz!1@I^s#B7jB@KUZHRZBTzdMu_NxD^babq_8Y2!6_RK!$8DG7C-aSp z+Vb*&ogz%B?XvL==@i{~q7$&wgiU|AeC`=VKAL4yF82VI5a#k`?(weqR^051ESzw@}_7jaEDjH9asH`{rix8KPAZ7UF(uVJAFH z5I-%j0ai`e7Qf0hr*Zee8i=_Z=^kOzzig3A#}BzkamjXwR!7)36L;}L=}6lpz~PlZ z?MS>Kv!P7P4?&z6I};dvh3`s_8I2F(c*e*KTnX$6X>{@TPcz=)t!Is=odniM*!~k% zaW9JbXsk>DoE{6*j^sFXYZti#*;)~-rvil+Z3cTbs7OcZy#d}9mgz+r9klAA&CmWA z&3SHjU^LnGEtks}j5~4GY={dmdXO7b+RJSOZlGA@0dS-vP>IreSucODuXx?`ZQ6j* zvl_=?R$0TUc~ Date: Tue, 9 Apr 2019 22:56:14 -0400 Subject: [PATCH 6/6] Added .sh files and start visual at level1 --- Train.sh | 6 ++++++ Visualize.sh | 2 ++ 2 files changed, 8 insertions(+) create mode 100755 Train.sh create mode 100755 Visualize.sh diff --git a/Train.sh b/Train.sh new file mode 100755 index 0000000..2cd07b4 --- /dev/null +++ b/Train.sh @@ -0,0 +1,6 @@ +#!/bin/bash +javac ./*.java +javac ./Train_Files/*.java +cd ./Train_Files +java Asteroids_Train $1 +cd .. diff --git a/Visualize.sh b/Visualize.sh new file mode 100755 index 0000000..ffc8f5e --- /dev/null +++ b/Visualize.sh @@ -0,0 +1,2 @@ +#!/bin/bash +processing-java --sketch=../Asteroids_Train --run \ No newline at end of file