MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / testUnboundedMpsLp

Function testUnboundedMpsLp

check/TestRays.cpp:377–430  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

375}
376
377void testUnboundedMpsLp(const std::string model,
378 const ObjSense sense = ObjSense::kMinimize) {
379 Highs highs;
380 if (!dev_run) highs.setOptionValue("output_flag", false);
381 if (dev_run) highs.setOptionValue("log_dev_level", 1);
382
383 std::string model_file;
384 HighsLp lp;
385 HighsModelStatus require_model_status;
386 HighsStatus require_status;
387 bool has_dual_ray;
388 bool has_primal_ray;
389 vector<double> dual_ray_value;
390 vector<double> primal_ray_value;
391 REQUIRE(highs.setOptionValue("presolve", "off") == HighsStatus::kOk);
392
393 // Test dual ray for unbounded LP
394 model_file = std::string(HIGHS_DIR) + "/check/instances/" + model + ".mps";
395 require_model_status = HighsModelStatus::kUnbounded;
396 // gas11 contains small nonzero matrix entries, so readModel yield
397 // HighsStatus::kWarning
398 require_status = model == "gas11" ? HighsStatus::kWarning : HighsStatus::kOk;
399 REQUIRE(highs.readModel(model_file) == require_status);
400 REQUIRE(highs.changeObjectiveSense(sense) == HighsStatus::kOk);
401 lp = highs.getLp();
402 lp.model_name_ = model;
403 REQUIRE(highs.setBasis() == HighsStatus::kOk);
404 REQUIRE(highs.run() == HighsStatus::kOk);
405
406 if (dev_run)
407 printf("Solved %s with presolve: status = %s\n", lp.model_name_.c_str(),
408 highs.modelStatusToString(highs.getModelStatus()).c_str());
409 REQUIRE(highs.getModelStatus() == require_model_status);
410
411 // Check that there is no dual ray
412 REQUIRE(highs.getDualRay(has_dual_ray) == HighsStatus::kOk);
413 REQUIRE(!has_dual_ray);
414 // ... even if forcing
415 dual_ray_value.resize(lp.num_row_);
416 REQUIRE(highs.getDualRay(has_dual_ray, dual_ray_value.data()) ==
417 HighsStatus::kOk);
418 REQUIRE(!has_dual_ray);
419
420 // Check that there is a primal ray
421 primal_ray_value.resize(lp.num_col_);
422 REQUIRE(highs.getPrimalRay(has_primal_ray) == HighsStatus::kOk);
423 REQUIRE(has_primal_ray);
424 REQUIRE(highs.getPrimalRay(has_primal_ray, primal_ray_value.data()) ==
425 HighsStatus::kOk);
426 REQUIRE(has_primal_ray);
427 REQUIRE(checkPrimalRayValue(highs, primal_ray_value));
428
429 highs.resetGlobalScheduler(true);
430}
431
432TEST_CASE("Rays", "[highs_test_rays]") {
433 Highs highs;

Callers 1

TestRays.cppFile · 0.85

Calls 13

checkPrimalRayValueFunction · 0.85
c_strMethod · 0.80
modelStatusToStringMethod · 0.80
getDualRayMethod · 0.80
dataMethod · 0.80
getPrimalRayMethod · 0.80
resetGlobalSchedulerMethod · 0.80
setOptionValueMethod · 0.45
readModelMethod · 0.45
changeObjectiveSenseMethod · 0.45
setBasisMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected