equal
deleted
inserted
replaced
34 ///Internal data structure to convert floating id's to fix one's |
34 ///Internal data structure to convert floating id's to fix one's |
35 |
35 |
36 ///\todo This might be implemented to be also usable in other places. |
36 ///\todo This might be implemented to be also usable in other places. |
37 class _FixId |
37 class _FixId |
38 { |
38 { |
|
39 protected: |
39 std::vector<int> index; |
40 std::vector<int> index; |
40 std::vector<int> cross; |
41 std::vector<int> cross; |
41 int first_free; |
42 int first_free; |
42 public: |
43 public: |
43 _FixId() : first_free(-1) {}; |
44 _FixId() : first_free(-1) {}; |
590 // virtual void _setObj(int length, |
591 // virtual void _setObj(int length, |
591 // int const * indices, |
592 // int const * indices, |
592 // Value const * values ) = 0; |
593 // Value const * values ) = 0; |
593 virtual SolveExitStatus _solve() = 0; |
594 virtual SolveExitStatus _solve() = 0; |
594 virtual Value _getPrimal(int i) = 0; |
595 virtual Value _getPrimal(int i) = 0; |
|
596 virtual Value _getDual(int i) = 0; |
595 virtual Value _getPrimalValue() = 0; |
597 virtual Value _getPrimalValue() = 0; |
596 virtual SolutionStatus _getPrimalStatus() = 0; |
598 virtual SolutionStatus _getPrimalStatus() = 0; |
597 virtual SolutionStatus _getDualStatus() = 0; |
599 virtual SolutionStatus _getDualStatus() = 0; |
598 ///\todo This could be implemented here, too, using _getPrimalStatus() and |
600 ///\todo This could be implemented here, too, using _getPrimalStatus() and |
599 ///_getDualStatus() |
601 ///_getDualStatus() |
706 std::vector<Value> values; |
708 std::vector<Value> values; |
707 indices.push_back(0); |
709 indices.push_back(0); |
708 values.push_back(0); |
710 values.push_back(0); |
709 for(DualExpr::const_iterator i=e.begin(); i!=e.end(); ++i) |
711 for(DualExpr::const_iterator i=e.begin(); i!=e.end(); ++i) |
710 if((*i).second!=0) { ///\bug EPSILON would be necessary here!!! |
712 if((*i).second!=0) { ///\bug EPSILON would be necessary here!!! |
711 indices.push_back(cols.floatingId((*i).first.id)); |
713 indices.push_back(rows.floatingId((*i).first.id)); |
712 values.push_back((*i).second); |
714 values.push_back((*i).second); |
713 } |
715 } |
714 _setColCoeffs(cols.floatingId(c.id),indices.size()-1, |
716 _setColCoeffs(cols.floatingId(c.id),indices.size()-1, |
715 &indices[0],&values[0]); |
717 &indices[0],&values[0]); |
716 } |
718 } |
999 |
1001 |
1000 ///\e |
1002 ///\e |
1001 Value primal(Col c) { return _getPrimal(cols.floatingId(c.id)); } |
1003 Value primal(Col c) { return _getPrimal(cols.floatingId(c.id)); } |
1002 |
1004 |
1003 ///\e |
1005 ///\e |
|
1006 Value dual(Row r) { return _getDual(rows.floatingId(r.id)); } |
|
1007 |
|
1008 ///\e |
1004 |
1009 |
1005 ///\return |
1010 ///\return |
1006 ///- \ref INF or -\ref INF means either infeasibility or unboundedness |
1011 ///- \ref INF or -\ref INF means either infeasibility or unboundedness |
1007 /// of the primal problem, depending on whether we minimize or maximize. |
1012 /// of the primal problem, depending on whether we minimize or maximize. |
1008 ///- \ref NaN if no primal solution is found. |
1013 ///- \ref NaN if no primal solution is found. |