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

Function getPrimalDualBasisErrors

highs/lp_data/HighsSolution.cpp:874–994  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

872}
873
874void getPrimalDualBasisErrors(const HighsOptions& options, const HighsLp& lp,
875 const HighsSolution& solution,
876 const HighsBasis& basis,
877 HighsPrimalDualErrors& primal_dual_errors) {
878 double primal_feasibility_tolerance = options.primal_feasibility_tolerance;
879 double dual_feasibility_tolerance = options.dual_feasibility_tolerance;
880 const bool& have_primal_solution = solution.value_valid;
881 const bool& have_dual_solution = solution.dual_valid;
882 const bool& have_basis = basis.valid;
883
884 // Check that there is no dual solution if there's no primal solution
885 assert(have_primal_solution || !have_dual_solution);
886
887 // Check that there is no basis if there's no dual solution
888 assert(have_dual_solution || !have_basis);
889
890 HighsInt& num_nonzero_basic_dual = primal_dual_errors.num_nonzero_basic_duals;
891 double& max_nonzero_basic_dual = primal_dual_errors.max_nonzero_basic_dual;
892 double& sum_nonzero_basic_dual = primal_dual_errors.sum_nonzero_basic_duals;
893
894 HighsInt& num_off_bound_nonbasic = primal_dual_errors.num_off_bound_nonbasic;
895 double& max_off_bound_nonbasic = primal_dual_errors.max_off_bound_nonbasic;
896 double& sum_off_bound_nonbasic = primal_dual_errors.sum_off_bound_nonbasic;
897
898 if (have_basis) {
899 num_nonzero_basic_dual = 0;
900 max_nonzero_basic_dual = 0;
901 sum_nonzero_basic_dual = 0;
902
903 num_off_bound_nonbasic = 0;
904 max_off_bound_nonbasic = 0;
905 sum_off_bound_nonbasic = 0;
906 } else {
907 num_nonzero_basic_dual = kHighsIllegalInfeasibilityCount;
908 max_nonzero_basic_dual = kHighsIllegalInfeasibilityMeasure;
909 sum_nonzero_basic_dual = kHighsIllegalInfeasibilityMeasure;
910
911 num_off_bound_nonbasic = kHighsIllegalInfeasibilityCount;
912 max_off_bound_nonbasic = kHighsIllegalInfeasibilityMeasure;
913 sum_off_bound_nonbasic = kHighsIllegalInfeasibilityMeasure;
914 }
915 // Without a primal solution or a basis, nothing can be done!
916 if (!have_primal_solution || !have_basis) return;
917 // Makes no sense to get primal dual basis failures without a primal
918 // solution, dual solution and basis
919 assert(have_primal_solution && have_dual_solution && have_basis);
920 double primal_infeasibility;
921 double relative_primal_infeasibility;
922 double dual_infeasibility;
923 double value_residual;
924 double lower;
925 double upper;
926 double value;
927 double dual = 0;
928 HighsBasisStatus status;
929 bool status_value_ok;
930 for (HighsInt iVar = 0; iVar < lp.num_col_ + lp.num_row_; iVar++) {
931 if (iVar < lp.num_col_) {

Callers 3

debugHighsSolutionFunction · 0.85
getKktFailuresFunction · 0.85
getLpKktFailuresFunction · 0.85

Calls 1

highsLogUserFunction · 0.85

Tested by

no test coverage detected