Optimisation of simulated scenarios


Optimisation is currently an α alpha feature. Have you got any suggestions for how we can improve the optimiser? We are always looking for feedback, so feel free to get in touch!
Optimising the Simulation

Sometimes you want to try simulating different combinations of features and prices of your products in order to find an optimal configuration for launch. This process can take a lot of time if you have a lot of features and price points. Luckily, Conjoint.ly’s optimisation function runs in only minutes.

The conjoint optimisation function will ask you several inputs:

  1. A starting scenario
  2. Potential extra concepts to add in the process of optimisation
  3. What to optimise: A formula that calculates preference shares, revenue, or profit for a selected group of products
  4. Contraints (like number of concepts in your scenario)

Then Conjoint.ly runs a genetic search algorithm that finds the best scenario that maximises the formula from Step 3.

Case study: Granny’s Mix yogurt

This guide follow the optimisation journey of Granny’s Mix, a hypothetical yogurt manufacturer. Granny’s Mix is a probiotic yogurt manufacturer seeking to strengthen its market position against its competitors, including Orange Fox. They conducted a Generic Conjoint experiment to gather insights for its new product development.

Suppose Granny’s Mix wants to identify the combinations of NPDs that will maximise revenue. They also want to see the incremental gain of each NPD to see how each product addition benefits the overall portfolio. Based on the specified product attributes and levels below, there are 24 = 4 × 3 × 2 possible concepts – even without considering the price attribute:

  1. Attribute 1: Probiotic content claim
    1. Level 1: with Bifidobacteria + Lactobacilli Auroris
    2. Level 2: with Bifidobacteria Santium
    3. Level 3: with Lactobacilli Auroris
    4. Level 4: with Healthy Gut Bacteria
  2. Attribute 2: Pack type
    1. Level 1: Glass bottle
    2. Level 2: Plastic pack
    3. Level 3: Wood pack
  3. Attribute 3: Pack type
    1. Level 1: Eco claim
    2. Level 2: No eco claim
  4. Attribute 4: Price: Varies from $1.68 to $4.38

Instead of manually trying 24 or more different simulations, Granny’s Mix used Conjoint.ly’s powerful online simulator to find the combination of attributes that maximise its revenue in several steps:


Step 0: Choose starting scenario

Within the scenario you are looking to optimise, select OptimisationOptimise.

Please note that all the settings within the simulator scenario (including the advanced settings) are used in optimisation function.

Optimising the Simulation

Step 1: Choose concepts

Step 1a: Tick the removable concepts

First, you tick on the product concepts that are possible to be removed by the optimisation function.

In this example, Granny's Mix can only remove its own product but not Orange Fox's. Their subborn competitor will never leave the market, so the Orange Fox's box is unchecked.

Optimisation Step 1a Tick on concepts that are possible to be removed by the optimisation process
Step 1b: Tick the changeable attributes

Then, you specify whether the product attributes are possible to be changed during the optimisation function. Remember to uncheck the boxes for those attributes that you don't wish to change or cannot change.

Granny's Mix does not wish to change any product attributes other than price for the existing product. Thus, it checks only the price attribute.

Optimisation Step 1b Tick on attributes that are possible to be changed by the optimisation algorithm

Step 2: Configure extras

Step 2a: Add or remove extras

The original concepts in step 1 are based on the initial scenario setting and may contain unchangeable attribute levels. If you wish to modify and test the concepts, you may add the concepts as extras in this step. These extras can be made up of combinations of any attribute level, and you can include as many extras in the optimisation wizard as you wish.

Granny's Mix intends to identify the next new product ideas based on existing product attributes and levels. Hence, it removes the default Orange Fox's extra and added seven extras based on attribute levels that it is ready to offer.

Optimisation Step 2a Add or remove extras
Step 2b: Tick the must-have extras

After adding the extras, you may check the boxes for those extras that must be present within the optimised simulator. Otherwise, keep the extras' boxes uncheck.

Currently, Granny's Mix only has one extra that must be included in the simulator and it ticks the extra's box.

Optimisation Step 2b Check extras that must be included in the optimised scenario
Step 2c: Specify changeable attributes for the extras

For each extra, you may specify whether the attributes are to be varied by checking the boxes. There is no limitation on how many extras you can add. Feel free to add any concepts with various attributes.

Just remember, as indicated in the Granny's Mix's example, the concepts and extras need to have variation in attributes levels.

Optimisation Step 2c Specify extras' attributes

Step 3: Objective function

The objective function will look for what to maximise for the optimisation function.

You can specify your objective function by using the standard mathematical operators (i.e. +, -, *, /, ^) as well as built-in functions (i.e price, share, and sum).

Some practically useful objective functions are revenue, volume, and profit.

Optimisation Step 3 Objective Function

Step 4: Optimisation constraints

In the previous steps, you may include as many concepts and extras as possible into the optimisation function to avoid missing any possibility. This step allows you to specify the potential number of concepts in the final optimised scenario.

For instance, Granny's Mix specified nine product concepts (two original concepts and seven extras) but prefer to have the top two to five concepts in the optimised scenario. Hence, the optimisation constraints are from two to five in this scenario.

Optimisation Step 4 Optimisation Constraints

Step 5: Optimising

Take a break for few minutes while the powerful optimisation function works out the most optimised scenario for you.

Please note that the wizard uses a genetic search algorithm and hence:

  • It takes a few minutes to put together the data and
  • It may not always find the absolute optimal scenario

However, the optimisation function is more time-saving and accurate than manually changing the attributes and recalculating the simulator. It also serves as a solid foundation for the next experiment or new product development.

Optimisation Step 5 Optimising

Step 6: Optimisation output

The optimal product combinations are here! There are two main sections of the output.

6a: The optimised scenario

The optimised scenario sits next to the baseline scenario. It lists out the most optimal concepts identified by the optimisation algorithm. Here, you can check the attribute levels of each concept. You can still change the colour, naming, and the attributes of the concepts if you wish to.

Granny's Mix's revenue optimising scenario removes its original concept by the optimisation algorithm and includes four extras instead. The optimised scenario also suggests all product concepts set at the price level of $1.90.

Optimisation Step 6 The optimised scenario
Step 6b: The optimised preference share and revenue projection simulator

Both the preference shares and revenue projections simulator show the baseline and optimised scenario side-to-side.

In this example, the revenue optimised simulator shows:

  • The preference shares of Orange Fox decrease from 34.2% to 8.6% with revenue projections for 1,000 units offered lowered to $162.25 from $649.20 and
  • The preference shares and revenue projections for the original concepts including None of the above are redistributed to the Granny's Mix extras.
Optimisation Step 6 The optimised scenario

How to specify the objective function?

The objective function should describe your business goal. The optimisation algorithm will try to maximise it by tweaking the scenarios, attributes, and levels.

Built-in functions

The objective function can be level up by using the built-in functions below:

Function Description
if(condition, then, else) Checks condition and returns a value if it is true or another value if it is false
ifs(condition_1, then_1, condition_2, then_2,..., else) Returns a value that corresponds to the first true condition or the else value if other conditions are false
price(concept_name) Concept price of preference on the current scenario
share(concept_name) Concept share of preference on the current scenario
sum(expression, array) Sum of expressions x over the array y, where the iterant refers to the name of the variable that is substituted in the expression x.

Reference to concept names

Mask Description Example
"*" Include all concepts within the simulation Revenue for all concepts and extras:
sum(1000 * share(i) * price(i),y=["*"])
["Concept 1","Concept 2"] Include specific concepts by name Revenue for Granny’s Mix and Granny’s Mix Premium:
sum(1000 * share(i) * price(i), y=["Granny's Mix", "Granny's Mix Premium"])
Or equally:
1000 * share("Granny's Mix") * price("Granny's Mix") + 1000 * share("Granny's Mix Premium") * price("Granny's Mix Premium")
["Product Concept *"] Include concepts by name with wildcards Revenue for all concepts starting with “Granny”:
sum(1000 * share(i) * price(i), y=["Granny*"])

Please note that concept names are not case-sensitive in the objective function. Therefore ["Concept 1","Concept 2"] is the same as ["concept 1","concept 2"]. You can only use English letters, numbers, and common punctuation symbols.

Mathematical and boolean operators

Operators Description Sample Equation (assume x=6, y=4) Output
x*y x multiplied by y x*y 24
x-y x minus y x-y 2
x+y x plus y x+y 10
x/y x divided by y x/y 1.5
x^y x raised to the power of y x^y 1296
! Not x !(x==y) TRUE
x&y x and y x>5&y<5 TRUE
x|y x or y x==6|y==6 TRUE

Revenue as the objective function

The basic formula for revenue is share(i) * price(i).

You can use the Add total revenue of original concepts button to add revenue formulas for original concepts. For example:

sum(1000 * share(i) * price(i),["Granny's mix", "Orange Fox"])

And the button Add total revenue of extras for extras:

sum(1000 * share(i) * price(i),y=["Granny's mix probiotic content *", "Granny's mix pack *", "Granny's mix glass bottle *", "Granny's mix eco *", "Granny's mix premium *"])

Please note that the Add total revenue of original concepts and Add total revenue of extras only appear in this step if the experiment contains “price” as an attribute. If your experiment does not study price and yet want to maximise revenue as a function, you may consider multiplying the volume with a price constant.

Volume as the objective function

When your experiment does not include price, you may specify volume as the objective function. Its basic formula is sum(1000 * share(i))

For convenience, you may click on the Add total volume of original concepts and Add total volume of extras buttons and get:

sum(1000 * share(i), y=["Granny's mix", "Orange Fox"] ) + sum(1000 * share(i), y=["Granny's mix probiotic content *", "Granny's mix pack *", "Granny's mix glass bottle *", "Granny's mix eco *", "Granny's mix premium *"] )

Profit as the objective function

The algorithm will maximise profit when you tweak the revenue formula by adding variable costs. If you variable cost per unit is, for example, 20, the objective function looks like:

sum(1000 * share(i) * (price(i) - 20 ), y)

If Granny’s Mix, the variable cost is $20 per unit and fixed cost per additional concept is $5,000, the profit objective function is:

sum(1000 * share(i) * (price(i) - 20) - 5000, ["Granny's mix*"])

Error messages

Do not panic if you see the error. It is probably due to an error in one of the following sources:

Source of error Recommended action
Configure extras Check and ensure the extras added are different as the same extra can only be added once.
Objective function Check and ensure the objective function is entered in the correct format.
Optimisation constraints Try to provide a broader range for the constraints (i.e. two to five instead of three to four).