News-vendor problem#

class inventory#

Stochastic Programming Test Problem: An Inventory Model.


This problem is a generalization of the simple inventory problem so-called of the “news-vendor”, widely used to introduce the main tools and techniques of stochastic programming Assume you are a newsvendor and each week, for the next \( N\) weeks, you need to decide how many journals to order (indicated with the decision variable \( x_i \)). The weekly journal demand is unknown to you and is indicated with the variable \(d_i\). The cost of ordering journals before the week starts is \( c\), the cost of ordering journals during the week (in order to meet an unforeseen demand) is \( b \) and the cost of having to hold unsold journals is \( h \). The inventory level of journals will be defined by the succession:

\[ I_i = [I_{i-1} + x_i - d_i]_+, I_1 = 0 \]
while the total cost of running the journal sales for \(N\) weeks will be:
\[ J(\mathbf x, \mathbf d) = c \sum_{i=1}^N x_i+ b \sum_{i=1}^N [d_i - I_i - x_i]_+ + h \sum_{i=1}^N [I_i + x_i - d_i]_+ \]


Public Functions

inline inventory(unsigned weeks = 4u, unsigned sample_size = 10u, unsigned seed = pagmo::random_device::next())#

Constructor from weeks, sample size and random seed.

Given the number of weeks (i.e. prolem dimension), the sample size to approximate the expected value and a starting random seed, we construct the inventory prolem

  • weeks – dimension of the problem corresponding to the number of weeks to plan the inventory for.

  • sample_size – dimension of the sample used to approximate the expected value

  • seed – starting random seed to build the pseudorandom sequences used to generate the sample

vector_double fitness(const vector_double&) const#

Fitness computation.

Computes the fitness for this UDP


x – the decision vector.


the fitness of x.

std::pair<vector_double, vector_double> get_bounds() const#


It returns the box-bounds for this UDP.


the lower and upper bounds for each of the decision vector components

inline void set_seed(unsigned seed)#

Sets the seed.


seed – the random number generator seed

inline std::string get_name() const#

Problem name.


a string containing the problem name

std::string get_extra_info() const#

Extra info.


a string containing extra info on the problem