/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* This file is part of the HiGHS linear optimization suite */ /* */ /* Available as open-source under the MIT License */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**@file lp_data/HighsLp.h * @brief */ #ifndef LP_DATA_HIGHS_LP_H_ #define LP_DATA_HIGHS_LP_H_ #include #include "lp_data/HStruct.h" #include "util/HighsSparseMatrix.h" class HighsLp { public: HighsLp() { clear(); } // Model data HighsInt num_col_; HighsInt num_row_; std::vector col_cost_; std::vector col_lower_; std::vector col_upper_; std::vector row_lower_; std::vector row_upper_; HighsSparseMatrix a_matrix_; ObjSense sense_; double offset_; std::string model_name_; std::string objective_name_; HighsInt new_col_name_ix_ = 0; HighsInt new_row_name_ix_ = 0; std::vector col_names_; std::vector row_names_; std::vector integrality_; HighsNameHash col_hash_; HighsNameHash row_hash_; HighsInt user_bound_scale_; HighsInt user_cost_scale_; HighsScale scale_; bool is_scaled_; bool is_moved_; HighsInt cost_row_location_; bool has_infinite_cost_; HighsLpMods mods_; bool operator==(const HighsLp& lp) const; bool equalButForNames(const HighsLp& lp) const; bool equalButForScalingAndNames(const HighsLp& lp) const; bool equalNames(const HighsLp& lp) const; bool equalScaling(const HighsLp& lp) const; bool isMip() const; bool hasSemiVariables() const; bool hasInfiniteCost(const double infinite_cost) const; bool hasMods() const; bool needsMods(const double infinite_cost) const; double objectiveValue(const std::vector& solution) const; HighsCDouble objectiveCDoubleValue(const std::vector& solution) const; void setMatrixDimensions(); void setFormat(const MatrixFormat format); void ensureColwise() { this->a_matrix_.ensureColwise(); }; void ensureRowwise() { this->a_matrix_.ensureRowwise(); }; void clearScaling(); void resetScale(); void clearScale(); void applyScale(); void unapplyScale(); void moveBackLpAndUnapplyScaling(HighsLp& lp); bool userBoundScaleOk(const HighsInt user_bound_scale, const double infinite_bound) const; void userBoundScale(const HighsInt user_bound_scale); bool userCostScaleOk(const HighsInt user_cost_scale, const double infinite_cost) const; void userCostScale(const HighsInt user_cost_scale); void exactResize(); void addColNames(const std::string name, const HighsInt num_new_col = 1); void addRowNames(const std::string name, const HighsInt num_new_row = 1); void deleteColsFromVectors(HighsInt& new_num_col, const HighsIndexCollection& index_collection); void deleteRowsFromVectors(HighsInt& new_num_row, const HighsIndexCollection& index_collection); void deleteCols(const HighsIndexCollection& index_collection); void deleteRows(const HighsIndexCollection& index_collection); void unapplyMods(); void clear(); }; #endif