std::vector<std::unique_ptr<IMove>> RandomSwapNeighborhood::getMoves(const ISolution& solution) const { auto distribution = solution.getDistribution(); std::vector< std::unique_ptr<IMove> > result; auto swapPairs = getSomePairDisk(solution); for (auto pair : swapPairs) { std::vector<IMove::AtomMove> AtomMoves; AtomMoves.emplace_back(distribution[pair.second].serverId, distribution[pair.first].serverId, pair.first); AtomMoves.emplace_back(distribution[pair.first].serverId, distribution[pair.second].serverId, pair.second); std::unique_ptr<IMove> move(new CompoundMove(std::move(AtomMoves))); if (solution.moveIsCorrect(*move)) { result.emplace_back(std::move(move)); } } return result; }