Added nearest neighbour pathing optimisation
Added nearest neighbour pathing optimisation
Thx @ https://github.com/Spegeli/Pokemon-Go-Rocket-API/pull/6
diff --git a/PokemonGo.RocketAPI.Logic/Inventory.cs b/PokemonGo.RocketAPI.Logic/Inventory.cs
index 785d165..cfa45cd 100644
--- a/PokemonGo.RocketAPI.Logic/Inventory.cs
+++ b/PokemonGo.RocketAPI.Logic/Inventory.cs
@@ -71,7 +71,7 @@ namespace PokemonGo.RocketAPI.Logic
{
var myPokemon = await GetPokemons();
- var pokemonList = myPokemon.Where(p => p.DeployedFortId == 0).ToList(); //Don't evolve pokemon in gyms
+ var pokemonList = myPokemon.Where(p => p.DeployedFortId == 0 && p.Favorite == 0).ToList(); //Don't evolve pokemon in gyms
if (filter != null)
{
pokemonList = pokemonList.Where(p => !filter.Contains(p.PokemonId)).ToList();
@@ -98,7 +98,7 @@ namespace PokemonGo.RocketAPI.Logic
var amountToSkip = familyCandy.Candy / settings.CandyToEvolve;
- results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key && x.Favorite == 0)
+ results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key)
.OrderByDescending(x => x.Cp)
.ThenBy(n => n.StaminaMax)
.Skip(amountToSkip)
@@ -114,11 +114,10 @@ namespace PokemonGo.RocketAPI.Logic
.Where(x => x.Count() > 1)
.SelectMany(
p =>
- p.Where(x => x.Favorite == 0)
- .OrderByDescending(x => x.Cp)
- .ThenBy(n => n.StaminaMax)
- .Skip(KeepMinDuplicatePokemon)
- .ToList());
+ p.OrderByDescending(x => x.Cp)
+ .ThenBy(n => n.StaminaMax)
+ .Skip(KeepMinDuplicatePokemon)
+ .ToList());
}
public async Task<IEnumerable<PokemonData>> GetPokemonToEvolve(IEnumerable<PokemonId> filter = null)
diff --git a/PokemonGo.RocketAPI.Logic/Logic.cs b/PokemonGo.RocketAPI.Logic/Logic.cs
index 9006344..8df7658 100644
--- a/PokemonGo.RocketAPI.Logic/Logic.cs
+++ b/PokemonGo.RocketAPI.Logic/Logic.cs
@@ -188,7 +188,8 @@ namespace PokemonGo.RocketAPI.Logic
private async Task ExecuteFarmingPokestopsAndPokemons()
{
var mapObjects = await _client.GetMapObjects();
- var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()).OrderBy(i => LocationUtils.CalculateDistanceInMeters(new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude)));
+ //var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()).OrderBy(i => LocationUtils.CalculateDistanceInMeters(new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude)));
+ var pokeStops = Navigation.pathByNearestNeighbour(mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()).OrderBy(i => LocationUtils.CalculateDistanceInMeters(new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude))).ToArray());
Logger.Normal(ConsoleColor.Green, $"Found {pokeStops.Count()} pokestops");
foreach (var pokeStop in pokeStops)
diff --git a/PokemonGo.RocketAPI.Logic/Navigation.cs b/PokemonGo.RocketAPI.Logic/Navigation.cs
index 0d4217e..15cad6b 100644
--- a/PokemonGo.RocketAPI.Logic/Navigation.cs
+++ b/PokemonGo.RocketAPI.Logic/Navigation.cs
@@ -98,5 +98,30 @@ namespace PokemonGo.RocketAPI.Logic
public double Latitude { get; set; }
public double Longitude { get; set; }
}
+
+ public static FortData[] pathByNearestNeighbour(FortData[] pokeStops)
+ {
+ for (var i = 1; i < pokeStops.Length - 1; i++)
+ {
+ var closest = i + 1;
+ var cloestDist = LocationUtils.CalculateDistanceInMeters(new Navigation.Location(pokeStops[i].Latitude, pokeStops[i].Longitude), new Navigation.Location(pokeStops[closest].Latitude, pokeStops[closest].Longitude));
+ for (var j = closest; j < pokeStops.Length; j++)
+ {
+ var initialDist = cloestDist;
+ var newDist = LocationUtils.CalculateDistanceInMeters(new Navigation.Location(pokeStops[i].Latitude, pokeStops[i].Longitude), new Navigation.Location(pokeStops[j].Latitude, pokeStops[j].Longitude));
+ if (initialDist > newDist)
+ {
+ cloestDist = newDist;
+ closest = j;
+ }
+
+ }
+ var tmpPok = pokeStops[closest];
+ pokeStops[closest] = pokeStops[i + 1];
+ pokeStops[i + 1] = tmpPok;
+ }
+
+ return pokeStops;
+ }
}
}
\ No newline at end of file
diff --git a/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj b/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
index 3c71722..6dadd5c 100644
--- a/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
+++ b/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
@@ -17,7 +17,7 @@
<UpdateAssemblyInfoVersion>False</UpdateAssemblyInfoVersion>
<AssemblyVersionSettings>YearStamp.MonthStamp.DayStamp.Increment</AssemblyVersionSettings>
<PrimaryVersionType>AssemblyVersionAttribute</PrimaryVersionType>
- <AssemblyVersion>2016.7.23.103</AssemblyVersion>
+ <AssemblyVersion>2016.7.23.105</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
diff --git a/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs b/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
index 05643d3..2a5982b 100644
--- a/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
+++ b/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2016.7.23.103")]
+[assembly: AssemblyVersion("2016.7.23.105")]
[assembly: AssemblyFileVersion("1.0.0.0")]
You may download the files in Public Git.