Node Description

Price War Node

The Price War node is designed to simulate how Competitors might dynamically respond to a changing competitive environment over multiple Rounds of Battle.

At the beginning of each Round of Battle, each Competitor will conduct Private Experiments by continuously changing the Price of a small set of Focus Products until a Maximization Goal is reached. Other Competitors cannot see these Private Experiments. The Maximization Goal can be to maximize Profit, Revenue, or Quantity Sold. While only the Competitor’s selected ‘Focus Products’ will change Price, the Maximization Goal will be evaluated across all of the Competitor’s Products. The Private Experiments always assume that the other Competitors in the Market maintain their existing Prices.

For example, a Retailer may wish to maximize Profitability across their entire Store by changing the Price of one or two Focus Products. The Retailer will first secretly conduct a series of Private Experiments by raising and lowering the Price of those selected Focus Products until the total Store Profit is maximized. The Retailer will then push these Maximizing Prices out to the rest of the Market with an Expected Result of increased Profits.

Unfortunately, each of the other Retailers in the Market are all following exactly the same methodology. Each Competitor secretly conducts their own Private Experiments, then all Competitors push out their Maximizing Prices to the rest of the Market at the same time. As a result, there will be a difference between the Expected Results of the Competitors and the Actual Results from the Market.

The Price War continues in this fashion for the number of ‘Rounds of Battle’ specified by the user. Competitors always following the same methodology and never anticipating that other Competitors might also change Prices.

A Dynamic Price Equilibrium is often the outcome of the Price War node. For example, Competitors might drive Price down when the Expected Result is increased Profit, but will then increase Price after discovering the other Competitors have also set lower Prices. This orbiting chaotic decrease – increase – decrease – increase dynamic Price Equilibrium can carry on indefinitely.

But the Price War node can also be used to find a Static Price Equilibrium¬†across all Competitors. A static ‘Price Equilibrium’ is found after many Rounds of Battle when the allowed Price ‘Adjustment Percentage’ gets increasingly small. At this static equilibrium point, Competitors are generally as happy as can be expected given ever tightening Market dynamics – they neither wish to raise nor lower their Price.

To find a Static Price Equilibrium follow these steps:

  1. Set a high ‘Starting Adjustment Percentage’ of around 16%,
  2. Set a low ‘Ending Adjustment Percentage’ of around 0.25%,
  3. Set the ‘Maximum Number of Tuning Adjustments’ to ‘-1’ (this is very important otherwise this static ‘Price Equilibrium’ methodology won’t work),
  4. Set a high number of ‘Rounds of Battle’ of around 100 to give Competitors a chance to find their best Price points. As each Competitor makes just a single Private Experiment each Round, the algorithm should run reasonably quickly.

The Price War node can find the Price Equilibrium point even when Product Costs are changing dynamically. Dynamic Costs depend both upon how many Customers purchase the Product and which are the Customers who purchase. The average Cost To Make (CTM) a Product might decrease as the Quantity sold increases. Or Customers with a higher Cost To Serve (CTS) might start buying the Product if it starts getting very cheap. The Price Equilibrium point which maximizes Profitability takes into account these dynamically changing Costs.

This Community Node documentation assumes you have already downloaded the open-source KNIME analytics platform and installed the free Market Simulation (Community Edition) plugin. If not, start by returning to Getting Started.

Competitive Battle

Coke and Pepsi have been fighting the Cola Wars for over 100 years. In this example, Coke and Pepsi are fighting to establish new Prices for their flagship Products:

  • Coke-Regular-Can (6 x 330ml = 1980ml)
  • Pepsi-Regular-Can (6 x 330ml = 1980ml)

Neither Competitor wishes to change the Price of any other Product. Yet both Competitors wish to take into account Cannibalization and maximize the total Profitability across their whole Brand.


Product Array

The ‘Input Product Array’ contains¬†the set of existing Products in the Market. Each row corresponds to a Product, with the name of each Product also existing in the ‘Input WTP Matrix’.

The current Price of each Product is required. In addition, the ‘Input Product Array’ may contain details about each Product’s Brand, Store, Location, Family, Category, Platform, and Cost.

In this case, the two flagship Products for the Competitors have been highlighted. The Prices of these Products will be changed by the Price War node.

WTP Matrix

The ‘Willingness To Pay’ (WTP) Customer Distribution matrix contains details for each Product column in the Market by each Virtual Customer row. The total number of Virtual Available Customers is equal to the number of rows in the WTP Matrix.

In addition to each of the Product’s WTP Customer Distributions, this ‘Input WTP Matrix’ can also contain two types of ‘Dynamic Cost’ Distributions that depend upon the Customers who Purchase the Product. These ‘Dynamic Costs’ are added to the ‘Static Cost’ from the ‘Input Product Array’ to calculate the Product’s Margin.

All nodes capable of predicting a Market Simulation require both an ‘Input Product Array’ and an ‘Input WTP Matrix’.



The user selects the set of Focus Products that will change Price (multiple Products can be selected). Additional Products are ‘In Scope’ if they are also considered by the Competitor when deciding whether an improvement has been made. For example, the user may wish to maximize Profitability across the Store. While only the Focus Products change Price, the impact on the rest of the same-Store Products will also be considered. The Competitors who actively compete in the Price War depend upon the set of Focus Products selected by the user.

The user can define the Maximization Goal to maximize Profit, Revenue, or Quantity Sold. If the goal is to maximize total Profit then the Cost of all ‘In Scope’ Products must be known.

Competitors can be defined by their Store, Brand, Location, or other Product Attribute found in the Input Product Array. These Competitor definitions are also used to define the set of additional ‘In Scope’ Products considered by the Competitor when evaluating whether a maximizing improvement has been made. For example, if the user wishes to change Price to maximize Store Profitability, then same-Store Cannibalization will be taken into account. That is, additional Focus Product sales from Customers who would have bought something else from the same-Store do not maximize total Store Profitability unless the Customer is paying a higher margin.

Output Table Results

The results sent to the Output Tables can be very detailed or can only contain summary results. Selecting ‘Output Competitor Expectations’ is the most detailed selection and will cause the Output Tables to include the Expected Results of each Competitor secretly calculated during their Private Experiments. Selecting ‘Output Individual Battle Results’ will only include simulated Actual Results at the end of each Round of Battle when all Competitors attempt to set Maximizing Prices at the same time. Selecting ‘Output Final Results Only’ is the least detailed selection and will only include the actual results from the final Round of Battle.

Output Market Size

The output Market Size used to scale the Quantity sold, Revenue, and Profitability for each Product in the Market.


Port-0 Change Results

The ‘Output Change Results’ lists the degree by which each Product in the Market was changed (if at all) and the impact of the change on each of the other Products in the Market.

In this case, the dynamically changing Prices for each Product have been selected and charted over each round of Battle.

Port-1 Product Array

The ‘Output Product Array’ corresponds to the Input Product Array but updated to reflect the impact of the ‘Change Scenario’ outcome. The user can select whether to save the state of the ‘Output Product Array’ after each Battle.

Port-2 Purchased Products List

The ‘Output Purchased Products List’ shows the before-and-after of the Products purchased by each Virtual Customer. The user can use the views to hilite the Customers of interest who switched their purchase decision. These Customers who switched as a result of the ‘Change Scenario’ change can then be further analyzed.

Port-3 KPI Indicators

The ‘Output KPI Indicators’ contain select information about the tuning process and the quality of the final results.

In this case, the KPI’s indicating the total percentage change in Price, Quantity, Revenue, and Profit for both Cola Brands have been selected and plotted.