2 #include <eris/Optimize.hpp> 3 #include <eris/WrappedPositional.hpp> 4 #include <eris/Agent.hpp> 5 #include <eris/Market.hpp> 6 #include "creativity/Book.hpp" 7 #include "creativity/BookCopy.hpp" 8 #include "creativity/belief/ProfitStream.hpp" 9 #include "creativity/belief/Demand.hpp" 11 #include <unordered_set> 12 #include <forward_list> 15 #include <unordered_map> 17 #include <type_traits> 24 namespace belief {
class Profit; }
141 class Reader :
public eris::WrappedPositional<eris::Agent>,
142 public virtual eris::interopt::Begin,
143 public virtual eris::interopt::OptApply,
144 public virtual eris::intraopt::Initialize,
145 public virtual eris::intraopt::OptApplyReset
159 const eris::Position &pos
170 template <
typename Container>
171 typename std::enable_if<std::is_base_of<Book, typename Container::value_type::member_type>::value,
double>::type
172 u(
double money,
const Container &books)
const {
173 double u = money - numBooksPenalty(books.size());
174 for (
auto &book : books) {
183 template <
typename Container>
184 typename std::enable_if<std::is_same<eris::eris_id_t, typename Container::value_type>::value,
double>::type
185 u(
double money,
const Container &books)
const {
186 double u = money - numBooksPenalty(books.size());
187 for (
auto &book_id : books) {
188 u += uBook(simGood<Book>(book_id));
196 double u(
double money,
const std::unordered_map<eris::SharedMember<Book>, std::reference_wrapper<BookCopy>> &books)
const;
201 const double& u()
const;
206 const double& uLifetime()
const;
214 const std::unordered_map<eris::SharedMember<Book>,
BookCopy>& library()
const;
223 const std::unordered_map<eris::SharedMember<Book>, std::reference_wrapper<BookCopy>>& newBooks()
const;
229 const std::set<eris::SharedMember<Book>>& wrote()
const;
249 virtual double uBook(
const eris::SharedMember<Book> &b)
const;
252 virtual double uBook(
const eris::SharedMember<Book> &b,
double quality)
const;
258 virtual double quality(
const eris::SharedMember<Book> &b)
const;
287 void distancePenaltyPolynomial(std::vector<double> coef);
293 const std::vector<double>& distancePenaltyPolynomial()
const;
297 static constexpr std::initializer_list<double> default_distance_penalty_polynomial{0, 0, 3};
302 double distancePenalty(
double distance)
const;
322 void numBooksPenaltyPolynomial(std::vector<double> coef);
328 const std::vector<double>& numBooksPenaltyPolynomial()
const;
333 static constexpr std::initializer_list<double> default_num_books_penalty_polynomial{0, 0, 1};
343 virtual double numBooksPenalty(
unsigned long books)
const;
364 double creation_shape = 0.0;
379 double creation_scale = 10.0;
388 double creationQuality(
double effort)
const;
398 double creationEffort(
double quality)
const;
409 static double creationQuality(
double shape,
double scale,
double effort);
420 static double creationEffort(
double shape,
double scale,
double effort);
429 bool profitExtrapBeliefDiffers()
const;
454 bool usableBelief(
const eris::learning::BayesianLinear &model)
const;
462 const std::map<unsigned int, belief::ProfitStream>& profitStreamBeliefs()
const;
478 double piracyCost()
const;
481 const std::unordered_set<eris::SharedMember<Reader>>& friends()
const;
494 bool addFriend(eris::SharedMember<Reader> new_pal,
bool recurse =
true);
505 bool removeFriend(
const eris::SharedMember<Reader> &old_pal,
bool recurse =
true);
515 void alterUtility(
double amount);
518 void interBegin()
override;
526 void interOptimize()
override;
535 void interApply()
override;
538 void intraInitialize()
override;
559 void intraOptimize()
override;
561 void intraApply()
override;
563 void intraReset()
override;
569 std::shared_ptr<belief::Profit> profit_belief_,
579 std::unordered_set<eris::SharedMember<Reader>>
friends_;
599 void updateBeliefs();
612 void updateDemandBelief();
625 void updateProfitBelief();
636 void updateProfitStreamBelief();
643 void registerAuthoredBook(eris::SharedMember<Book> book);
647 void registerMarketUpdate(eris::SharedMember<Book> book);
648 #ifndef DOXYGEN_SHOULD_SEE_THIS 656 std::vector<double> dist_penalty_poly_;
657 std::vector<double> nbooks_penalty_poly_;
659 std::unordered_map<eris::SharedMember<Book>,
BookCopy> library_;
661 std::unordered_map<eris::SharedMember<Book>, std::reference_wrapper<BookCopy>> library_new_;
663 std::unordered_set<eris::SharedMember<Book>>
675 std::unordered_map<eris::SharedMember<Book>,
BookCopy::Status> reserved_books_;
680 std::set<eris::SharedMember<Book>> wrote_;
683 std::forward_list<eris::Market::Reservation> reservations_;
685 double reserved_piracy_cost_ = 0.0;
688 double u_curr_ = 0, u_lifetime_ = 0;
692 std::unordered_map<eris::SharedMember<Book>,
double> new_prices_;
695 bool create_starting_ =
false;
696 int create_countdown_ = -1;
697 double create_effort_ = 0, create_quality_ = 0, create_price_ = 0;
699 eris::Position create_position_;
Primary namespace for all Creativity library code.
Definition: config.hpp:4
This class represents an author's belief about the per-period demand for books.
Definition: Demand.hpp:36
std::map< unsigned int, belief::ProfitStream > profit_stream_beliefs_
Profit stream beliefs for books on market for various lengths of time.
Definition: Reader.hpp:576
std::shared_ptr< belief::Profit > profit_belief_extrap_
Beliefs about lifetime book profits using profit stream expectations.
Definition: Reader.hpp:569
Creativity & creativity_
The Creativity object that owns the simulation this reader belongs to.
Definition: Reader.hpp:567
A Reader is an agent that both consumes previously unread books and potentially writes new books and ...
Definition: Reader.hpp:141
static const std::vector< unsigned int > profit_stream_ages
The different ages that will be considered for profit_stream_beliefs.
Definition: Reader.hpp:468
void added() override
When the Book is added to the simulation it also creates an associated BookMarket object that handles...
void setMarket(eris::SharedMember< BookMarket > market)
Sets a new market for this book.
Status
The status a book copy can have.
Definition: BookCopy.hpp:10
belief::Demand demand_belief_
Belief about per-period demand.
Definition: Reader.hpp:571
Container class storing the data associated with a reader's copy of a book.
Definition: BookCopy.hpp:7
This class represents an author's belief about the lifetime profitability of a work.
Definition: Profit.hpp:33
void weakDepRemoved(eris::SharedMember< eris::Member >, eris::eris_id_t old) override
When the market is removed from the simulation, record it by clearing the stored market.
Central class for a creativity simulation; this class handles setting up the simulation according to ...
Definition: Creativity.hpp:22
std::enable_if< std::is_same< eris::eris_id_t, typename Container::value_type >::value, double >::type u(double money, const Container &books) const
Same as the above, but takes a container of eris_id_t values of books rather than SharedMember<Book> ...
Definition: Reader.hpp:185
std::enable_if< std::is_base_of< Book, typename Container::value_type::member_type >::value, double >::type u(double money, const Container &books) const
Takes a money value and a container of SharedMember<Book> objects and returns the utility for that se...
Definition: Reader.hpp:172
This class represents an author's belief about the lifetime profits of a book based on partial lifeti...
Definition: ProfitStream.hpp:31
std::unordered_set< eris::SharedMember< Reader > > friends_
The set of friends of this reader.
Definition: Reader.hpp:579