ConstraintTerm.java

  1. package org.drip.portfolioconstruction.optimizer;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

  5. /*!
  6.  * Copyright (C) 2020 Lakshmi Krishnamurthy
  7.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  8.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  9.  * Copyright (C) 2017 Lakshmi Krishnamurthy0
  10.  *
  11.  *  This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
  12.  *      asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
  13.  *      analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
  14.  *      equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
  15.  *      numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
  16.  *      and computational support.
  17.  *  
  18.  *      https://lakshmidrip.github.io/DROP/
  19.  *  
  20.  *  DROP is composed of three modules:
  21.  *  
  22.  *  - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
  23.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  24.  *  - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
  25.  *
  26.  *  DROP Product Core implements libraries for the following:
  27.  *  - Fixed Income Analytics
  28.  *  - Loan Analytics
  29.  *  - Transaction Cost Analytics
  30.  *
  31.  *  DROP Portfolio Core implements libraries for the following:
  32.  *  - Asset Allocation Analytics
  33.  *  - Asset Liability Management Analytics
  34.  *  - Capital Estimation Analytics
  35.  *  - Exposure Analytics
  36.  *  - Margin Analytics
  37.  *  - XVA Analytics
  38.  *
  39.  *  DROP Computational Core implements libraries for the following:
  40.  *  - Algorithm Support
  41.  *  - Computation Support
  42.  *  - Function Analysis
  43.  *  - Model Validation
  44.  *  - Numerical Analysis
  45.  *  - Numerical Optimizer
  46.  *  - Spline Builder
  47.  *  - Statistical Learning
  48.  *
  49.  *  Documentation for DROP is Spread Over:
  50.  *
  51.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  52.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  53.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  54.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  55.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  56.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  57.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  58.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  59.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  60.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  61.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  62.  *
  63.  *  Licensed under the Apache License, Version 2.0 (the "License");
  64.  *      you may not use this file except in compliance with the License.
  65.  *  
  66.  *  You may obtain a copy of the License at
  67.  *      http://www.apache.org/licenses/LICENSE-2.0
  68.  *  
  69.  *  Unless required by applicable law or agreed to in writing, software
  70.  *      distributed under the License is distributed on an "AS IS" BASIS,
  71.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  72.  *  
  73.  *  See the License for the specific language governing permissions and
  74.  *      limitations under the License.
  75.  */

  76. /**
  77.  * <i>ConstraintTerm</i> holds the Details of a given Constraint Term.
  78.  *
  79.  *  <br><br>
  80.  *  <ul>
  81.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  82.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/AssetAllocationAnalyticsLibrary.md">Asset Allocation Analytics</a></li>
  83.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/portfolioconstruction/README.md">Portfolio Construction under Allocation Constraints</a></li>
  84.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/portfolioconstruction/optimizer/README.md">Core Portfolio Construction Optimizer Suite</a></li>
  85.  *  </ul>
  86.  * <br><br>
  87.  *
  88.  * @author Lakshmi Krishnamurthy
  89.  */

  90. public abstract class ConstraintTerm
  91.     extends org.drip.portfolioconstruction.optimizer.FormulationTerm
  92. {
  93.     private double _maximum = java.lang.Double.NaN;
  94.     private double _minimum = java.lang.Double.NaN;
  95.     private org.drip.portfolioconstruction.optimizer.Unit _unit = null;
  96.     private org.drip.portfolioconstruction.optimizer.Scope _scope = null;
  97.     private org.drip.portfolioconstruction.optimizer.SoftConstraint _softConstraint = null;

  98.     protected ConstraintTerm (
  99.         final java.lang.String strName,
  100.         final java.lang.String strID,
  101.         final java.lang.String strDescription,
  102.         final java.lang.String strCategory,
  103.         final org.drip.portfolioconstruction.optimizer.Scope scope,
  104.         final org.drip.portfolioconstruction.optimizer.Unit unit,
  105.         final double minimum,
  106.         final double maximum)
  107.         throws java.lang.Exception
  108.     {
  109.         super (
  110.             strName,
  111.             strID,
  112.             strDescription,
  113.             strCategory
  114.         );

  115.         if (null == (_scope = scope) ||
  116.             null == (_unit = unit) || (
  117.                 !org.drip.numerical.common.NumberUtil.IsValid (
  118.                     _minimum = minimum
  119.                 ) && !org.drip.numerical.common.NumberUtil.IsValid (
  120.                     _maximum = maximum
  121.                 )
  122.             )
  123.         )
  124.         {
  125.             throw new java.lang.Exception (
  126.                 "ConstraintTerm Constructor => Invalid Inputs"
  127.             );
  128.         }
  129.     }

  130.     /**
  131.      * Retrieve the Soft Constraint
  132.      *
  133.      * @return The Soft Constraint
  134.      */

  135.     public org.drip.portfolioconstruction.optimizer.SoftConstraint softContraint()
  136.     {
  137.         return _softConstraint;
  138.     }

  139.     /**
  140.      * Retrieve the Constraint Scope
  141.      *
  142.      * @return The Constraint Scope
  143.      */

  144.     public org.drip.portfolioconstruction.optimizer.Scope scope()
  145.     {
  146.         return _scope;
  147.     }

  148.     /**
  149.      * Retrieve the Constraint Unit
  150.      *
  151.      * @return The Constraint Unit
  152.      */

  153.     public org.drip.portfolioconstruction.optimizer.Unit unit()
  154.     {
  155.         return _unit;
  156.     }

  157.     /**
  158.      * Retrieve the Constraint Minimum
  159.      *
  160.      * @return The Constraint Minimum
  161.      */

  162.     public double minimum()
  163.     {
  164.         return _minimum;
  165.     }

  166.     /**
  167.      * Retrieve the Constraint Maximum
  168.      *
  169.      * @return The Constraint Maximum
  170.      */

  171.     public double maximum()
  172.     {
  173.         return _maximum;
  174.     }

  175.     /**
  176.      * Indicate if this is an Equality Constraint
  177.      *
  178.      * @return TRUE - This is an Equality Constraint
  179.      */

  180.     public boolean isEquality()
  181.     {
  182.         return _maximum == _minimum;
  183.     }

  184.     /**
  185.      * Set the Soft Constraint
  186.      *
  187.      * @param softConstraint The Soft Constraint
  188.      *
  189.      * @return TRUE - The Soft Constraint successfully set
  190.      */

  191.     public boolean setSoftConstraint (
  192.         final org.drip.portfolioconstruction.optimizer.SoftConstraint softConstraint)
  193.     {
  194.         if (null == softConstraint)
  195.         {
  196.             return false;
  197.         }

  198.         _softConstraint = softConstraint;
  199.         return true;
  200.     }
  201. }