def _reinforce_box_constraint(kind, enforce_feasibility, x0,
relative_tolerance=0.01,
absolute_tolerance=0.01):
"""Reinforce box constraint"""
x0 = np.copy(np.asarray(x0, dtype=float))
keyword = kind[0]
if keyword == "greater":
lb = np.asarray(kind[1], dtype=float)
ub = np.full_like(lb, np.inf, dtype=float)
elif keyword == "less":
ub = np.asarray(kind[1], dtype=float)
lb = np.full_like(ub, -np.inf, dtype=float)
elif keyword == "interval":
lb = np.asarray(kind[1], dtype=float)
ub = np.asarray(kind[2], dtype=float)
x0_new = np.copy(x0)
for i in range(np.size(x0)):
if enforce_feasibility[i]:
if not np.isinf(lb[i]):
lower_bound = min(lb[i]+absolute_tolerance,
lb[i]+relative_tolerance*(ub[i]-lb[i]))
x0_new[i] = max(x0_new[i], lower_bound)
if not np.isinf(ub[i]):
upper_bound = max(ub[i]-absolute_tolerance,
ub[i]-relative_tolerance*(ub[i]-lb[i]))
x0_new[i] = min(x0_new[i], upper_bound)
return x0_new
评论列表
文章目录