33#include " Highs.h"
44#include " SpecialLps.h"
55#include " catch.hpp"
6+ #include < chrono>
67
78const bool dev_run = false ;
89const double double_equal_tolerance = 1e-3 ;
@@ -333,30 +334,42 @@ TEST_CASE("pdlp-restart-add-row", "[pdlp]") {
333334}
334335
335336TEST_CASE (" hi-pdlp" , " [pdlp]" ) {
336- std::string model = " afiro " ; // "adlittle";//"afiro";//
337+ std::string model = " adlittle " ; // "adlittle";//"afiro";// shell// stair //25fv47 //fit2p
337338 std::string model_file =
338339 std::string (HIGHS_DIR) + " /check/instances/" + model + " .mps" ;
339340 Highs h;
340341 // h.setOptionValue("output_flag", dev_run);
341342 REQUIRE (h.readModel (model_file) == HighsStatus::kOk );
342343 h.setOptionValue (" solver" , kHiPdlpString );
343344 h.setOptionValue (" kkt_tolerance" , kkt_tolerance);
345+ h.setOptionValue (" presolve" , " off" );
344346
345- HighsInt pdlp_features_off =
346- // kPdlpScalingOff +
347- kPdlpRestartOff + kPdlpAdaptiveStepSizeOff ;
347+ HighsInt pdlp_features_off =
348+ // kPdlpScalingOff +
349+ // kPdlpRestartOff
350+ kPdlpAdaptiveStepSizeOff
351+ ;
348352 h.setOptionValue (" pdlp_features_off" , pdlp_features_off);
349353
350354 HighsInt pdlp_scaling = // 0;
351355 kPdlpScalingRuiz
352356 // + kPdlpScalingL2
353357 + kPdlpScalingPC ;
354358 h.setOptionValue (" pdlp_scaling_mode" , pdlp_scaling);
355- h.setOptionValue (" pdlp_step_size_strategy" , 0 );
359+ h.setOptionValue (" pdlp_step_size_strategy" , 1 );
356360 h.setOptionValue (" pdlp_restart_strategy" , 2 );
357- // h.setOptionValue("pdlp_iteration_limit", 15 );
361+ h.setOptionValue (" pdlp_iteration_limit" ,3520 );
358362 // h.setOptionValue("log_dev_level", kHighsLogDevLevelVerbose);
363+ auto start_hipdlp = std::chrono::high_resolution_clock::now ();
359364 HighsStatus run_status = h.run ();
365+ auto end_hipdlp = std::chrono::high_resolution_clock::now ();
366+ auto duration_hipdlp = std::chrono::duration_cast<std::chrono::milliseconds>(end_hipdlp - start_hipdlp);
367+ std::cout << " \n --- HiPDLP Results ---" << std::endl;
368+ std::cout << " Status: " << h.modelStatusToString (h.getModelStatus ()) << std::endl;
369+ std::cout << " Iterations: " << h.getInfo ().pdlp_iteration_count << std::endl;
370+ std::cout << " Wall time: " << duration_hipdlp.count () / 1000.0 << " seconds" << std::endl;
371+ std::cout << " Objective: " << h.getInfo ().objective_function_value << std::endl;
372+
360373 // REQUIRE(run_status == HighsStatus::kOk);
361374 // REQUIRE(h.getModelStatus() == HighsModelStatus::kOptimal);
362375 // REQUIRE(h.getInfo().pdlp_iteration_count == 11880);
@@ -365,7 +378,15 @@ TEST_CASE("hi-pdlp", "[pdlp]") {
365378 h.clearSolver ();
366379 h.setOptionValue (" solver" , kCuPdlpString );
367380 h.setOptionValue (" pdlp_log_level" , 2 );
381+ auto start_cupdlp = std::chrono::high_resolution_clock::now ();
368382 run_status = h.run ();
383+ auto end_cupdlp = std::chrono::high_resolution_clock::now ();
384+ auto duration_cupdlp = std::chrono::duration_cast<std::chrono::milliseconds>(end_cupdlp - start_cupdlp);
385+ std::cout << " \n --- cuPDLP Results ---" << std::endl;
386+ std::cout << " Status: " << h.modelStatusToString (h.getModelStatus ()) << std::endl;
387+ std::cout << " Iterations: " << h.getInfo ().pdlp_iteration_count << std::endl;
388+ std::cout << " Wall time: " << duration_cupdlp.count () / 1000.0 << " seconds" << std::endl;
389+ std::cout << " Objective: " << h.getInfo ().objective_function_value << std::endl;
369390 }
370391 h.resetGlobalScheduler (true );
371392}
0 commit comments