Program Listing for File profitmaxprob.hpp¶
↰ Return to documentation for file (ellip/profitmaxprob.hpp)
#ifndef _PROFIT_MAX_HPP
#define _PROFIX_MAX_HPP
#include "gp_solve.hpp"
template <typename _Tp>
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<double>& 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