Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


Moon Dancer

Member Since 30 Jul 2013
Offline Last Active Aug 01 2013 12:30 PM

Posts I've Made

In Topic: Scouting smartly?

31 July 2013 - 05:44 AM

/Update:

wrote a simple recursive search, it's kinda fcking slow =d

        class rs_data
        {
            public List<ExplorerPoint> bestpath = null;
            public float bestpath_hdist = float.MaxValue;
        }

        private float recursive_search(float traveleddist, Vector3D lastpoint, List<ExplorerPoint> xplist, rs_data rs_data, int deep=0, List<ExplorerPoint> chain=null)
        {
            if (rs_data.bestpath_hdist < traveleddist)
                return traveleddist;
            if (chain == null)
                chain = new List<ExplorerPoint>();
            if (xplist.Count == 0)
            {
                if (traveleddist < rs_data.bestpath_hdist)
                {
                    rs_data.bestpath_hdist = traveleddist;
                    rs_data.bestpath = chain.ToList();
                    //backtrack last ?
                }
                return traveleddist;
            }
            var newlist = xplist.OrderBy(
                w => { return heuristicDistance((float)lastpoint.X, (float)lastpoint.Y, (float)w.Pos.X, (float)w.Pos.Y); });
            ExplorerPoint bestnode = null;
            float bestnode_dist = float.MaxValue;
            var i = 1;
            if (deep < 10)
                i = 2;

            foreach (var xp1 in newlist)
            {
                i--;
                if (i == -1)
                    break;
                var hdist = (float)Math.Sqrt(heuristicDistance((float)xp1.Pos.X, (float)xp1.Pos.Y, (float)lastpoint.X, (float)lastpoint.Y));
                if ((traveleddist + hdist) > rs_data.bestpath_hdist)
                    continue;

                var n = newlist.ToList();
                n.Remove(xp1);
                chain.Add(xp1);
                var res = recursive_search(traveleddist + hdist, xp1.Pos, n, rs_data, deep + 1, chain);
                chain.RemoveAt(chain.Count - 1);
                if (res < bestnode_dist)
                {
                    bestnode = xp1;
                    bestnode_dist = res;
                }
            }
            return bestnode_dist;
        }


PARTNERS