00001 #include <iostream>
00002
00003 using namespace std;
00004
00005 #include "../discrete_space_information/precomputed_adjacency_list/environment_precomputed_adjacency_list.h"
00006
00007
00008
00009 struct Point2D
00010 {
00011 Point2D(int newX, int newY) : x(newX), y(newY) {}
00012
00013 int heuristicDistanceTo (const Point2D& p) { int dx=p.x-x; int dy=p.y-y; int dist=((int)sqrt(dx*dx+dy*dy)); return dist; }
00014
00015 int x;
00016 int y;
00017 };
00018
00019 ostream& operator<< (ostream& stream, Point2D p)
00020 {
00021 stream << "(" << p.x << ", " << p.y << ")";
00022 return stream;
00023 }
00024
00025 int operator< (const Point2D& p1, const Point2D& p2)
00026 {
00027 return (p1.x<p2.x) || ((p1.x==p2.x) && (p1.y<p2.y));
00028 }
00029
00030
00031
00032
00033
00034
00035 void testPlanner (AdjacencyListSBPLEnv<Point2D>& e)
00036 {
00037 int sol_cost;
00038 e.writeToStream();
00039 vector<Point2D> solution = e.findOptimalPath (&sol_cost);
00040 cout << "Returned plan is ";
00041 for (unsigned int i=0; i<solution.size(); i++) {
00042 cout << solution[i] << " ";
00043 }
00044 cout << endl;
00045 }
00046
00047
00048
00049
00050 int main (int, char**)
00051 {
00052 AdjacencyListSBPLEnv<Point2D> e;
00053 Point2D p1(0,0);
00054 Point2D p2(2,1);
00055 Point2D p3(1,4);
00056 Point2D p4(5,5);
00057
00058 e.addPoint(p1);
00059 e.addPoint(p4);
00060 e.addPoint(p3);
00061 e.addPoint(p2);
00062
00063 e.setCost(p1,p2,4);
00064 e.setCost(p1,p3,6);
00065 e.setCost(p3,p4,5);
00066 e.setCost(p2,p4,15);
00067
00068 e.setStartState(p1);
00069 e.setGoalState(p4);
00070
00071
00072
00073
00074
00075
00076
00077 testPlanner (e);
00078 e.setCost(p2,p4,1);
00079 testPlanner (e);
00080 e.removeLastPoints();
00081 testPlanner (e);
00082 e.writeToStream();
00083 return 0;
00084 }
00085