Solution LpsolveAdaptator::getSolution(lprec * lp) { Solution sol = Solution(); REAL row[get_Norig_columns(lp)]; #ifdef DEBUG set_verbose(lp, NORMAL); write_LP(lp, stdout); #else set_verbose(lp, CRITICAL); #endif solve(lp); // WARNING possible conversion failure from double to float sol.setZ(get_objective(lp)); get_variables(lp, row); #ifdef DEBUG for(int j = 0; j < get_Norig_columns(lp); j++) { printf("%s: %f\n", get_col_name(lp, j + 1), row[j]); } #endif for (int i = 0; i < get_Norig_columns(lp); i++) { double var_value = (double)row[i]; sol.addVariable(var_value); } delete_lp(lp); return sol; }
int main( ) { double x[state_dim+1]; double objective[state_dim+1] = {0, -2.5, -5.0, -3.4}; double ieq_coeff[ieq_dim] = {425, 400, 600}; double ieq_matrix[ieq_dim][state_dim+1] = {{0,2,10,4}, {0,6,5,8}, {0, 7, 10, 8}}; double eq_coeff[eq_dim]; // = {30}; double eq_matrix[eq_dim][state_dim+1]; // lprec *lp; // lp = make_lp(eq_dim+ieq_dim, state_dim); set_obj_fn (lp, objective); for(int i=0; i<ieq_dim; i++) { add_constraint( lp, ieq_matrix[i], LE, ieq_coeff[i] ); } for(int i=0; i<eq_dim; i++) { add_constraint( lp, eq_matrix[i], EQ, eq_coeff[i] ); } // set_verbose(lp, 0); set_presolve(lp, PRESOLVE_ROWS | PRESOLVE_COLS | PRESOLVE_LINDEP, get_presolveloops(lp)); solve(lp); // std::cout << "f : " << get_objective(lp) << std::endl; std::cout << "x :" ; double col0 = get_Norig_columns(lp); double row0 = get_Norig_rows(lp); for(int i = 1; i <= col0; i++) { double _x = get_var_primalresult(lp, row0 + i); std::cout << " " << _x ; } std::cout << std::endl; }