# Optimisation of simulated scenarios

**α**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!

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:

**A starting scenario****Potential extra concepts**to add in the process of optimisation**What to optimise**: A formula that calculates preference shares, revenue, or profit for a selected group of products**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:

**Attribute 1**:*Probiotic content claim***Level 1**:*with Bifidobacteria + Lactobacilli Auroris***Level 2**:*with Bifidobacteria Santium***Level 3**:*with Lactobacilli Auroris***Level 4**:*with Healthy Gut Bacteria*

**Attribute 2**:*Pack type***Level 1**:*Glass bottle***Level 2**:*Plastic pack***Level 3**:*Wood pack*

**Attribute 3**:*Pack type***Level 1**:*Eco claim***Level 2**:*No eco claim*

**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

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

### 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.

**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.

### 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.

**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.

**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.

### 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.

### 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.

### 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.

### 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.

**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.

## 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

button to add revenue formulas for original concepts. For example:```
sum(1000 * share(i) * price(i),["Granny's mix", "Orange Fox"])
```

And the button

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

and 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

and 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). |