1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
#include "HCheckConfig.h"
#include "Highs.h"
#include "SpecialLps.h"
#include "catch.hpp"
#include "lp_data/HConst.h"
const bool dev_run = false;
void ekk_solve(Highs& highs, std::string presolve,
const HighsModelStatus require_model_status,
const double require_optimal_objective = 0) {
SpecialLps special_lps;
if (!dev_run) highs.setOptionValue("output_flag", false);
const HighsInfo& info = highs.getInfo();
REQUIRE(highs.setOptionValue("simplex_strategy", kSimplexStrategyDual) ==
HighsStatus::kOk);
REQUIRE(highs.setOptionValue("presolve", presolve) == HighsStatus::kOk);
REQUIRE(highs.setBasis() == HighsStatus::kOk);
REQUIRE(highs.run() == HighsStatus::kOk);
REQUIRE(highs.getModelStatus() == require_model_status);
if (require_model_status == HighsModelStatus::kOptimal) {
REQUIRE(special_lps.objectiveOk(info.objective_function_value,
require_optimal_objective, dev_run));
}
REQUIRE(highs.resetOptions() == HighsStatus::kOk);
}
void ekk_distillation(Highs& highs) {
SpecialLps special_lps;
special_lps.reportLpName("distillation", dev_run);
HighsLp lp;
HighsModelStatus require_model_status;
double optimal_objective;
special_lps.distillationLp(lp, require_model_status, optimal_objective);
REQUIRE(highs.passModel(lp) == HighsStatus::kOk);
ekk_solve(highs, "on", require_model_status, optimal_objective);
}
void ekk_blending(Highs& highs) {
SpecialLps special_lps;
special_lps.reportLpName("blending", dev_run);
HighsLp lp;
HighsModelStatus require_model_status;
double optimal_objective;
special_lps.blendingLp(lp, require_model_status, optimal_objective);
REQUIRE(highs.passModel(lp) == HighsStatus::kOk);
ekk_solve(highs, "on", require_model_status, optimal_objective);
}
void ekk_scipLpi3(Highs& highs) {
SpecialLps special_lps;
special_lps.reportLpName("scipLpi3", dev_run);
HighsLp lp;
HighsModelStatus require_model_status;
special_lps.scipLpi3Lp(lp, require_model_status);
REQUIRE(highs.passModel(lp) == HighsStatus::kOk);
ekk_solve(highs, "off", require_model_status);
}
TEST_CASE("Ekk", "[highs_test_ekk]") {
Highs highs;
if (!dev_run) highs.setOptionValue("output_flag", false);
HighsLp lp;
const bool from_file = true;
if (from_file) {
std::string model_file =
std::string(HIGHS_DIR) + "/check/instances/25fv47.mps";
// "/check/instances/adlittle.mps";
REQUIRE(highs.readModel(model_file) == HighsStatus::kOk);
REQUIRE(highs.setOptionValue("simplex_strategy", kSimplexStrategyDual) ==
HighsStatus::kOk);
highs.setOptionValue("log_dev_level", kHighsLogDevLevelDetailed);
REQUIRE(highs.run() == HighsStatus::kOk);
} else {
// ekk_distillation(highs);
ekk_blending(highs);
// ekk_scipLpi3(highs);
}
}
TEST_CASE("EkkPrimal-all", "[highs_test_ekk]") {
Highs highs;
if (!dev_run) highs.setOptionValue("output_flag", false);
ekk_distillation(highs);
ekk_blending(highs);
}
|