Skip to content

Commit 282efc7

Browse files
committed
add abs for coefficients; only set when nonzero
1 parent 5a12e8c commit 282efc7

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

mpisppy/extensions/coeff_rho.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from mpisppy.utils.sputils import nonant_cost_coeffs
1313

14+
1415
class CoeffRho(mpisppy.extensions.extension.Extension):
1516
"""
1617
Determine rho as a linear function of the objective coefficient
@@ -19,14 +20,18 @@ class CoeffRho(mpisppy.extensions.extension.Extension):
1920
def __init__(self, ph):
2021
self.ph = ph
2122
self.multiplier = 1.0
22-
if "coeff_rho_options" in ph.options and "multiplier" in ph.options["coeff_rho_options"]:
23+
if (
24+
"coeff_rho_options" in ph.options
25+
and "multiplier" in ph.options["coeff_rho_options"]
26+
):
2327
self.multiplier = ph.options["coeff_rho_options"]["multiplier"]
2428

2529
def post_iter0(self):
2630
for s in self.ph.local_scenarios.values():
2731
cc = nonant_cost_coeffs(s)
2832
for ndn_i, rho in s._mpisppy_model.rho.items():
29-
rho._value = cc[ndn_i] * self.multiplier
33+
if cc[ndn_i] != 0:
34+
rho._value = abs(cc[ndn_i]) * self.multiplier
3035
# if self.ph.cylinder_rank==0:
3136
# nv = s._mpisppy_data.nonant_indices[ndn_i] # var_data object
3237
# print(ndn_i,nv.getname(),cc[ndn_i],rho._value)

mpisppy/extensions/sep_rho.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ def __init__(self, ph):
2828

2929
self.multiplier = 1.0
3030

31-
if "sep_rho_options" in ph.options and "multiplier" in ph.options["sep_rho_options"]:
31+
if (
32+
"sep_rho_options" in ph.options
33+
and "multiplier" in ph.options["sep_rho_options"]
34+
):
3235
self.multiplier = ph.options["sep_rho_options"]["multiplier"]
3336

3437
def _compute_primal_residual_norm(self, ph):
@@ -143,13 +146,14 @@ def post_iter0(self):
143146
for s in ph.local_scenarios.values():
144147
cc = nonant_cost_coeffs(s)
145148
for ndn_i, rho in s._mpisppy_model.rho.items():
146-
nv = s._mpisppy_data.nonant_indices[ndn_i] # var_data object
147-
if nv.is_integer():
148-
rho._value = cc[ndn_i] / (xmax[ndn_i] - xmin[ndn_i] + 1)
149-
else:
150-
rho._value = cc[ndn_i] / max(1, primal_resid[ndn_i])
151-
152-
rho._value *= self.multiplier
149+
if cc[ndn_i] != 0:
150+
nv = s._mpisppy_data.nonant_indices[ndn_i] # var_data object
151+
if nv.is_integer():
152+
rho._value = abs(cc[ndn_i]) / (xmax[ndn_i] - xmin[ndn_i] + 1)
153+
else:
154+
rho._value = abs(cc[ndn_i]) / max(1, primal_resid[ndn_i])
155+
156+
rho._value *= self.multiplier
153157

154158
# if ph.cylinder_rank==0:
155159
# print(ndn_i,nv.getname(),xmax[ndn_i],xmin[ndn_i],primal_resid[ndn_i],cc[ndn_i],rho._value)

0 commit comments

Comments
 (0)