Skip to content

Instantly share code, notes, and snippets.

@tanmayb123
Created May 10, 2019 07:43
Show Gist options
  • Save tanmayb123/f5a46c4ea5161bc301609e059f762b08 to your computer and use it in GitHub Desktop.
Save tanmayb123/f5a46c4ea5161bc301609e059f762b08 to your computer and use it in GitHub Desktop.
using Flux.Tracker
using Flux.Tracker: update!
using ProgressMeter
euclidean_distance(p1, p2) = sqrt((p1[1] - p2[1]) ^ 2 + (p1[2] - p2[2]) ^ 2)
squared_error(expected, output) = (expected - output) ^ 2
function trilateration_error(r1, r2, r3, expected_distances, pred)
pred_r1 = euclidean_distance(r1, pred)
pred_r2 = euclidean_distance(r2, pred)
pred_r3 = euclidean_distance(r3, pred)
error_r1 = squared_error(expected_distances[1], pred_r1)
error_r2 = squared_error(expected_distances[2], pred_r2)
error_r3 = squared_error(expected_distances[3], pred_r3)
return error_r1 + error_r2 + error_r3
end
d_trilateration_error(r1, r2, r3, expected_distances, pred) = Tracker.gradient(trilateration_error, r1, r2, r3, expected_distances, pred)[5]
ref1 = param([0, 20])
ref2 = param([-20, 0])
ref3 = param([20, 0])
expected_distances = param([20, 31, 10])
pred = param([1, 1])
@showprogress for i in 1:5000
grad = d_trilateration_error(ref1, ref2, ref3, expected_distances, pred)
update!(pred, -0.1 * grad)
end
println(pred)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment