mirror of
https://github.com/moveit/moveit_task_constructor.git
synced 2025-09-27 00:29:13 +08:00
count all failures for statistics
This commit is contained in:
parent
7a13d79bc4
commit
2184450bd6
@ -67,6 +67,9 @@ public:
|
||||
virtual bool canCompute() const = 0;
|
||||
virtual bool compute() = 0;
|
||||
|
||||
size_t numFailures() const override { return 0; }
|
||||
void processFailures(const SolutionProcessor&) const override {}
|
||||
|
||||
/// called by a (direct) child when a new solution becomes available
|
||||
virtual void onNewSolution(const SolutionBase& s) = 0;
|
||||
|
||||
@ -90,7 +93,6 @@ public:
|
||||
|
||||
size_t numSolutions() const override;
|
||||
void processSolutions(const SolutionProcessor &processor) const override;
|
||||
void processFailures(const SolutionProcessor &processor) const override {}
|
||||
|
||||
/// container used to represent a serial solution
|
||||
typedef std::vector<const SolutionBase*> solution_container;
|
||||
@ -182,7 +184,6 @@ public:
|
||||
void init(const planning_scene::PlanningSceneConstPtr &scene) override;
|
||||
|
||||
size_t numSolutions() const override;
|
||||
void processFailures(const SolutionProcessor &processor) const override {}
|
||||
|
||||
/// insertion is only allowed if children() is empty
|
||||
bool insert(Stage::pointer&& stage, int before = -1) override;
|
||||
@ -216,6 +217,7 @@ public:
|
||||
bool compute() override;
|
||||
|
||||
size_t numSolutions() const override;
|
||||
size_t numFailures() const override;
|
||||
void processSolutions(const SolutionProcessor &processor) const override;
|
||||
void processFailures(const SolutionProcessor &processor) const override;
|
||||
|
||||
|
@ -143,6 +143,7 @@ public:
|
||||
const std::string& name() const;
|
||||
void setName(const std::string& name);
|
||||
virtual size_t numSolutions() const = 0;
|
||||
virtual size_t numFailures() const = 0;
|
||||
|
||||
bool storeFailures() const;
|
||||
|
||||
@ -183,6 +184,7 @@ public:
|
||||
PRIVATE_CLASS(ComputeBase)
|
||||
void reset() override;
|
||||
virtual size_t numSolutions() const override;
|
||||
virtual size_t numFailures() const override;
|
||||
void processSolutions(const SolutionProcessor &processor) const override;
|
||||
void processFailures(const SolutionProcessor &processor) const override;
|
||||
|
||||
|
@ -129,9 +129,16 @@ public:
|
||||
// store trajectory in internal trajectories_ list
|
||||
SubTrajectory& addTrajectory(SubTrajectory&& trajectory);
|
||||
|
||||
// countFailures() serves as a filter before returning the result of compute()
|
||||
inline bool countFailures(bool success) {
|
||||
if (!success) ++num_failures_;
|
||||
return success;
|
||||
}
|
||||
|
||||
private:
|
||||
std::list<SubTrajectory> solutions_;
|
||||
std::list<SubTrajectory> failures_;
|
||||
size_t num_failures_ = 0; // num of failures if not stored
|
||||
};
|
||||
PIMPL_FUNCTIONS(ComputeBase)
|
||||
|
||||
|
@ -603,6 +603,11 @@ size_t Wrapper::numSolutions() const
|
||||
return pimpl()->solutions_.size();
|
||||
}
|
||||
|
||||
size_t Wrapper::numFailures() const
|
||||
{
|
||||
return pimpl()->failures_.size();
|
||||
}
|
||||
|
||||
void Wrapper::processSolutions(const Stage::SolutionProcessor &processor) const
|
||||
{
|
||||
for(const auto& s : pimpl()->solutions_)
|
||||
|
@ -216,6 +216,7 @@ void Introspection::fillStageStatistics(const Stage& stage, moveit_task_construc
|
||||
return true;
|
||||
};
|
||||
stage.processFailures(solutionProcessor);
|
||||
s.num_failed = stage.numFailures();
|
||||
}
|
||||
|
||||
moveit_task_constructor_msgs::TaskDescription& Introspection::fillTaskDescription(moveit_task_constructor_msgs::TaskDescription &msg)
|
||||
|
@ -227,6 +227,11 @@ size_t ComputeBase::numSolutions() const {
|
||||
return pimpl()->solutions_.size();
|
||||
}
|
||||
|
||||
size_t ComputeBase::numFailures() const
|
||||
{
|
||||
return pimpl()->num_failures_;
|
||||
}
|
||||
|
||||
void ComputeBase::processSolutions(const Stage::SolutionProcessor &processor) const
|
||||
{
|
||||
for (const auto& s : pimpl()->solutions_)
|
||||
@ -317,7 +322,7 @@ bool PropagatingEitherWayPrivate::compute()
|
||||
if (me->computeBackward(state))
|
||||
result |= true;
|
||||
}
|
||||
return result;
|
||||
return countFailures(result);
|
||||
}
|
||||
|
||||
void PropagatingEitherWayPrivate::newStartState(const Interface::iterator &it)
|
||||
@ -472,7 +477,7 @@ bool GeneratorPrivate::canCompute() const {
|
||||
|
||||
bool GeneratorPrivate::compute() {
|
||||
initProperties();
|
||||
return static_cast<Generator*>(me_)->compute();
|
||||
return countFailures(static_cast<Generator*>(me_)->compute());
|
||||
}
|
||||
|
||||
void GeneratorPrivate::initProperties()
|
||||
@ -544,7 +549,7 @@ bool ConnectingPrivate::compute() {
|
||||
const InterfaceState& from = *it_pairs_.first;
|
||||
const InterfaceState& to = *(it_pairs_.second++);
|
||||
initProperties(from, to);
|
||||
return static_cast<Connecting*>(me_)->compute(from, to);
|
||||
return countFailures(static_cast<Connecting*>(me_)->compute(from, to));
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,6 +3,10 @@
|
||||
# unique id within task
|
||||
uint32 id
|
||||
|
||||
# successful and failed solution IDs of this stage
|
||||
# successful solution IDs of this stage
|
||||
uint32[] solved
|
||||
|
||||
# (optional) failed solution IDs of this stage
|
||||
uint32[] failed
|
||||
# number of failed solutions (if failed is empty)
|
||||
uint32 num_failed
|
||||
|
@ -278,7 +278,8 @@ void RemoteTaskModel::processStageStatistics(const moveit_task_constructor_msgs:
|
||||
}
|
||||
Node *n = it->second;
|
||||
|
||||
bool changed = n->solutions_->processSolutionIDs(s.solved, s.failed);
|
||||
bool changed = n->solutions_->processSolutionIDs(s.solved, s.failed, s.num_failed);
|
||||
|
||||
// emit notify about model changes when node was already visited
|
||||
if (changed && (n->node_flags_ & WAS_VISITED)) {
|
||||
QModelIndex idx = index(n);
|
||||
@ -532,7 +533,8 @@ void RemoteSolutionModel::sortInternal()
|
||||
|
||||
// process solution ids received in stage statistics
|
||||
bool RemoteSolutionModel::processSolutionIDs(const std::vector<uint32_t> &successful,
|
||||
const std::vector<uint32_t> &failed)
|
||||
const std::vector<uint32_t> &failed,
|
||||
size_t num_failed)
|
||||
{
|
||||
// are there any new items?
|
||||
bool changed = (successful.size() + failed.size() != data_.size());
|
||||
@ -548,6 +550,14 @@ bool RemoteSolutionModel::processSolutionIDs(const std::vector<uint32_t> &succes
|
||||
for (auto it = was_empty ? data_.begin() : ++last, end = data_.end(); it != end; ++it)
|
||||
it->creation_rank = ++rank;
|
||||
|
||||
// the task may not report failure ids (in failed),
|
||||
// but it may report the overall number of failures
|
||||
num_failed_data_ = failed.size(); // needed to compute number of successes
|
||||
if (num_failed_data_ > num_failed)
|
||||
num_failed = num_failed_data_;
|
||||
changed |= (num_failed != num_failed_);
|
||||
num_failed_ = num_failed;
|
||||
|
||||
sortInternal();
|
||||
return changed;
|
||||
}
|
||||
|
@ -110,7 +110,8 @@ class RemoteSolutionModel : public QAbstractTableModel {
|
||||
// successful and failed solutions ordered by id / creation
|
||||
typedef std::list<Data> DataList;
|
||||
DataList data_;
|
||||
size_t num_failed_ = 0; // number of failed solutions in data_
|
||||
size_t num_failed_data_ = 0; // number of failed solutions in data_
|
||||
size_t num_failed_ = 0; // number of reported failures
|
||||
|
||||
// solutions ordered (by default according to cost)
|
||||
int sort_column_ = -1;
|
||||
@ -125,7 +126,7 @@ class RemoteSolutionModel : public QAbstractTableModel {
|
||||
public:
|
||||
RemoteSolutionModel(QObject *parent = nullptr);
|
||||
|
||||
uint numSuccessful() const { return data_.size() - num_failed_; }
|
||||
uint numSuccessful() const { return data_.size() - num_failed_data_; }
|
||||
uint numFailed() const { return num_failed_; }
|
||||
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
@ -135,7 +136,7 @@ public:
|
||||
void sort(int column, Qt::SortOrder order);
|
||||
|
||||
void setData(uint32_t id, float cost, const QString &name);
|
||||
bool processSolutionIDs(const std::vector<uint32_t> &successful, const std::vector<uint32_t> &failed);
|
||||
bool processSolutionIDs(const std::vector<uint32_t> &successful, const std::vector<uint32_t> &failed, size_t num_failed);
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user