:github_url: https://github.com/svenevs/exhale-companion .. _program_listing_file_ellip_profitmaxprob.hpp: Program Listing for File profitmaxprob.hpp ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``ellip/profitmaxprob.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef _PROFIT_MAX_HPP #define _PROFIX_MAX_HPP #include "gp_solve.hpp" template class profit_max : public gp_base<_Tp> { public: profit_max(); ~profit_max(); void gp_setup() { using posy = posynomial<_Tp>; using mono = monomial<_Tp>; auto& M = gp_base<_Tp>::_M; // x0^-1 M.emplace_back(mono(_Tp(1), {_Tp(-1), _Tp(0), _Tp(0)})); // p1 = x0 + v1*x1 + v2*x2 auto p1 = mono(_Tp(1.0), {_Tp(1), _Tp(0), _Tp(0)}) + mono(v1, {_Tp(0), _Tp(1), _Tp(0)}) + mono(v2, {_Tp(0), _Tp(0), _Tp(1)}); // k^-1 * x1 M.emplace_back(mono(1.0 / k, {_Tp(0), _Tp(1), _Tp(0)})); // A * x1^alpha * x2^beta cd = mono(_Tp(A), {_Tp(0), alpha, beta}); M.emplace_back(p1 / (p * cd)); } _Tp obj(const std::valarray& z) { return p * exp(cd.lse(z)) - v1 * exp(z[1]) - v2 * exp(z[2]); } private: _Tp p; _Tp alpha; _Tp beta; _Tp v1; _Tp v2; _Tp k; double A; monomial<_Tp> cd; }; #endif