@@ -963,10 +963,10 @@ Observe that the log contains the following information:
963963 :linenos:
964964
965965 ==============================================================================
966- PyROS: The Pyomo Robust Optimization Solver, v1.3.6 .
967- Pyomo version: 6.9.2
968- Commit hash: 41cd797e0
969- Invoked at UTC 2025-03-13T16:20:31.105320 +00:00
966+ PyROS: The Pyomo Robust Optimization Solver, v1.3.8 .
967+ Pyomo version: 6.9.3dev0
968+ Commit hash: unknown
969+ Invoked at UTC 2025-05-05T00:00:00.000000 +00:00
970970
971971 Developed by: Natalie M. Isenberg (1), Jason A. F. Sherman (1),
972972 John D. Siirola (2), Chrysanthos E. Gounaris (1)
@@ -1025,34 +1025,33 @@ Observe that the log contains the following information:
10251025 ------------------------------------------------------------------------------
10261026 Itn Objective 1-Stg Shift 2-Stg Shift #CViol Max Viol Wall Time (s)
10271027 ------------------------------------------------------------------------------
1028- 0 3.5838e+07 - - 5 1.8832e+04 0.693
1029- 1 3.5838e+07 1.2289e-09 1.5876e-12 5 3.7762e+04 1.514
1030- 2 3.6129e+07 2.7244e-01 3.6878e-01 3 1.1093e+02 2.486
1031- 3 3.6269e+07 3.7352e-01 4.3227e-01 1 2.7711e+01 3.667
1032- 4 3.6285e+07 7.6526e-01 2.8426e-11 0 4.3364e-05g 6.291
1028+ 0 3.5838e+07 - - 5 1.8832e+04 0.759
1029+ 1 3.5838e+07 2.9329e-09 5.0030e-10 5 2.1295e+04 1.573
1030+ 2 3.6285e+07 7.6526e-01 2.0398e-01 2 2.2457e+02 2.272
1031+ 3 3.6285e+07 7.7212e-13 1.2525e-10 0 7.2940e-08g 5.280
10331032 ------------------------------------------------------------------------------
10341033 Robust optimal solution identified.
10351034 ------------------------------------------------------------------------------
10361035 Timing breakdown:
10371036
10381037 Identifier ncalls cumtime percall %
10391038 -----------------------------------------------------------
1040- main 1 6.291 6.291 100.0
1039+ main 1 5.281 5.281 100.0
10411040 ------------------------------------------------------
1042- dr_polishing 4 0.334 0.083 5.3
1043- global_separation 27 0.954 0.035 15 .2
1044- local_separation 135 3.046 0.023 48.4
1045- master 5 1.027 0.205 16.3
1046- master_feasibility 4 0.133 0.033 2.1
1047- preprocessing 1 0.013 0.013 0.2
1048- other n/a 0.785 n/a 12.5
1041+ dr_polishing 3 0.155 0.052 2.9
1042+ global_separation 27 1.280 0.047 24 .2
1043+ local_separation 108 2.200 0.020 41.7
1044+ master 4 0.727 0.182 13.8
1045+ master_feasibility 3 0.103 0.034 1.9
1046+ preprocessing 1 0.021 0.021 0.4
1047+ other n/a 0.794 n/a 15.0
10491048 ======================================================
10501049 ===========================================================
10511050
10521051 ------------------------------------------------------------------------------
10531052 Termination stats:
1054- Iterations : 5
1055- Solve time (wall s) : 6.291
1053+ Iterations : 4
1054+ Solve time (wall s) : 5.281
10561055 Final objective value : 3.6285e+07
10571056 Termination condition : pyrosTerminationCondition.robust_optimal
10581057 ------------------------------------------------------------------------------
@@ -1133,6 +1132,58 @@ The constituent columns are defined in the
11331132 current iteration.
11341133
11351134
1135+ Separation Priority Ordering
1136+ ----------------------------
1137+ The PyROS solver supports custom prioritization of
1138+ the separation subproblems (and, thus, the constraints)
1139+ that are automatically derived from
1140+ a given model for robust optimization.
1141+ Users may specify separation priorities through:
1142+
1143+ - (Recommended) :class: `~pyomo.core.base.suffix.Suffix ` components
1144+ with local name ``pyros_separation_priority ``,
1145+ declared on the model or any of its sub-blocks.
1146+ Each entry of every such
1147+ :class: `~pyomo.core.base.suffix.Suffix `
1148+ should map a
1149+ :class: `~pyomo.core.base.var.Var `
1150+ or :class: `~pyomo.core.base.constraint.Constraint `
1151+ component to a value that specifies the separation
1152+ priority of all constraints derived from that component
1153+ - The optional argument ``separation_priority_order ``
1154+ to the PyROS :py:meth: `~pyomo.contrib.pyros.pyros.PyROS.solve `
1155+ method. The argument should be castable to a :py:obj: `dict `,
1156+ of which each entry maps the full name of a
1157+ :class: `~pyomo.core.base.var.Var `
1158+ or :class: `~pyomo.core.base.constraint.Constraint `
1159+ component to a value that specifies the
1160+ separation priority of all constraints
1161+ derived from that component
1162+
1163+ Specification via :class: `~pyomo.core.base.suffix.Suffix ` components
1164+ takes precedence over specification via the solver argument
1165+ ``separation_priority_order ``.
1166+ Moreover, the precedence ordering among
1167+ :class: `~pyomo.core.base.suffix.Suffix `
1168+ components is handled by the Pyomo
1169+ :class: `~pyomo.core.base.suffix.SuffixFinder ` utility.
1170+
1171+ A separation priority can be either
1172+ a (real) number (i.e., of type :py:class: `int `, :py:class: `float `, etc.)
1173+ or :py:obj: `None `.
1174+ A higher number indicates a higher priority.
1175+ The default priority for all constraints is 0.
1176+ Therefore a constraint can be prioritized [or deprioritized]
1177+ over the default by mapping the constraint to a positive [or negative] number.
1178+ In practice, critical or dominant constraints are often
1179+ prioritized over algorithmic or implied constraints.
1180+
1181+ Constraints that have been assigned a priority of :py:obj: `None `
1182+ are enforced subject to only the nominal uncertain parameter realization
1183+ provided by the user. Therefore, these constraints are not imposed robustly
1184+ and, in particular, are excluded from the separation problems.
1185+
1186+
11361187Feedback and Reporting Issues
11371188-------------------------------
11381189Please provide feedback and/or report any problems by opening an issue on
0 commit comments