import numpy as np
import herculesabqp
class DiagonalOperator:
def __init__(self, diag):
self.diag = np.asarray(diag, dtype=np.float64)
self.n = int(self.diag.size)
def matvec(self, x):
x = np.asarray(x, dtype=np.float64)
return self.diag * x
def diagonal(self):
return self.diag
def main() -> None:
op = DiagonalOperator([4.0, 9.0, 2.0])
c = np.array([-2.0, 3.0, -0.5], dtype=np.float64)
lb = np.zeros(3, dtype=np.float64)
ub = np.ones(3, dtype=np.float64)
result = herculesabqp.solve_box_qp_implicit(
op,
c,
lb,
ub,
assume_symmetric=True,
scaling="hessian_diag",
)
print(f"objective = {result['objective']:.8f}")
print(f"x = {result['x']}")
print(
f"scaling applied = {result['scaling_applied']} ({result['scaling_name']})"
)
if __name__ == "__main__":
main()