# HG changeset patch # User alpar # Date 1165237994 0 # Node ID e23a610bed51f0cfd04213e00b3443158cd67c3f # Parent 4e8ecce96b1263c9ace5ea62770af36168cb4e61 Copy constructor for LpGlpk diff -r 4e8ecce96b12 -r e23a610bed51 lemon/lp_glpk.cc --- a/lemon/lp_glpk.cc Thu Nov 30 16:40:09 2006 +0000 +++ b/lemon/lp_glpk.cc Mon Dec 04 13:13:14 2006 +0000 @@ -31,6 +31,37 @@ messageLevel(0); } + LpGlpk::LpGlpk(const LpGlpk &glp) : Parent(glp), + lp(lpx_create_prob()) { + ///\todo constrol function for this: + lpx_set_int_parm(lp, LPX_K_DUAL, 1); + messageLevel(0); + //Coefficient matrix, row bounds + lpx_add_rows(lp, lpx_get_num_rows(glp.lp)); + lpx_add_cols(lp, lpx_get_num_cols(glp.lp)); + int len; + int ind[1+lpx_get_num_cols(glp.lp)]; + Value val[1+lpx_get_num_cols(glp.lp)]; + for (int i=1;i<=lpx_get_num_rows(glp.lp);++i) + { + len=lpx_get_mat_row(glp.lp,i,ind,val); + lpx_set_mat_row(lp, i,len,ind,val); + lpx_set_row_bnds(lp,i,lpx_get_row_type(glp.lp,i), + lpx_get_row_lb(glp.lp,i),lpx_get_row_ub(glp.lp,i)); + } + + //Objective function, coloumn bounds + lpx_set_obj_dir(lp, lpx_get_obj_dir(glp.lp)); + //Objectif function's constant term treated separately + lpx_set_obj_coef(lp,0,lpx_get_obj_coef(glp.lp,0)); + for (int i=1;i<=lpx_get_num_cols(glp.lp);++i) + { + lpx_set_obj_coef(lp,i,lpx_get_obj_coef(glp.lp,i)); + lpx_set_col_bnds(lp,i,lpx_get_col_type(glp.lp,i), + lpx_get_col_lb(glp.lp,i),lpx_get_col_ub(glp.lp,i)); + } + } + LpGlpk::~LpGlpk() { lpx_delete_prob(lp); } @@ -47,7 +78,7 @@ LpSolverBase &LpGlpk::_newLp() { - LpGlpk* newlp=new LpGlpk(); + LpGlpk* newlp=new LpGlpk; return *newlp; } @@ -55,33 +86,7 @@ LpSolverBase &LpGlpk::_copyLp() { - LpGlpk* newlp=new LpGlpk(); - - //Coefficient matrix, row bounds - lpx_add_rows(newlp->lp, lpx_get_num_rows(lp)); - lpx_add_cols(newlp->lp, lpx_get_num_cols(lp)); - int len; - int ind[1+lpx_get_num_cols(lp)]; - Value val[1+lpx_get_num_cols(lp)]; - for (int i=1;i<=lpx_get_num_rows(lp);++i){ - len=lpx_get_mat_row(lp,i,ind,val); - lpx_set_mat_row(newlp->lp, i,len,ind,val); - lpx_set_row_bnds(newlp->lp,i,lpx_get_row_type(lp,i), - lpx_get_row_lb(lp,i),lpx_get_row_ub(lp,i)); - } - - //Objective function, coloumn bounds - lpx_set_obj_dir(newlp->lp, lpx_get_obj_dir(lp)); - //Objectif function's constant term treated separately - lpx_set_obj_coef(newlp->lp,0,lpx_get_obj_coef(lp,0)); - for (int i=1;i<=lpx_get_num_cols(lp);++i){ - lpx_set_obj_coef(newlp->lp,i,lpx_get_obj_coef(lp,i)); - lpx_set_col_bnds(newlp->lp,i,lpx_get_col_type(lp,i), - lpx_get_col_lb(lp,i),lpx_get_col_ub(lp,i)); - - - } - + LpGlpk* newlp=new LpGlpk(*this); return *newlp; } diff -r 4e8ecce96b12 -r e23a610bed51 lemon/lp_glpk.h --- a/lemon/lp_glpk.h Thu Nov 30 16:40:09 2006 +0000 +++ b/lemon/lp_glpk.h Mon Dec 04 13:13:14 2006 +0000 @@ -44,6 +44,7 @@ typedef LpSolverBase Parent; LpGlpk(); + LpGlpk(const LpGlpk &); ~LpGlpk(); protected: @@ -108,7 +109,8 @@ /// ///The presolver is off by default. void presolver(bool b); - + + LPX *lpx() {return lp;} }; } //END OF NAMESPACE LEMON