9 #ifndef _eliminations_include_
10 #define _eliminations_include_
16 #include "xaifBooster/algorithms/CrossCountryInterface/inc/AwarenessLevel.hpp"
67 tie (edge_ij, found_ij)=
edge (i, j, cg);
95 tie (edge_ij, found_ij)=
edge (i, j, cg);
163 for (
size_t i= 0; i < seq.size(); i++)
173 for (
size_t k= 0; k < seq.size(); k++)
183 for (
size_t k= 0; k < seq.size(); k++)
269 for (
size_t k= 0; k < seq.size(); k++)
323 tie (f, found)=
edge (i, j, lg);
342 tie (f, found)=
edge (i, j, lg);
348 tie (f, found)=
edge (i, j, lg);
363 if (k != -1) t.
k= k;
return k != -1;
380 if (k != -1) t.
k= k;
return k != -1;
395 return ((k != -1 && el[i] != 1 && el[j] != 1) || k < lg.
v()-1);
470 vector<c_graph_t::vertex_t>& vv);
483 vector<c_graph_t::edge_t>& ev);
487 vector<c_graph_t::edge_t>& ev);
491 vector<c_graph_t::edge_t>& ev);
500 vector<edge_bool_t>& ev);
509 vector<edge_ij_elim_t>& ev);
513 vector<EdgeElim>& ev);
517 vector<line_graph_t::face_t>& fv);
526 vector<line_graph_t::face_t> fv;
529 for (
size_t c= 0; c < fv.size(); c++) {
530 int s= source (fv[c], lg), t= target (fv[c], lg);
531 triplet_t tr (s, t, -1); tv.push_back (tr); }
541 vector<c_graph_t::vertex_t>& vv) {
547 vector<c_graph_t::edge_t>& ev) {
553 vector<edge_bool_t>& ev) {
559 vector<edge_ij_elim_t>& ev) {
565 vector<line_graph_t::face_t>& fv) {
571 vector<triplet_t>& tv) {
585 template <
typename Ad_graph_t,
620 const Ad_graph_t& _cg,
int _ccosts= 0) :
631 og (_og),
seq (_seq) {
653 ((Ad_graph_t&)
og).swap ((Ad_graph_t&) eh.
og);
670 if (costs > 0) {
seq.push_back (el);
ccosts+= costs; }
675 Ad_graph_t og_copy (
og);
677 for (
size_t c= 0; c <
seq.size(); c++) {
678 El_spec_t el=
seq[c];
681 cout <<
"check_sequence failed";
683 cout <<
" at " << c <<
"th entry, which is " <<
seq[c] << std::endl;
684 write_graph (
"at this moment the graph is", og_copy);
685 cout <<
"it is " << (og_copy.check() ?
"" :
"not ") <<
"consistent\n";
688 else costs+= el_costs; }
690 cout <<
"check_sequence failed because of different resulting graphs.\n";
692 write_graph (
"seq applied to og results in", og_copy);
697 cout <<
"check_sequence failed because of different elimination costs.\n";
698 cout <<
"current costs are " <<
ccosts << std::endl;
699 cout <<
"seq applied to og requires " << costs << std::endl;
709 if (!
og.check ())
return false;
710 if (!
cg.check ())
return false;
715 Ad_graph_t og_copy (
og);
717 for (
size_t c= 0; c <
seq.size(); c++) {
719 if (el_costs == 0)
return false;
else costs+= el_costs; }
720 cg= og_copy;
ccosts= costs;
return true; }
727 template <
typename Heuristic_t>
729 vector<El_spec_t> v1, v2;
750 vector<edge_ij_elim_t>& ev);
755 vector<triplet_t>& tv);
757 #ifdef USEXAIFBOOSTER
761 const list<EdgeRef_t>& edge_ref_list);
765 const list<EdgeRef_t>& edge_ref_list);
769 const list<EdgeRef_t>& edge_ref_list);
772 xaifBoosterCrossCountryInterface::JacobianAccumulationExpressionVertex& jaev,
774 const list<EdgeRef_t>& edge_ref_list);
778 list<EdgeRef_t>& edge_ref_list);
798 list<EdgeRef_t>& edge_ref_list,
799 xaifBoosterCrossCountryInterface::JacobianAccumulationExpressionList& jae_list);
818 list<EdgeRef_t>& edge_ref_list,
819 xaifBoosterCrossCountryInterface::JacobianAccumulationExpressionList& jae_list);
838 list<EdgeRef_t>& edge_ref_list,
839 xaifBoosterCrossCountryInterface::JacobianAccumulationExpressionList& jae_list);
873 #endif // USEXAIFBOOSTER
877 #endif // _eliminations_include_