Skip to content

Commit a3eb935

Browse files
committed
wip
1 parent 16fe9ac commit a3eb935

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

check/TestPdlp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ TEST_CASE("pdlp-restart-add-row", "[pdlp]") {
333333
}
334334

335335
TEST_CASE("hi-pdlp", "[pdlp]") {
336-
std::string model = "afiro"; //"adlittle";//"afiro";// blend
336+
std::string model = "adlittle"; //"adlittle";//"afiro";//
337337
std::string model_file =
338338
std::string(HIGHS_DIR) + "/check/instances/" + model + ".mps";
339339
Highs h;
@@ -367,7 +367,7 @@ TEST_CASE("hi-pdlp", "[pdlp]") {
367367
if (cupdlp_test) {
368368
h.clearSolver();
369369
h.setOptionValue("solver", kCuPdlpString);
370-
370+
h.setOptionValue("pdlp_log_level", 2);
371371
run_status = h.run();
372372
}
373373
h.resetGlobalScheduler(true);

highs/pdlp/HiPdlpWrapper.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,20 @@ HighsStatus solveLpHiPdlp(const HighsOptions& options, HighsTimer& timer,
6666
return HighsStatus::kError;
6767
}
6868

69+
// print col_value and row_dual
70+
for (HighsInt i = 0; i < pdlp_solution.col_value.size(); i++)
71+
printf("x[%d]=%g\n", (int)i, pdlp_solution.col_value[i]);
72+
for (HighsInt i = 0; i < pdlp_solution.row_dual.size(); i++)
73+
printf("y[%d]=%g\n", (int)i, pdlp_solution.row_dual[i]);
74+
6975
// --- Print Summary ---
7076
pdlp.logSummary();
7177

7278
highs_info.pdlp_iteration_count = pdlp.getIterationCount();
7379

7480
model_status = HighsModelStatus::kUnknown;
7581
highs_solution.clear();
82+
highs_solution = pdlp_solution;
7683
highs_basis.valid = false;
7784

7885
const TerminationStatus termination_status = pdlp.getTerminationCode();
@@ -113,9 +120,9 @@ HighsStatus solveLpHiPdlp(const HighsOptions& options, HighsTimer& timer,
113120
}
114121
assert(termination_status == TerminationStatus::OPTIMAL ||
115122
termination_status == TerminationStatus::TIMEOUT);
116-
highs_solution.col_value = x;
123+
//highs_solution.col_value = x;
117124
highs_solution.col_value.resize(lp.num_col_);
118-
highs_solution.row_dual = y;
125+
//highs_solution.row_dual = y;
119126
lp.a_matrix_.product(highs_solution.row_value, highs_solution.col_value);
120127
lp.a_matrix_.productTranspose(highs_solution.col_dual,
121128
highs_solution.row_dual);

highs/pdlp/hipdlp/pdhg.cc

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ void PDLPSolver::preprocessLp() {
182182
}
183183

184184
scaling_.passLp(&processed_lp);
185+
unscaled_processed_lp_ = processed_lp; // store for postsolve
185186

186187
// 7. Convert COO matrix to CSC for the processed_lp
187188
//
@@ -250,25 +251,23 @@ PostSolveRetcode PDLPSolver::postprocess(HighsSolution& solution) {
250251
}
251252

252253
// 5. Recover Primal Row Values (Ax)
253-
HighsLp unscaled_processed_lp = lp_;
254-
255254
const std::vector<double>& row_scale = scaling_.GetRowScaling();
256255
const std::vector<double>& col_scale = scaling_.GetColScaling();
257256
if (scaling_.IsScaled()) {
258257
// Unscale matrix, costs, and rhs
259-
for (int iCol = 0; iCol < unscaled_processed_lp.num_col_; ++iCol) {
260-
unscaled_processed_lp.col_cost_[iCol] /= col_scale[iCol];
261-
for (int iEl = unscaled_processed_lp.a_matrix_.start_[iCol];
262-
iEl < unscaled_processed_lp.a_matrix_.start_[iCol + 1]; ++iEl) {
263-
int iRow = unscaled_processed_lp.a_matrix_.index_[iEl];
264-
unscaled_processed_lp.a_matrix_.value_[iEl] /=
258+
for (int iCol = 0; iCol < unscaled_processed_lp_.num_col_; ++iCol) {
259+
unscaled_processed_lp_.col_cost_[iCol] /= col_scale[iCol];
260+
for (int iEl = unscaled_processed_lp_.a_matrix_.start_[iCol];
261+
iEl < unscaled_processed_lp_.a_matrix_.start_[iCol + 1]; ++iEl) {
262+
int iRow = unscaled_processed_lp_.a_matrix_.index_[iEl];
263+
unscaled_processed_lp_.a_matrix_.value_[iEl] /=
265264
(row_scale[iRow] * col_scale[iCol]);
266265
}
267266
}
268267
}
269268

270-
std::vector<double> ax_current_(unscaled_processed_lp.num_row_);
271-
linalg::Ax(unscaled_processed_lp, x_current_, ax_current_);
269+
std::vector<double> ax_current_(unscaled_processed_lp_.num_row_);
270+
linalg::Ax(unscaled_processed_lp_, x_current_, ax_current_);
272271

273272
int slack_variable_idx = original_num_col_;
274273
for (int i = 0; i < original_lp_->num_row_; ++i) {

highs/pdlp/hipdlp/pdhg.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class PDLPSolver {
5555
// Problem data
5656
HighsLp lp_; // The problem to solve
5757
const HighsLp* original_lp_; // The original problem (for postsolve)
58+
HighsLp unscaled_processed_lp_;
5859
PrimalDualParams params_;
5960
Logger logger_;
6061
PdlpStep step_;

0 commit comments

Comments
 (0)