23 poseHelperPtr(
PoseHelper::getInstance()), posesToExplorePtr(posesToExplorePtr), needreorderPosesByTSP(needreorderPosesByTSP) {
30 ROS_INFO(
"nearest_neighbour started");
32 ROS_DEBUG(
"There are less than 3 posesToExplore -> no optimization possible");
38 int numberOfSwaps = 0;
40 double currentBestDistance = DBL_MAX;
41 RobotStatePtrVec::iterator currentBestRobotIt;
42 for (RobotStatePtrVec::iterator robotIt = mainRobotIt + 1; robotIt !=
posesToExplorePtr->end(); ++robotIt) {
43 double distance =
poseHelperPtr->calculateDistance(*mainRobotIt->get()->getRobotPosePtr(), *robotIt->get()->getRobotPosePtr());
44 if (distance < currentBestDistance) {
45 currentBestDistance = distance;
46 currentBestRobotIt = robotIt;
49 std::iter_swap(mainRobotIt + 1, currentBestRobotIt);
50 distance += currentBestDistance;
64 ROS_DEBUG(
"There are less than 4 posesToExplore -> no optimization possible");
70 int numberOfSwaps = 0;
75 double bestChange = 0;
76 RobotStatePtrVec::iterator swap1;
77 RobotStatePtrVec::iterator swap2;
78 for (RobotStatePtrVec::iterator robotIt2 = robotIt1 + 2; robotIt2 !=
posesToExplorePtr->end() - 1; ++robotIt2) {
79 double change =
poseHelperPtr->calculateDistance(*robotIt1->get()->getRobotPosePtr(), *robotIt2->get()->getRobotPosePtr())
80 +
poseHelperPtr->calculateDistance(*(robotIt1 + 1)->get()->getRobotPosePtr(), *(robotIt2 + 1)->
get()->getRobotPosePtr())
81 -
poseHelperPtr->calculateDistance(*robotIt1->get()->getRobotPosePtr(), *(robotIt1 + 1)->
get()->getRobotPosePtr())
82 -
poseHelperPtr->calculateDistance(*robotIt2->get()->getRobotPosePtr(), *(robotIt2 + 1)->
get()->getRobotPosePtr());
83 if (change < bestChange) {
91 distance += bestChange;
93 std::reverse(swap1, (swap2 + 1));
RobotStatePtrVecPtr & posesToExplorePtr
SortHelper(RobotStatePtrVecPtr &posesToExplorePtr, bool needreorderPosesByTSP)
bool needreorderPosesByTSP
#define ROS_INFO_STREAM(args)
PoseHelperPtr poseHelperPtr
void nearest_neighbour_and_update_distance(double &distance)
void two_opt_and_update_distance(double &distance)