diff -r 8e85e6bbefdf -r e0beb94d08bf lemon/lp_glpk.cc --- a/lemon/lp_glpk.cc Mon May 23 04:48:14 2005 +0000 +++ b/lemon/lp_glpk.cc Thu May 26 12:16:16 2005 +0000 @@ -24,25 +24,6 @@ namespace lemon { - ///\e - - ///\bug Unimplemented! - /// - LpSolverBase &LpGlpk::_newLp() - { - LpSolverBase *tmp=0; - return *tmp; - } - - ///\e - - ///\bug Unimplemented! - /// - LpSolverBase &LpGlpk::_copyLp() - { - LpSolverBase *tmp=0; - return *tmp; - } LpGlpk::LpGlpk() : Parent(), lp(lpx_create_prob()) { @@ -62,6 +43,49 @@ return i; } + ///\e + + + LpSolverBase &LpGlpk::_newLp() + { + LpGlpk* newlp=new LpGlpk(); + return *newlp; + } + + ///\e + + 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)); + + + } + + return *newlp; + } + int LpGlpk::_addRow() { int i=lpx_add_rows(lp, 1); return i;