You are on page 1of 3

Dynamic Pricing Challenge

INFORMS RM&P Conference, Amsterdam, 2017

Motivation
As of today, the problem of optimal pricing and learning in a competitive
environment still remains very much unexplored territory. Presumably, the
most challenging aspect is to model competitor behavior within a general
framework. In an attempt to give substance to this problem, we kindly
invite you to join our dynamic pricing challenge. In this challenge we will
simulate a competitive market environment in which you compete for rev-
enue with your fellow participants! The winning team will earn EUR500.-
and is expected to present their winning algorithm during the conference.

Description of challenge
As a team you are expected to hand in a pricing policy. To evaluate the
performance we will run a larger number of simulations. Each simulation
consists of 1000 discrete time periods. At each time t 2 {1, . . . , 1000}, each
policy receives as input everybodys prices posted in all preceding periods, as
well as their own demand that has materialized so far. Thus, competitors
historical prices are observable, but competitors demand is not. Subse-
quently, each team sets a new price for the period to come. Demand for this
period is generated from an undisclosed demand mechanism and all teams
earn revenue accordingly. There are no inventory restrictions. In addition,
the following domain knowledge is available: it seems unlikely that posting
prices higher than 100 is optimal. We simulate two dierent settings of
competitive market environments:
1. Round-robin Duopoly - Each team competes with each other team in
one-on-one contests (duopoly).

2. Full Competition - All teams compete simultaneously against each


other.
For both of these two settings, we determine for each team the share of the
cumulative revenue earned over all simulations. The team for which the sum
of these two shares is highest wins the challenge.

Submission, technical requirements, and template


We kindly ask you to e-mail your submission to Ruben van de Geer (r.vande.geer@vu.nl)
before June 1, 2017 consisting of:
1. Your policy (see requirements below).

2. The names and e-mail addresses of the participants.

1
3. A short description of your algorithm of about one page (in PDF).

To streamline the process, we require participants to hand in their policy


in Python (2.7.x or 3.x, please include the Python version used in the file
as a comment). Your Python file should contain a function p() with the
following structure.

1. Input:

(i) prices historical


all historical prices in a NumPy array of dimensions (# teams,
# days). The first row pertains to the teams own prices.
(ii) demand historical
own historical demand in a NumPy array of dimension (# days,)
(iii) Optional: parameterdump
object with model estimates from previous iteration

2. Output, a tuple comprising:

(i) popt
price posted for the following time period
(ii) parameterdump
object with model estimates to store for next iteration

To illustrate this, we provide the following example written in Python 2.7.x,


which may serve as a template.

2
#! / u s r / b i n / env python

from future import d i v i s i o n


import numpy a s np
from s k l e a r n import l i n e a r m o d e l

d e f p ( p r i c e s h i s t o r i c a l , d e m a n d h i s t o r i c a l , parameterdump=None ) :

# if i t s t h e f i r s t day

i f d e m a n d h i s t o r i c a l . s i z e == 0 :
popt = np . random . u n i f o rm ( 0 , 2 0 )

# if i t s not t h e f i r s t day

else :

# f i t ols
regr = linear model . LinearRegression ()
regr . f i t ( p r i c e s h i s t o r i c a l [ 0 ] . reshape ( 1 ,1) ,
demand historical )

# o p t i m i z e p r i c e and add some n o i s e


prange = np . l i n s p a c e ( 0 , 1 0 , 1 0 0 0 )
p r o f i t = prange ( r e g r . i n t e r c e p t + r e g r . c o e f prange )
popt = prange [ np . argmax ( p r o f i t ) ] + np . random . normal ( 0 , 3 )

# ch ec k i f p r i c e i s p o s i t i v e
i f popt < 0 :
popt = 0 . 0

parameterdump = r e g r

r e t u r n ( popt , parameterdump )

Disclaimer
No correspondence will be entered into in respect of the result. In case of
unforeseen events, the organizing committee decides on the final ranking.

You might also like