Advertisement
Guest User

Untitled

a guest
Jul 27th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.63 KB | None | 0 0
  1.  
  2.  
  3. function OnTick()
  4. if not isuserauthed then return end
  5. if not ANNloaded then return end
  6. if not Allloaded then return end
  7. local current_tick = GetTickCount()
  8.  
  9.  
  10. if Config.On then
  11. if ANN == nil then return end
  12. for enemy_networkID, visible_time in pairs(visibleDB) do
  13. --Store waypoints
  14. local hero = GetHeroByNetworkID(enemy_networkID)
  15. local current_waypoint = {time = GetTickCount(), x = hero.visionPos.x, y = hero.visionPos.z}
  16. table.insert(stored_waypoints[enemy_networkID], current_waypoint)
  17. for idx, val in ipairs(stored_waypoints[enemy_networkID]) do
  18. if GetTickCount() - stored_waypoints[enemy_networkID][idx]["time"] > 1400 then
  19. table.remove(stored_waypoints[enemy_networkID], idx)
  20. else
  21. break
  22. end
  23. end
  24. --Store training data
  25. if dataDB[enemy_networkID] ~= nil and current_tick - visible_time >= Config.TickLimiter and GetTickCount() - dataDB[enemy_networkID]["last_cached_time"] >= 200 then
  26.  
  27. --cache current position
  28. table.insert(dataDB[enemy_networkID]["movement_table"], hero.visionPos.x)
  29. table.insert(dataDB[enemy_networkID]["movement_table"], hero.visionPos.z)
  30. if dataDB[enemy_networkID]["last_cached_time"] ~= nil and dataDB[enemy_networkID]["last_cached_time"] ~= 0 then
  31. CacheDelta = CacheDelta + (GetTickCount() - dataDB[enemy_networkID]["last_cached_time"])
  32. end
  33. dataDB[enemy_networkID]["last_cached_time"] = GetTickCount()
  34. NumCaches = NumCaches + 1
  35.  
  36. --see if it's able to be predicted
  37. if #dataDB[enemy_networkID]["movement_table"] == 12 then
  38. dataDB[enemy_networkID]["last_predict_time"] = GetTickCount()
  39. end
  40.  
  41. --see if movement table is too large
  42. while #dataDB[enemy_networkID]["movement_table"] >= 24 do
  43. a = table.remove(dataDB[enemy_networkID]["movement_table"], 1)
  44. b = table.remove(dataDB[enemy_networkID]["movement_table"], 1)
  45. end
  46.  
  47. --after pruning, see if it's stable for caching
  48. if #dataDB[enemy_networkID]["movement_table"] == 22 then
  49. dataDB[enemy_networkID]["last_stable_time"] = GetTickCount()
  50. end
  51.  
  52.  
  53. --cache future waypoint
  54. local current_waypoints = {}
  55. table.insert(current_waypoints, Vector(hero.visionPos.x, myHero.y, hero.visionPos.z))
  56. for i = hero.pathIndex, hero.pathCount do
  57. path = hero:GetPath(i)
  58. if path ~= nil and path.x then
  59. table.insert(current_waypoints, Vector(path.x, myHero.y, path.z))
  60. end
  61. end
  62.  
  63. table.insert(dataDB[enemy_networkID]["waypoint_table"], {x = current_waypoints[#current_waypoints].x, y = current_waypoints[#current_waypoints].z})
  64. if #dataDB[enemy_networkID]["waypoint_table"] > 11 then
  65. table.remove(dataDB[enemy_networkID]["waypoint_table"], 1)
  66. end
  67.  
  68.  
  69.  
  70. --See VP Predicted Pos and cache it
  71. if hero ~= nil then
  72. local to_push_table = {}
  73. for idx, val in ipairs(delay_table) do
  74. local _, _, pred_pos = VP:GetPredictedPos(hero, val - (0.07 + GetLatency() / 2000), math.huge, myHero, false)
  75. table.insert(to_push_table, pred_pos.x)
  76. table.insert(to_push_table, pred_pos.z)
  77. end
  78. table.insert(dataDB[enemy_networkID]["vpred_table"], to_push_table)
  79. if Config.Debug then
  80. print('Pushed to VPred table!')
  81. end
  82. end
  83.  
  84. if #dataDB[enemy_networkID]["vpred_table"] > 11 then
  85. table.remove(dataDB[enemy_networkID]["vpred_table"], 1)
  86. end
  87. --print('Learning complete!')
  88.  
  89.  
  90. dataDB[enemy_networkID]["has_learned"] = false
  91. --Utilize training data
  92. elseif dataDB[enemy_networkID] ~= nil and current_tick - visible_time >= 2100 and not dataDB[enemy_networkID]["has_learned"] and #dataDB[enemy_networkID]["waypoint_table"] >= 11 and GetTickCount() - dataDB[enemy_networkID]["last_stable_time"] >= 0 and #dataDB[enemy_networkID]["movement_table"] >= 22 then
  93. --normalize results
  94. if Config.Debug then
  95. print('Entering learning phase!')
  96. end
  97. local copy_of_movement_table = dataDB[enemy_networkID]["movement_table"]
  98. local hero = GetHeroByNetworkID(enemy_networkID)
  99. local hero = GetHeroByNetworkID(enemy_networkID)
  100. local temp_db = {}
  101. for i = 1, 10, 1 do
  102. a = table.remove(copy_of_movement_table, 1)
  103. if i % 2 == 0 then
  104. a = normalize_valuey(a)
  105. else
  106. a = normalize_valuex(a)
  107. end
  108. table.insert(temp_db, a)
  109. end
  110.  
  111. local x = table.remove(copy_of_movement_table, 1)
  112. local y = table.remove(copy_of_movement_table, 1)
  113. local copy_table = copy_of_movement_table
  114. for idx, value in ipairs(copy_table) do
  115. if idx % 2 == 0 then
  116. value = normalize_valuey(value)
  117. else
  118. value = normalize_valuex(value)
  119. end
  120. copy_table[idx] = value
  121. end
  122.  
  123. table.insert(temp_db, normalize_valuex(x))
  124. table.insert(temp_db, normalize_valuey(y))
  125. table.insert(temp_db, normalize_valuex(dataDB[enemy_networkID]["waypoint_table"][6].x))
  126. table.insert(temp_db, normalize_valuey(dataDB[enemy_networkID]["waypoint_table"][6].y))
  127.  
  128.  
  129.  
  130.  
  131. --print(#temp_db)
  132. --print(temp_db)
  133. --print(#dataDB[enemy_networkID]["movement_table"])
  134. if temp_db ~= nil and #copy_table ~= nil and #temp_db == 14 and #copy_table == 10 then
  135. local concat_string = table.concat(temp_db, ",")
  136. local concat_string2 = table.concat(copy_table, ",")
  137. --file2connector:write(concat_string .. "\t" .. concat_string2 .. "\n")
  138. ANN:backwardPropagate(temp_db, copy_table)
  139. --print("Backward propagated!")
  140. if dataDB[enemy_networkID]["last_learn_time"] ~= nil and dataDB[enemy_networkID]["last_learn_time"] ~= 0 then
  141. LearnDelta = LearnDelta + (GetTickCount() - dataDB[enemy_networkID]["last_learn_time"])
  142. NumLearn = NumLearn + 1
  143. end
  144. dataDB[enemy_networkID]["has_learned"] = true
  145. dataDB[enemy_networkID]["last_learn_time"] = GetTickCount()
  146. end
  147.  
  148.  
  149. --lastly compute error post caching.
  150. if dataDB[enemy_networkID]["vpred_table"] ~= nil and #dataDB[enemy_networkID]["vpred_table"] >= 11 then
  151. if Config.Debug then
  152. print('Analyzing vpred error!')
  153. end
  154. local vpred_compute_table = dataDB[enemy_networkID]["vpred_table"][6]
  155. local ANN_compute_table = ANN:forwardPropagate(temp_db)
  156. local temp_vpred_error, temp_ANN_error = CalculateError(vpred_compute_table, ANN_compute_table, copy_table)
  157. if temp_vpred_error ~= nil and temp_ANN_error ~= nil and temp_vpred_error >= 0 and temp_ANN_error >= 0 then
  158. ANN_total_error = ANN_total_error + temp_ANN_error
  159. VPred_total_error = VPred_total_error + temp_vpred_error
  160. Error_calcs = Error_calcs + 1
  161. if Config.Debug then
  162. print('Vpred error analysis completed, nothing seems wrong!')
  163. end
  164. else
  165. if Config.Debug then
  166. print('CalculateError function outputs are nil!')
  167. end
  168. end
  169. end
  170.  
  171. end
  172. end
  173.  
  174. if NumCaches > 5001 and NumCaches % 5000 == 0 then
  175. SendANN()
  176. --print('Autosending AI info to server')
  177. end
  178.  
  179. end
  180.  
  181. if VPred_total_error > 0 and ANN_total_error > 0 and Error_calcs > 0 then
  182. VPred_average_error = VPred_total_error / Error_calcs
  183. ANN_average_error = ANN_total_error / Error_calcs
  184. end
  185.  
  186. --Dump options
  187. if Config.Dumpnow and GetTickCount() - LastDump > 5000 then
  188. DumpNow()
  189. LastDump = GetTickCount()
  190. Config.Dumpnow = false
  191. end
  192. end
  193.  
  194. function CalculateError(vpred_table, ANN_table, real_table)
  195. if #vpred_table ~= #ANN_table then
  196. if Config.Debug then
  197. print('vpred table size not equal')
  198. return nil, nil
  199. end
  200. end
  201.  
  202. if #real_table ~= #ANN_table then
  203. if Config.Debug then
  204. print('ANN table size not equal')
  205. return nil, nil
  206. end
  207. end
  208.  
  209. local current_vpred_error = 0
  210. local current_ANN_error = 0
  211. for i = 1, #vpred_table, 2 do
  212. local vpred_point = {x=vpred_table[i], y=vpred_table[i+1]}
  213. local ann_point = {x = denormalizex(ANN_table[i]), y = denormalizey(ANN_table[i+1])}
  214. local real_point = {x = denormalizex(real_table[i]), y = denormalizey(real_table[i+1])}
  215. current_vpred_error = current_vpred_error + GetDistance(vpred_point, real_point)
  216. current_ANN_error = current_ANN_error + GetDistance(ann_point, real_point)
  217. if Config.Debug then
  218. print('CalculateError loop completed, iterating!')
  219. end
  220. end
  221. if current_vpred_error < 0 or current_vpred_error > 100000 then
  222. return nil, nil
  223. elseif current_ANN_error < 0 or current_ANN_error > 100000 then
  224. return nil, nil
  225. end
  226. return current_vpred_error, current_ANN_error
  227. end
  228.  
  229. function normalize_valuex(value)
  230. if value > 14279 then
  231. value = 14279
  232. elseif value < -538 then
  233. value = -538
  234. end
  235. return (value+538)/(14279+538)
  236. end
  237.  
  238. function normalize_valuey(value)
  239. if value > 14527 then
  240. value = 14527
  241. elseif value < -165 then
  242. value = -165
  243. end
  244. return (value+165)/(14527+165)
  245. end
  246.  
  247. function denormalizex(value)
  248. if value > 1 or value < 0 then return end
  249. value = (value * 14279) - 538
  250. return value
  251. end
  252.  
  253. function denormalizey(value)
  254. if value > 1 or value < 0 then return end
  255. value = (value * 14527) - 165
  256. return value
  257. end
  258.  
  259. function round(num, idp)
  260. return string.format("%." .. (idp or 0) .. "f", num)
  261. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement