1156 ///@} |
1156 ///@} |
1157 |
1157 |
1158 }; |
1158 }; |
1159 |
1159 |
1160 |
1160 |
1161 ///Common base class for ILP solvers |
1161 ///Common base class for MIP solvers |
1162 ///\todo Much more docs |
1162 ///\todo Much more docs |
1163 ///\ingroup gen_opt_group |
1163 ///\ingroup gen_opt_group |
1164 class MipSolverBase : virtual public LpSolverBase{ |
1164 class MipSolverBase : virtual public LpSolverBase{ |
1165 public: |
1165 public: |
1166 |
1166 |
1167 ///Set the type of the given Col to integer or remove that property. |
1167 ///Possible variable (coloumn) types (e.g. real, integer, binary etc.) |
1168 /// |
1168 enum ColTypes { |
1169 ///Set the type of the given Col to integer or remove that property. |
1169 ///Continuous variable |
|
1170 REAL = 0, |
|
1171 ///Integer variable |
|
1172 INTEGER = 1 |
|
1173 ///\todo No support for other types yet. |
|
1174 }; |
|
1175 |
|
1176 ///Sets the type of the given coloumn to the given type |
|
1177 /// |
|
1178 ///Sets the type of the given coloumn to the given type. |
|
1179 void colType(Col c, ColTypes col_type) { |
|
1180 _colType(cols.floatingId(c.id),col_type); |
|
1181 } |
|
1182 |
|
1183 ///Gives back the type of the column. |
|
1184 /// |
|
1185 ///Gives back the type of the column. |
|
1186 ColTypes colType(Col c){ |
|
1187 return _colType(cols.floatingId(c.id)); |
|
1188 } |
|
1189 |
|
1190 ///Sets the type of the given Col to integer or remove that property. |
|
1191 /// |
|
1192 ///Sets the type of the given Col to integer or remove that property. |
1170 void integer(Col c, bool enable) { |
1193 void integer(Col c, bool enable) { |
1171 _integer(cols.floatingId(c.id),enable); |
1194 if (enable) |
1172 } |
1195 colType(c,INTEGER); |
1173 |
1196 else |
1174 ///Gives back the type of the column. |
1197 colType(c,REAL); |
|
1198 } |
|
1199 |
|
1200 ///Gives back whether the type of the column is integer or not. |
1175 /// |
1201 /// |
1176 ///Gives back the type of the column. |
1202 ///Gives back the type of the column. |
1177 ///\return true if the column has integer type and false if not. |
1203 ///\return true if the column has integer type and false if not. |
1178 bool integer(Col c){ |
1204 bool integer(Col c){ |
1179 return _integer(cols.floatingId(c.id)); |
1205 return (colType(c)==INTEGER); |
1180 } |
1206 } |
1181 |
1207 |
1182 protected: |
1208 protected: |
1183 |
1209 |
1184 virtual bool _integer(int col) = 0; |
1210 virtual ColTypes _colType(int col) = 0; |
1185 virtual void _integer(int col, bool enable) = 0; |
1211 virtual void _colType(int col, ColTypes col_type) = 0; |
|
1212 |
1186 }; |
1213 }; |
1187 |
1214 |
1188 ///\relates LpSolverBase::Expr |
1215 ///\relates LpSolverBase::Expr |
1189 /// |
1216 /// |
1190 inline LpSolverBase::Expr operator+(const LpSolverBase::Expr &a, |
1217 inline LpSolverBase::Expr operator+(const LpSolverBase::Expr &a, |