Workflow Overview

In previous workflows, such as BB-113 Commodity Competitive Loop, the destructive power of Price Wars was examined. When two sellers sell the same commodity Product then Prices will drop towards Marginal Costs and neither Competitor will be profitable.

This workflow examines a different situation. Here, a Price War starts between two Competitors who each sell very unique orthogonal Products.

As before, each Competitor independently sets their own Profit Maximizing Price assuming the other Competitor maintains their most recent Price. The new Prices from both Competitors are then pushed into the Market together, and the Competitors set about finding new Profit Maximizing Prices.

This Price War is simulated within a Recursive Loop, which allows for an unlimited number of rounds of dynamic Competition.

Unlike the earlier workflow BB-113 Commodity Competitive Loop, the results of this workflow are much better for the Competitors. Within 3 iterations, both Competitors identify a relatively high and stable Price which allows them to be profitable. Dropping Price would reduce their profitability even if the other Competitor were to maintain their previous Price.

See also (advanced users only): MO-112 Orthogonal Price War

This Building Blocks example 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.

Dynamic Market

This Market comprises of two Competitor each selling highly differentiated Products to the same set of Customers.

Dynamic competition occurs over many rounds of competitive action-and-reaction. Here, both Competitors simultaneously try to set their Profit Maximizing Price. Neither expects the other Competitor to be doing the same.

This competitive dynamic is repeated many times in a Recursive Loop.

Orthogonal Products

The ‘Customer Distributions’ node can quickly create orthogonal Products with uncorrelated WTP Customer Distributions.


Both Spacely Sprockets and Cogswell Cogs are configured to have WTP Customer Distributions shaped as Normal Distributions with Mean = 100 and Standard Deviation (SD) = 50.

Product Array

The Product Array contains a row of information, including Price and Cost, about each Product in the Market.

WTP Matrix

The WTP Matrix contains a column of Customer Willingness To Pay (WTP) values for each Product in the Market.


The differentiation between Spacely Sprockets and Cogswell Cogs is simply calculated as the difference between each Customer’s Willingness To Pay (WTP) for both.


The WTP Customer Distributions for both Spacely Sprockets and Cogswell Cogs can be plotted on overlapping histograms.

WTP Matrix

Spacely Sprockets has the green WTP histogram. Cogswell Cogs has the red WTP histogram. Mean and SD are the same, but the underlying Customer preferences can be very different.


Subtracting the two WTP Customer Distributions reveals a wide range of Customer preferences. Some Customers would pay up to $250 more for Spacely Sprockets than Cogswell Cogs.

Loop Start

The ‘Recursive Loop Start’ node returns the Competitors Prices from the last round of competition and re-injects them into the next round of competition.


The ‘Recursive Loop Start’ node does not need to be configured. The companion ‘Recursive Loop End’ node contains all of the configuration details.


The input to the ‘Recursive Loop Start’ node are the original Prices from the Customer Distributions node.


The output from the ‘Recursive Loop Start’ node are the Competitors Prices from the end of the last round of competition.


At the beginning of each round, each Competitor again sets their expected Profit Maximizing Price.

Set Price

Price setting is based upon the assumption that the other Competitor maintains their Price from the previous round.

Demand Curve

After the 3rd loop iteration, the Demand Curve for Spacely Sprockets looks like this. The ‘Profit Engine’ node calculates that the Profit Maximizing Price has already been reached and does not wish to change.


At the same time, the Demand Curve for the Competitor Cogswell Cogs looks like this. The Profit Maximizing Prices are slightly different ($101.98 vs $102.25), but neither Competitor wishes to change Price.

New Market

The Market is re-created after both Competitors set their new Profit Maximizing Prices.

Old Prices

At the beginning of the 4th round, the old Prices from Spacely Sprockets and Cogswell Cogs look like this.

New Prices

But the new Profit Maximizing Prices are unchanged from the old Prices.

Loop End

The ‘Recursive Loop End’ node collects the results and passes the new Prices and Market conditions back to the ‘Recursive Loop Start’ node.


This Dynamic Competition has been configured to loop for 10 iterations (from Iteration 0 to Iteration 9).

Loop Results

Unlike with the Commodity Products, this Price War quickly stops after the 3rd round of competition.

Final Results

After the loop has finished, the final Prices are collected to calculate the final results.


The final Prices need to be sorted to the top of the loop iteration results.


The last Prices from each Competitor are then collected with a ‘Row Filter’ node.


Line Charts

The trends from the Recursive Loop can then be plotted using the ‘Line Chart’ node.

Price Trend

Spacely Sprockets initially overshoots its steady-state Profit Maximizing Price but corrects at the 3rd iteration.

Quantity Trend

Unlike before, Spacely Sprockets does not expect to win over all the Customers in this Market.

Profit Trend

Profits decline from the initial expectations but remain flat despite continuing rounds of competition.