|
EllAlgo 1.6.14
|
Oracle for the Chebyshev center of a polyhedron. More...
#include <chebyshev_oracle.hpp>
Public Types | |
| using | Vec = std::valarray< double > |
| using | ArrayType = Vec |
| using | Cut = std::pair< Vec, double > |
Public Member Functions | |
| ChebyshevOracle (const std::vector< Vec > &A, const Vec &b) | |
| Construct from halfspace data. | |
| ChebyshevOracle (const ChebyshevOracle &)=delete | |
| auto | operator= (const ChebyshevOracle &) -> ChebyshevOracle &=delete |
| ChebyshevOracle (ChebyshevOracle &&)=delete | |
| auto | operator= (ChebyshevOracle &&) -> ChebyshevOracle &=delete |
| ~ChebyshevOracle ()=default | |
| auto | assess_optim (const Vec &xc, double &gamma) -> std::tuple< Cut, bool > |
| Assess feasibility and optimality at a candidate point. | |
Oracle for the Chebyshev center of a polyhedron.
Given a polyhedron P = {u ∈ R^n : A u ≤ b}, find the largest Euclidean ball B(x, r) = {u : ‖u − x‖₂ ≤ r} contained in P:
max r s.t. aᵢᵀx + ‖aᵢ‖₂ r ≤ bᵢ, i = 1, …, m,
with design variables (x, r) ∈ R^{n+1}.
Every constraint is affine in (x, r) with a constant gradient (aᵢ, ‖aᵢ‖₂), so each violated halfspace yields a perfect cutting plane; the objective is linear, so the optimality cut is trivial. This makes the problem an ideal showcase for the cutting-plane method.
RoundRobin counter (mirroring ProfitOracle). | using ChebyshevOracle::Cut = std::pair<Vec, double> |
| using ChebyshevOracle::Vec = std::valarray<double> |
Construct from halfspace data.
| [in] | A | m×n matrix; row i is the normal aᵢ. |
| [in] | b | offsets bᵢ (length m). |
|
delete |
|
delete |
|
default |
|
inline |
Assess feasibility and optimality at a candidate point.
| [in] | xc | candidate point (x, r); length n + 1. |
| [in,out] | gamma | best-so-far objective value (radius). |
|
delete |
|
delete |