Join the Dynamic Pricing Competition

Benchmark your algorithm. Rise on the leaderboard.

Win a prize

Compete for victory – the top performer will be rewarded with a 200€ prize.

Performance Evalutation

Get a detailed analysis of how your algorithms perform across diverse market scenarios.

Scoring & Benchmark

Receive a clear benchmark showing your algorithm’s ranking against all competitors.

Why Join the Competition

Pricing isn’t just about numbers – it’s about winning or losing in the real market. Small changes can decide profit or loss, and today, algorithms set the pace. But how good is your algorithm when it faces real competition, unpredictable demand, and diverse customer behavior?

This challenge gives you the arena to find out.

Get Started in 5 Steps

Sign-up: Register here for free and get access to the competition platform.
Create Your Algorithm: Build a pricing strategy in Python – start simple, improve over time.
Upload & Compete: Submit your algorithm and join the daily competition runs.
Get Results: Check your performance, ranking, and detailed feedback.
Tweak & Improve: Refine your strategy, re-submit, and climb the leaderboard – until the final submission deadline on December 31st.

Before you start coding, make sure to review the Knowledge Base – 
it covers all requirements and rules of the competition.

DPC graphic process

The Challenge

Each time period, each player posts a price, this is given as input into the unknown demand mechanism. Each player in the competition receives then their own sales realization and competitors’ prices. The demand mechanism that generates the sales based on the prices is unknown to all competitors

Players are randomly selected to play against each other in small competition matches. Each match consists of multiple simulations, and the player with the overall highest generated revenue overall simulations is winning the match.

Duopoly: The Airline Challenge

You sell a finite inventory of 80 units, e.g. seats on a plane, over a selling season of 100 time periods, think of it as days. You are playing against one other competitor in the market, who also has an initial inventory of 80 units. Each time period, you post a price and then observe your own sales and your competitor’s price. The demand mechanism that generates the sales based on the prices is unknown to both competitors.

The following example illustrates a single time period. The competitors post prices of $8 and $7, which generates sales of 5 and 6 units, respectively:

one time period duopoly

This process repeats itself over the selling season of 100 time periods in total:

After these 100 time periods, the selling season is finished. A new selling season starts and the competitors receive again a new inventory of 80 units. The two competitors play many selling seasons, usually 100. The demand mechanism is the same within a single selling season, but can change across selling seasons.

The player, who generated the most revenue over all selling seasons, wins.

Note: in practice we execute 101 time periods per selling season in order to provide your algorithm the information (competitor price & own demand) from time period 100. Your algorithms’ returned price in time period 101 will not be used for evaluation.

A detailed explanation of this challenge can be found here.

 

Knowledge Base

This is your playbook: the rules, the setup, the tools. 
Explore each section to prepare your algorithm for the competition.

  • Weekly training run: Simulations run weekly on multiple days at 0:30 UTC. Check the login area for exact dates – each run takes 12–15 hours.

  • Final submission deadline: December 31st of each edition year

  • Your code will be executed in a docker container with Python 3.9 and Anaconda distribution 2022.05. We have also added: tensorflow==2.13.0, tf-agents==0.14.0, tornado==6.3.3, torch==2.0.1, xgboost==1.6.2, botorch==0.8.5. If you need further packages, please contact us.

  • The container in which your code runs has 1 CPU and 512 MB of memory and your code is not allowed to use the local file system to save your own log files or anything like this. Further, there is no need for printing out things in your functions, we are not logging your output.

  • When uploading your algorithms on the platform, please name the pricing algorithms “duopoly.py” (1-airline case). This is essential for the competition setup on AWS.

  • The competition setup expects that each of the main scripts contains a function p(.), which we will call, the function is expected to return the price and the information dump.

  • The information dump allows you to pass yourself any kind of information from one time period to the next. But note, that the information dump is reset to None at the beginning of every competition. So you can use the information dump only during the competition to pass back information to yourself in the next time period, but not across simulations. For this you can use the ‘duopoly_feedback.data‘ file, see explanation below.

  • You can use supporting python scripts by simply importing them in your scripts from the current working directory. All your files will be placed in the same directory.

  • Your algorithms need to return a price response on average within 0.2 seconds per time period/iteration and the maximum time for a single price response is 5 seconds. Further, the algorithm needs to be error free in 99% of the price requests.

  • In case we do not receive a valid price response (>0) from your function, we will use your old price from the previous time period. In case your function is not working on the first period in the selling season, we will draw a random price and use that.

A simple example algorithm code with the explanation of the main functionalities can be found here.

The submitted algorithm file needs to be exactly called ‘duopoly.py’ and it needs to contain a pricing function p, which takes the following parameter. The function p(.) returns the tuple of (price, information_dump).

def p(
    current_selling_season: int,
    selling_period_in_current_season: int,
    prices_historical_in_current_season: Union[np.ndarray, None],
    demand_historical_in_current_season: Union[np.ndarray, None],
    competitor_has_capacity_current_period_in_current_season: bool,
    information_dump=Optional[Any],
) -> Tuple[float, Any]:
  • current_selling_season (int): The current selling season (1, 2, 3, …, 100).

  • selling_period_in_current_season (int): The period in the current season (1, 2, …, 100).

  • prices_historical_in_current_season (Union[np.ndarray, None]): A two-dimensional array of historical prices: rows index the competitors and columns index the historical selling periods. Equal to None if selling_period_in_current_season == 1.

  • demand_historical_in_current_season (Union[np.ndarray, None]): A one-dimensional array of historical (own) demand. Equal to None if selling_period_in_current_season == 1.

  • competitor_has_capacity_current_period_in_current_season (bool): False if competitor is out of stock, else False

  • information_dump (Any, optional, default None): Custom object to pass yourself any information object you like from one selling_period to the other within the same competition. Equal to None if selling_period_in_current_season == 1 AND current_selling_season==1, i.e. it is reset at the beginning of each competition (one competition = 100 selling_seasons with each 100 selling periods. To pass information across competitions and also to yourself in the UI, use the ‘duopoly_feedback.data’ file.

Cloud testing environment
In the login area under File Manager, you can upload your duopoly.py file alongside any other supplementary files you need. After the upload, we will start a small test run with your algorithms in the cloud. After approx. 15 minutes you can see the performance results with potential error logs for download in the platform.

An example notebook to start analysing the competition detail logs and how to simulate your algorithm locally can be found here.

Usage of duopoly_feedback.data

The DPC environment allows you to store feedback data in a dedicated file. You can use this file to pass your algorithm information across different competitions in the nightly simulation runs, as well as providing yourself information to download in the UI after the competition run. Here is an example to use pickle to store information in this file, but you can use any file format you like.

import pickle

# write any feedback object to file
with open('duopoly_feedback.data', 'wb') as handle:
    pickle.dump(FEEDBACK_OBJECT, handle, protocol=pickle.HIGHEST_PROTOCOL)

# load feedback object
with open('duopoly_feedback.data', 'rb') as handle:
    feedback = pickle.load(handle)

Note, you don’t need to take care of this folder structure if you just want to import your custom scripts, simply import them. All your uploaded files will be located in the same folder within the competition container.

Also, the ‘duopoly_feedback.data' does not require this extra path handling. The feedback data object has a special setup to pass to yourself information for download in the DPC website, this file will be available in the website under ‘Download Feedback Data' in the results page.

You may want to upload additional files, e.g. pickle files. In order to open these files in the competition container, please use the following code example. Your code location in the container is under /root/partcipant_folder/ and therefore please add this to the file location when loading the file.

import pickle

try:
    # for the cloud in container
    with open('/root/partcipant_folder/FILENAME.pkl', 'rb') as f:
        obj = pickle.load(f)
except:
    # for your local testing
    with open('FILENAME.pkl', 'rb') as f:
        obj = pickle.load(f)

Note, you don’t need to take care of this folder structure if you just want to import your custom scripts, simply import them. All your uploaded files will be located in the same folder within the competition container.

Also, the ‘duopoly_feedback.data' does not require this extra path handling. The feedback data object has a special setup to pass to yourself information for download in the DPC website, this file will be available in the website under ‘Download Feedback Data' in the results page.

  • You can upload daily new algorithms.

  • We build a new docker container with your code.

  • At night all containers are started, the competition matches are randomly drawn among the competitors.

  • The simulations are performed, performances are logged and evaluated.

  • You will find your ranking and performance statistics in your login area. There you can also download .csv files with simulation data (your prices, competitor prices and your demand realization).

Organizers

The Dynamic Pricing Competition is organized by the following team.
Alwin Haensel Dynamic Pricing

Alwin Haensel

Prof. Ger Kool Dynamic Pricing

Prof. Ger Koole

Ruben Van DeGeer Dynamic Pricing

Ruben van de Geer

Paul Kleinschmidt Dynamic Pricing

Paul Kleinschmidt

Prof. Thomas Winter

Prof. Thomas Winter

How it all started

Curious to know how it all began? Check out the paper below on the very first edition of the competition in 2017.

Leaderboard

See the top performers from previous editions of the competition.

2024

Duopoly Challenge​

The team from the Computer Systems Group, IIIT Hyderabad, India, comprises Anush Anand (B.Tech Honors), Pranav Agrawal (B.Tech Honors), and Dr. Tejas Bodas (Assistant Professor). The team leveraged their expertise in Gaussian Processes and Bayesian Optimization to optimize pricing strategies for a duopoly, with Gaussian Processes likely playing a key role in their success in the 2024 competion.

Pranav Agrawal
Anush Anand
Dr. Tejas Bodas

2023

Duopoly Challenge​

Kyle Maclean and Fredrik Odegaard, both work at The Ivey Business School in Canada as Assistant and Associate Professors.

Kyle Maclean​
Fredrik Odegaard​

2022

Duopoly Challenge​

Matt Dickenson is a software engineer in Colorado. He holds a BS degree in political science from the University of Houston and an MS degree in computer science from Duke University. He is also the author of two books and has taught graduate-level programming and data science courses throughout the United States.

Matt Dickenson​

2021

Dynamic challenge: Two winning teams share the first place​

Ernst Oldenhof, Ph.D, is heading the Data Analytics team in Internal Audit at Bank Julius Baer in Zürich. He completed his Ph.D. in Applied Physics at Delft University of Technology and worked as an R&D engineer before moving to the banking industry.

Ernst Oldenhof

The team from TUM School of Management, Technical University of Munich consists of Larkin Liu (Doctoral Candidate), Yihua Wang (M.Sc. and Research Assistant) and Prof. Dr. Stefan Minner. The team has combined their expertise and background in Operations Research, Supply Chain Management and Data-driven Optimization to win both the Oligopoly and Dynamic challenges.

Larkin Liu
Yihua Wang
Stefan Minner

Oligopoly challenge​

The team consisting of Larkin Liu (Doctoral Candidate), Yihua Wang (M.Sc. and Research Assistant) and Prof. Dr. Stefan Minner also won the Oligopoly challenge.

Larkin Liu
Yihua Wang
Stefan Minner

Duopoly challenge

Matt Dickenson is a software engineer in Colorado. He holds a BS degree in political science from the University of Houston and an MS degree in computer science from Duke University. He is also the author of two books and has taught graduate-level programming and data science courses throughout the United States.

Matt Dickenson​

2020

Dynamic challenge

Fulin Xie, Ph.D., is a Data Scientist at Microlise in the UK. By the way, his Duopoly submission was also ranked second in that challenge. This was the toughest battle ground in 2020.

Fulin Xie dynamic pricing machine learning
Fulin Xie​

Oligopoly challenge

Boris Kuznetsov and Oganes Manasian, Boris is currently finalizing his MSc. in mathematics and finance at the EPFL in Lausanne, and Oganes is currently working as Intern at IBM Research in Ireland.

Boris Kusnetsov Dynamic Pricing
Boris Kuznetsov
Oganes Manasian Dynamic Pricing Machine Learning
Oganes Manasian

Duopoly challenge

Kyle Maclean and Fredrik Odegaard, both work at The Ivey Business School in Canada as Assistant and Associate Professors. For Kyle it is already the second year in a row he is winning the Duopoly challenge!

Kyle Maclean
Fredrik Odegaard

2019

Duopoly & Dynamic challenges

Kyle Maclean, PhD, Assistant Professor at Ivey Business School in Canada. Especially the Duopoly was our most competitive challenge and a very tight competition.

Kyle Maclean

Oligopoly challenge

Ruben van de Geer, PhD, Data Maestro at GoDataDriven in the Netherlands. Ruben actually submitted his first oligopoly algorithm only days before the final deadline and was going straight to the top with an impressive margin.

Note: Ruben was not in the organization committee during 2019, he joined the organizers back in 2020. Of course organizers are not participating in the DPC.

Ruben Van DeGeer Dynamic Pricing python
Ruben van de Geer
2024

Duopoly Challenge​

The team from the Computer Systems Group, IIIT Hyderabad, India, comprises Anush Anand (B.Tech Honors), Pranav Agrawal (B.Tech Honors), and Dr. Tejas Bodas (Assistant Professor). The team leveraged their expertise in Gaussian Processes and Bayesian Optimization to optimize pricing strategies for a duopoly, with Gaussian Processes likely playing a key role in their success in the 2024 competion.

Pranav Agrawal
Anush Anand
Dr. Tejas Bodas

Duopoly Challenge​

Kyle Maclean and Fredrik Odegaard, both work at The Ivey Business School in Canada as Assistant and Associate Professors.

Kyle Maclean​
Fredrik Odegaard​

Duopoly Challenge​

Matt Dickenson is a software engineer in Colorado. He holds a BS degree in political science from the University of Houston and an MS degree in computer science from Duke University. He is also the author of two books and has taught graduate-level programming and data science courses throughout the United States.

Matt Dickenson​

Dynamic challenge: Two winning teams share the first place​

Ernst Oldenhof, Ph.D, is heading the Data Analytics team in Internal Audit at Bank Julius Baer in Zürich. He completed his Ph.D. in Applied Physics at Delft University of Technology and worked as an R&D engineer before moving to the banking industry.

Ernst Oldenhof

The team from TUM School of Management, Technical University of Munich consists of Larkin Liu (Doctoral Candidate), Yihua Wang (M.Sc. and Research Assistant) and Prof. Dr. Stefan Minner. The team has combined their expertise and background in Operations Research, Supply Chain Management and Data-driven Optimization to win both the Oligopoly and Dynamic challenges.

Larkin Liu
Yihua Wang
Stefan Minner

Oligopoly challenge​

The team consisting of Larkin Liu (Doctoral Candidate), Yihua Wang (M.Sc. and Research Assistant) and Prof. Dr. Stefan Minner also won the Oligopoly challenge.

Larkin Liu
Yihua Wang
Stefan Minner

Duopoly challenge

Matt Dickenson is a software engineer in Colorado. He holds a BS degree in political science from the University of Houston and an MS degree in computer science from Duke University. He is also the author of two books and has taught graduate-level programming and data science courses throughout the United States.

Matt Dickenson​

Dynamic challenge

Fulin Xie, Ph.D., is a Data Scientist at Microlise in the UK. By the way, his Duopoly submission was also ranked second in that challenge. This was the toughest battle ground in 2020.

Fulin Xie dynamic pricing machine learning
Fulin Xie​

Oligopoly challenge

Boris Kuznetsov and Oganes Manasian, Boris is currently finalizing his MSc. in mathematics and finance at the EPFL in Lausanne, and Oganes is currently working as Intern at IBM Research in Ireland.

Boris Kusnetsov Dynamic Pricing
Boris Kuznetsov
Oganes Manasian Dynamic Pricing Machine Learning
Oganes Manasian

Duopoly challenge

Kyle Maclean and Fredrik Odegaard, both work at The Ivey Business School in Canada as Assistant and Associate Professors. For Kyle it is already the second year in a row he is winning the Duopoly challenge!

Kyle Maclean
Fredrik Odegaard

Duopoly & Dynamic challenges

Kyle Maclean, PhD, Assistant Professor at Ivey Business School in Canada. Especially the Duopoly was our most competitive challenge and a very tight competition.

Kyle Maclean

Oligopoly challenge

Ruben van de Geer, PhD, Data Maestro at GoDataDriven in the Netherlands. Ruben actually submitted his first oligopoly algorithm only days before the final deadline and was going straight to the top with an impressive margin.

Note: Ruben was not in the organization committee during 2019, he joined the organizers back in 2020. Of course organizers are not participating in the DPC.

Ruben Van DeGeer Dynamic Pricing python
Ruben van de Geer
Scroll to Top