| ... | ... |
@@ -1022,98 +1022,98 @@ |
| 1022 | 1022 |
///\code |
| 1023 | 1023 |
///ListGraph::NodeMap<LpBase::Col> |
| 1024 | 1024 |
///ListGraph::ArcMap<LpBase::Col> |
| 1025 | 1025 |
///\endcode |
| 1026 | 1026 |
///\return The number of the created column. |
| 1027 | 1027 |
#ifdef DOXYGEN |
| 1028 | 1028 |
template<class T> |
| 1029 | 1029 |
int addColSet(T &t) { return 0;}
|
| 1030 | 1030 |
#else |
| 1031 | 1031 |
template<class T> |
| 1032 | 1032 |
typename enable_if<typename T::value_type::LpCol,int>::type |
| 1033 | 1033 |
addColSet(T &t,dummy<0> = 0) {
|
| 1034 | 1034 |
int s=0; |
| 1035 | 1035 |
for(typename T::iterator i=t.begin();i!=t.end();++i) {*i=addCol();s++;}
|
| 1036 | 1036 |
return s; |
| 1037 | 1037 |
} |
| 1038 | 1038 |
template<class T> |
| 1039 | 1039 |
typename enable_if<typename T::value_type::second_type::LpCol, |
| 1040 | 1040 |
int>::type |
| 1041 | 1041 |
addColSet(T &t,dummy<1> = 1) {
|
| 1042 | 1042 |
int s=0; |
| 1043 | 1043 |
for(typename T::iterator i=t.begin();i!=t.end();++i) {
|
| 1044 | 1044 |
i->second=addCol(); |
| 1045 | 1045 |
s++; |
| 1046 | 1046 |
} |
| 1047 | 1047 |
return s; |
| 1048 | 1048 |
} |
| 1049 | 1049 |
template<class T> |
| 1050 | 1050 |
typename enable_if<typename T::MapIt::Value::LpCol, |
| 1051 | 1051 |
int>::type |
| 1052 | 1052 |
addColSet(T &t,dummy<2> = 2) {
|
| 1053 | 1053 |
int s=0; |
| 1054 | 1054 |
for(typename T::MapIt i(t); i!=INVALID; ++i) |
| 1055 | 1055 |
{
|
| 1056 | 1056 |
i.set(addCol()); |
| 1057 | 1057 |
s++; |
| 1058 | 1058 |
} |
| 1059 | 1059 |
return s; |
| 1060 | 1060 |
} |
| 1061 | 1061 |
#endif |
| 1062 | 1062 |
|
| 1063 | 1063 |
///Set a column (i.e a dual constraint) of the LP |
| 1064 | 1064 |
|
| 1065 | 1065 |
///\param c is the column to be modified |
| 1066 | 1066 |
///\param e is a dual linear expression (see \ref DualExpr) |
| 1067 | 1067 |
///a better one. |
| 1068 | 1068 |
void col(Col c, const DualExpr &e) {
|
| 1069 | 1069 |
e.simplify(); |
| 1070 |
_setColCoeffs(cols(id(c)), ExprIterator(e.comps.begin(), cols), |
|
| 1071 |
ExprIterator(e.comps.end(), cols)); |
|
| 1070 |
_setColCoeffs(cols(id(c)), ExprIterator(e.comps.begin(), rows), |
|
| 1071 |
ExprIterator(e.comps.end(), rows)); |
|
| 1072 | 1072 |
} |
| 1073 | 1073 |
|
| 1074 | 1074 |
///Get a column (i.e a dual constraint) of the LP |
| 1075 | 1075 |
|
| 1076 | 1076 |
///\param c is the column to get |
| 1077 | 1077 |
///\return the dual expression associated to the column |
| 1078 | 1078 |
DualExpr col(Col c) const {
|
| 1079 | 1079 |
DualExpr e; |
| 1080 | 1080 |
_getColCoeffs(cols(id(c)), InsertIterator(e.comps, rows)); |
| 1081 | 1081 |
return e; |
| 1082 | 1082 |
} |
| 1083 | 1083 |
|
| 1084 | 1084 |
///Add a new column to the LP |
| 1085 | 1085 |
|
| 1086 | 1086 |
///\param e is a dual linear expression (see \ref DualExpr) |
| 1087 | 1087 |
///\param o is the corresponding component of the objective |
| 1088 | 1088 |
///function. It is 0 by default. |
| 1089 | 1089 |
///\return The created column. |
| 1090 | 1090 |
Col addCol(const DualExpr &e, Value o = 0) {
|
| 1091 | 1091 |
Col c=addCol(); |
| 1092 | 1092 |
col(c,e); |
| 1093 | 1093 |
objCoeff(c,o); |
| 1094 | 1094 |
return c; |
| 1095 | 1095 |
} |
| 1096 | 1096 |
|
| 1097 | 1097 |
///Add a new empty row (i.e a new constraint) to the LP |
| 1098 | 1098 |
|
| 1099 | 1099 |
///This function adds a new empty row (i.e a new constraint) to the LP. |
| 1100 | 1100 |
///\return The created row |
| 1101 | 1101 |
Row addRow() { Row r; r._id = _addRowId(_addRow()); return r;}
|
| 1102 | 1102 |
|
| 1103 | 1103 |
///\brief Add several new rows (i.e constraints) at once |
| 1104 | 1104 |
/// |
| 1105 | 1105 |
///This magic function takes a container as its argument and fills |
| 1106 | 1106 |
///its elements with new row (i.e. variables) |
| 1107 | 1107 |
///\param t can be |
| 1108 | 1108 |
///- a standard STL compatible iterable container with |
| 1109 | 1109 |
///\ref Row as its \c values_type like |
| 1110 | 1110 |
///\code |
| 1111 | 1111 |
///std::vector<LpBase::Row> |
| 1112 | 1112 |
///std::list<LpBase::Row> |
| 1113 | 1113 |
///\endcode |
| 1114 | 1114 |
///- a standard STL compatible iterable container with |
| 1115 | 1115 |
///\ref Row as its \c mapped_type like |
| 1116 | 1116 |
///\code |
| 1117 | 1117 |
///std::map<AnyType,LpBase::Row> |
| 1118 | 1118 |
///\endcode |
| 1119 | 1119 |
///- an iterable lemon \ref concepts::WriteMap "write map" like |
0 comments (0 inline)