| 774 | } |
| 775 | |
| 776 | void HighsSimplexAnalysis::summaryReport() { |
| 777 | assert(analyse_simplex_summary_data); |
| 778 | HighsInt AnIterNumIter = simplex_iteration_count - AnIterIt0; |
| 779 | if (AnIterNumIter <= 0) return; |
| 780 | printf("\nAnalysis of %" HIGHSINT_FORMAT " iterations (%" HIGHSINT_FORMAT |
| 781 | " to %" HIGHSINT_FORMAT ")\n", |
| 782 | AnIterNumIter, AnIterIt0 + 1, simplex_iteration_count); |
| 783 | if (AnIterNumIter <= 0) return; |
| 784 | HighsInt lc_EdWtNumIter; |
| 785 | lc_EdWtNumIter = AnIterNumEdWtIt[(HighsInt)EdgeWeightMode::kSteepestEdge]; |
| 786 | if (lc_EdWtNumIter > 0) |
| 787 | printf("DSE for %12" HIGHSINT_FORMAT " (%3" HIGHSINT_FORMAT |
| 788 | "%%) iterations\n", |
| 789 | lc_EdWtNumIter, (100 * lc_EdWtNumIter) / AnIterNumIter); |
| 790 | lc_EdWtNumIter = AnIterNumEdWtIt[(HighsInt)EdgeWeightMode::kDevex]; |
| 791 | if (lc_EdWtNumIter > 0) |
| 792 | printf("Dvx for %12" HIGHSINT_FORMAT " (%3" HIGHSINT_FORMAT |
| 793 | "%%) iterations\n", |
| 794 | lc_EdWtNumIter, (100 * lc_EdWtNumIter) / AnIterNumIter); |
| 795 | lc_EdWtNumIter = AnIterNumEdWtIt[(HighsInt)EdgeWeightMode::kDantzig]; |
| 796 | if (lc_EdWtNumIter > 0) |
| 797 | printf("Dan for %12" HIGHSINT_FORMAT " (%3" HIGHSINT_FORMAT |
| 798 | "%%) iterations\n", |
| 799 | lc_EdWtNumIter, (100 * lc_EdWtNumIter) / AnIterNumIter); |
| 800 | for (HighsInt k = 0; k < kNumSimplexNlaOperation; k++) { |
| 801 | AnIterOpRec& AnIter = AnIterOp[k]; |
| 802 | HighsInt lcNumCa = AnIter.AnIterOpNumCa; |
| 803 | printf("\n%-10s performed %" HIGHSINT_FORMAT " times\n", |
| 804 | AnIter.AnIterOpName.c_str(), AnIter.AnIterOpNumCa); |
| 805 | if (lcNumCa > 0) { |
| 806 | HighsInt lcHyperOp = AnIter.AnIterOpNumHyperOp; |
| 807 | HighsInt lcHyperRs = AnIter.AnIterOpNumHyperRs; |
| 808 | HighsInt pctHyperOp = (100 * lcHyperOp) / lcNumCa; |
| 809 | HighsInt pctHyperRs = (100 * lcHyperRs) / lcNumCa; |
| 810 | double lcRsDensity = |
| 811 | pow(10.0, AnIter.AnIterOpSumLog10RsDensity / lcNumCa); |
| 812 | HighsInt lcAnIterOpRsDim = AnIter.AnIterOpRsDim; |
| 813 | HighsInt lcNumNNz = lcRsDensity * lcAnIterOpRsDim; |
| 814 | printf("%12" HIGHSINT_FORMAT |
| 815 | " hyper-sparse operations (%3" HIGHSINT_FORMAT "%%)\n", |
| 816 | lcHyperOp, pctHyperOp); |
| 817 | printf("%12" HIGHSINT_FORMAT |
| 818 | " hyper-sparse results (%3" HIGHSINT_FORMAT "%%)\n", |
| 819 | lcHyperRs, pctHyperRs); |
| 820 | printf("%12g density of result (%" HIGHSINT_FORMAT " / %" HIGHSINT_FORMAT |
| 821 | " nonzeros)\n", |
| 822 | lcRsDensity, lcNumNNz, lcAnIterOpRsDim); |
| 823 | logValueDistribution(log_options, AnIter.AnIterOp_density, |
| 824 | AnIter.AnIterOpRsDim); |
| 825 | } |
| 826 | } |
| 827 | HighsInt NumInvert = 0; |
| 828 | |
| 829 | HighsInt last_rebuild_reason = kRebuildReasonCount - 1; |
| 830 | for (HighsInt k = 1; k <= last_rebuild_reason; k++) |
| 831 | NumInvert += AnIterNumInvert[k]; |
| 832 | if (NumInvert > 0) { |
| 833 | HighsInt lcNumInvert = 0; |
no test coverage detected