Modern product formulation has never been more complex. Whether developing a new shampoo or a life-saving drug, today's scientists and engineers face a new reality: ingredients are no longer simple. They come with sub-choices. Each ingredient may have multiple sub-ingredient options, each with its own concentration limits, and each formulation may require selecting only a handful from a longer list of candidates. Defining a valid experimental space under these layered constraints is a new challenge, which means that the better-known approaches are no longer sufficient.

In this presentation, we introduce a new JMP add-in developed to meet exactly this challenge. The add-in gives researchers an intuitive interface to define complex mixture structures, including hierarchical ingredient categories, upper and lower concentration bounds, and limits on how many sub-ingredients can be active in any given formulation. From these inputs, a candidate set table is constructed to be fed to the JMP Bayesian Optimization platform.

We then bring this to life with a real-world application, where the add-in was used to design experiments for a new formulation, navigate a highly constrained ingredient space, and ultimately identify a winning formula faster and with greater confidence than traditional approaches would allow.

 

 

 

Welcome. Today, I'll be talking about when ingredients have sub-ingredients. This is a new JMP add-in for complex designs, complex formulations, and we'll see together how this new GUI add-in will help formulation folks, scientists, and engineers create experiments in a little bit of an easier way.

Let's get started. In a typical product or chemical formulation design, you typically have a few handful of ingredients, such as in here A, B, C, and you're trying to combine them together, for example, to create a certain formulation. Usually or typically, the type of constraints that you might find yourself having is, for example, that the range or the value of a certain concentration, the concentration of A to be between a certain lower and upper value, B something along some other range, and then same thing with C. Then maybe you have some niche constraint that the ratio of B over A can be something under or has to be under two, for example.

This is typically what people would… First of all, people would typically use the Design of Experiments menu directly. Then, if there is any value range or limits, they will put that instead of putting 0 to 1 for each one of these formulations.

Over here, you see that factor constraint that we showed that A over B or B over A was always smaller than two. You can add that as a linear constraint in this format. If you look at the ternary plot, you will see that the design of experiment that would be suggested for you would have these points, and then you see the constraint over here.

This is really what I would say the typical type of constraints or complexity that people are used to. But then what happens if one of or all of these factors really had multiple sub-ingredients or sub-ingredient candidates? In other words, if I come and tell you, "Well, you know what? I'm trying to create a formula here that is a mix of component A, B, and C, but I have multiple options for A, and multiple options for B and C." You might think, "Well, okay. If I already know the limits or the range for each of these components, I may just add extra factors in my design of experiments where, for example, A is any of these five components, same thing you see here for B and same thing for C."

Let's make this a little bit more complex. What if each of these subcomponents or sub-ingredients had different upper and lower values? How can we show this in a design so that we capture the fact that each of these subcomponents have different range? You see here, this is the example where I'm showing that each one of these sub-ingredients have different levels or ranges.

I tried that in the DOE menu, and then if I add a disallowed combination filter where, for example, I tell it that when the category of A is A1, do not allow the concentration to be anywhere between or under 0.1 and above 0.4. When you click on Make Design, the issue is that you get a constraint error. It's already a mixture design, so there's already constraints on it. Adding that type of disallowed combination will just break the design and would not converge to optimize it.

Let's even make it more complex. What if I tell you now that instead of just choosing one of these subcomponents, I would like to choose a couple, a handful of these subcomponents together? Now, let's stick back to keeping the range the same and then saying that, "You know what? I'm trying to see my formula if I can optimize it when I use 1–3 ingredients of the type A, and then 1–2 ingredients of type B, and then just keep it at one ingredient from the C ingredients."

Now you see two type of constraints, the fact that I can have multiple subcomponents and the fact that each of these components can have its different range. Let's combine these two constraints, and then that would be, I would say, the most complex formulation situation where each one of these subcomponents have its own range, and at the same time, we're trying to get into using 1-3 or 1-2 or just one of these sub-ingredients.

Here, if you want, this is the problem statement. This is the situation where some formulation scientists or engineers might find themselves. The GUI, the add-in user interface that I created really helps in creating a Candidate Set Table for that.

Let's continue here. What to do? Before I talk about the GUI itself, the add-in itself, I'm going to take a step back here and acknowledge the function, the equation behind the scene here, which is a JSL function called Random Linearly Constrained Uniform function. That was developed by Laura Lancaster. If you go into the script index, the JSL script index, you might find it over there with a little example with it that explains that there are sub parameters that you can bring into the function, and what are these parameters.

I actually have an example here from Laura that she presented a while ago or at the beginning of this year, where you can actually put in the matrices where you can specify what are the constraints. In this example, there are 2, 4, 6, 8, 10, 12, 14, 14 total sub-ingredients between the three groups.

For example, in this case, in the first line, it's saying that these components, the 1, 2, 3, 4, 5, the sum of these five groups is equal to 100. These other five or six components, their sum is equal to 200. Here we are taking care of that constraint of these components. The lower and upper matrices, this is also relating to the range, so the upper and lower range of each of these components.

The G and LC and UC, all these are related to how many subcomponents are we going to take. These LC and UC are saying that anything between 1 to 2 components and 1 to 3 components for the first group and the second group. It's a little bit of a complex function, but by all means, you can do things in JSL. My contribution, if you want, was to take this and bring it into a user interface for people to input their information about the constraints, the number of sub-ingredients, and the upper and lower limit of each of these sub-ingredients.

The JSL function itself spits out a data table that looks like this. There isn't really names for the columns, etc, but you have to do just a little bit of a cleanup. This is an example going with Laura's example that she presented. If I go back to this table, the question might be, "Well, okay, great. This seems like it creates some table, but what do you do with it?"

Well, there's two options for you. One, you can take this table to the custom design, Covariate/Candidate Run function, or you can take it to the Bayesian optimization under the batch selection, load Candidate Set Table. They're as you see over here, and obviously, I'm going to show that in a demo in a moment.

But the idea is that because of these constraints that we talked about, the workflow towards creating a new design of experiments or creating a Bayesian optimization experiment is to load that Candidate Set Table so that any experiments that will be recommended will be based off a table that respects the constraints that we have.

Quickly, just to show here, you can see in the first row that there's only two components out of the five components that were chosen, for example, and their sum is always going to be 100. Again, I'll show a little bit more about that in the example that I will demo.

Before I continue, before I show the add-in, I just want to acknowledge also the presentation that Laura and Chris Gotwalt had presented at the beginning of the year. I highly recommend for people to go into this presentation, and this was part of how to take Bayesian optimization to another level or how to use it for this situation of complex formulations with complex constraints.

Chris presented those three situations where you have multi-mixtures, and then you have a situation where you have multiple sub-ingredients, and then Laura presented how you use the script, and then you create the data table, and then you create a cleanup version of the data table.

Let's hop into… Actually, no, before. Let's first bring the function to a graphical user interface. But before I hop into the demo, I'm just going to show here the example that I'm going to follow. We are going to create together the best green smoothie formulation ever.

The situation that we are in is that we have six fruits that we can choose from, and then three vegetables, along with milk and ice, and we are trying to create the best 500 grams of green smoothie.

If you remember at the beginning in the intro, when we spoke about the most complex product formulation situation where I said that you have multiple subcomponents of A, multiple B's, and multiple C's. In this case, this translates to the following: we have six different fruits, each one of them have different range.

You see the bananas and the avocado, for different reasons, they have a different range. Avocado being more expensive than the others, and banana, you really probably don't want to put too much banana in your smoothie, whereas the other ones are fine, they have similar range. We would like to take 2 to 3 of these components, and then 1 to 2 of the vegetables, and then ice and milk have their own limits or value range.

Then for response, I'm just going to focus on the taste rating. We would like to maximize the taste. Let's go into JMP. The add-in is called Candidate Set Generator. What we're going to see here is that there is a main… First of all, there is a number of candidate set runs that you can create.

The total number of rows at the end of that Candidate Set Table can be whatever you want. By default, I've set it to 150, but you can make it 1,000, 10,000, whatever you want. For the main factors, you're going to start by typing in if you'd like the fruits, for example, and then the min and max for each one of these values. I don't remember what they were, but let's just say for now these numbers.

Then have sub-ingredients, let me say you're going to have… we're going to take 1, 2, 3 sub-ingredients. Then you can continue adding more of the main factors, which were the fruit, vegetables, ice, and milk. To make my life easier, I actually created a main factor table. The nice thing in the add-in is that you can save and load the factor. In this case, I'm going to load from the main factors, and then it's going to replace these main factors for me.

Then for the sub-ingredient candidates, I'm going to do the same thing. If we follow the same example, I had the fruits, these six fruits, and then these three vegetables, with each one of them having its own upper and lower value.

For now, there's this column called Include, which 1 means this row will be included, but for whatever reason, let's say you have so many, you have hundreds of sub-ingredients, and you want to just keep them for now, and then you want to play around with whether to include it or not in the creation of the Candidate Set Table, you can just change that to 0, and the final table will just not have that row included.

Same thing, I'm going to load the sub-ingredients, and now I have these sub-ingredients over here. If I click on Generate Candidate Set Table, the table that I'm going to create will just have different columns for ice, milk, and then all the fruits and all of the vegetables with different levels or values, but it would not have any constraint on the summation, on whether the sum of these components is going to be equal to 500 or not.

If you truly want this to be a mixture, and you truly want the sum to be equal to a certain level or a certain value, this is where the add constraint will be helpful or useful. I'm just going to add that all of these four main factors, when you sum them, it's going to be equal to 500 grams.

Then if for some reason you had multiple constraints, such as if you remember at the very beginning when we had a ratio of component A to component B, and then it was less or equal to a certain value, you can certainly add that. Then similarly to here and here, you are able to save and load those constraint tables.

Let me just quickly show how the constraint table would look like. It's just something like this. Okay? But since I just have one constraint, I don't necessarily need to create a table. Then what happens is that when I click on Generate Candidate Set Table, I will get this table over here with 150 rows.

You can see I have ice, milk, and then fruits and vegetables are grouped, each one of them into their own group. If I sum them, combine and sum, you'll notice that the sum is always going to be 500. If I did not have that constraint, then the sum would just be random.

Then I go back to my initial thought or question, I have this candidate set. Great. What do I do with this? Here, if you remember when I said there are two applications, one either in the custom design or the second one in the Bayesian optimization.

Let's just start with the custom design menu here. Then let's say that, like I said, I'm trying to maximize the taste. For the factors, rather than adding the factors over here, I'm going to click on the Candidate Run or Select Covariate Factors. I'm going to take my covariates from here.

Then you'll notice if I click on Continue, I'm able to include or select the number of runs that I would like. Let's say I want to create 10 runs, or it seems 12 is the minimum that I have, if I want to understand the impact of each one of these parameters.

Now, because of the constraints that I have, if I click on Make Design, this is not going to converge. A little trick, if you want, is that I will need to select all these rows. For some reason, I do not know how to select all. Okay, here we go. Just quickly. Here we go.

Instead of having the estimation be necessary, I can change it to if possible to just make sure that the design does converge. Let me switch that back to 10. Then I'm going to click on Make Design. Then JMP is going to try to find me the best 10 runs that would converge to create for me a design experiment with the optimization.

You see over here, now I have a design experiment where I can go and do my first initial 10 experiments. Then you notice here that my constraints were respected, that the ice was between 50 to 150, the milk 150 to 300, that the banana, if it was present, that it was always above, I believe, what was it that we said? Between 50 to 80. You see it over here. Same thing with the other ones, and then same thing with the avocado is always going to be 50 to 80. Then for the vegetables, we're always going to take 1 to 2 sub-ingredients, and then we have the taste as our response.

That's with the usability of the Candidate Set Table for custom design. Now, let's see how you actually use it in the Bayesian optimization. Let's say you started with this first 10 experiments, let's say you got this taste survey, and you got taste of between 1 and 2, between 1, 2, maybe 3 over here. Then you're trying to really optimize this experiment or this formula, this smoothie, really.

We're going to click now on Analyze, Specialized Modeling, Bayesian Optimization. We're going to put the taste in the Y, we're going to take everything else as an X. Then maybe let's make or suggest two runs per batch for added batch, and then I'm going to click on OK.

When I'm going to use in the batch selection, when I'm going to have this recommended two additional experimentations, you see by default, you see the values of the fruits, for example, they're not respecting those constraints that we talked about. I'm getting all six fruits in the same time. Really the constraint that I had was that I'm only allowed to have 1 to 3 components in the same time, and same thing for the vegetables.

Over here in the Batch Selection tab under that red triangle under the Bayesian Optimization Batch Customizer, this is where we are able to click on Load Candidate Set from Data Table. This is where we can feed the Bayesian optimization tool or interface the candidate sets that we would like it to optimize or select from the next experiment.

If I click on Load Candidate Set from Table, and then I'm going to click on Candidate Set, you'll notice right away that the recommended experiments now are coming from that table, and then they do, as a matter of fact, respect the constraints that we talked about. You see here it's only selecting two fruits out of the six, and then it's only taking spinach this time, and then the second one also seems like it was taking the spinach as well.

In the same fashion of Bayesian optimization, you just click on Make Table, and then you will… If you go back to the table over here, you'll see the two added experiments to run with the reason added to it. You go and create those smoothies, you get the survey, you get the taste score back, and then hopefully, either the taste is the same or it's actually increasing, and then you optimize your smoothie this way. This is really the usage of the GUI for the creation of the Candidate Set Table in an easier way.

As a conclusion, really, the Candidate Set Table user interface allowed us to create a list of formulations that respect, 1, having multiple sub-ingredients. If it's actually mixture, then this is what typically people call mixture of mixture design, respecting the fact that different sub-ingredients have different ranges. This is what I would call mixture of mixture design with different range constraint.

When we're talking about choosing one or multiple sub-ingredients at the same time, this is what we refer to as cardinality constraint. Last but not least, this Candidate Set Table is used to be fed to the custom design platform or the Bayesian optimization. That's it. Thank you so much.

0 Comments
Presented At Discovery Summit 2026

Presenters

Skill level

Intermediate
  • Beginner
  • Intermediate
  • Advanced
Published on ‎07-16-2026 11:13 AM by Community Manager Community Manager | Updated on ‎10-30-2026 03:34 PM

Modern product formulation has never been more complex. Whether developing a new shampoo or a life-saving drug, today's scientists and engineers face a new reality: ingredients are no longer simple. They come with sub-choices. Each ingredient may have multiple sub-ingredient options, each with its own concentration limits, and each formulation may require selecting only a handful from a longer list of candidates. Defining a valid experimental space under these layered constraints is a new challenge, which means that the better-known approaches are no longer sufficient.

In this presentation, we introduce a new JMP add-in developed to meet exactly this challenge. The add-in gives researchers an intuitive interface to define complex mixture structures, including hierarchical ingredient categories, upper and lower concentration bounds, and limits on how many sub-ingredients can be active in any given formulation. From these inputs, a candidate set table is constructed to be fed to the JMP Bayesian Optimization platform.

We then bring this to life with a real-world application, where the add-in was used to design experiments for a new formulation, navigate a highly constrained ingredient space, and ultimately identify a winning formula faster and with greater confidence than traditional approaches would allow.

 

 

 

Welcome. Today, I'll be talking about when ingredients have sub-ingredients. This is a new JMP add-in for complex designs, complex formulations, and we'll see together how this new GUI add-in will help formulation folks, scientists, and engineers create experiments in a little bit of an easier way.

Let's get started. In a typical product or chemical formulation design, you typically have a few handful of ingredients, such as in here A, B, C, and you're trying to combine them together, for example, to create a certain formulation. Usually or typically, the type of constraints that you might find yourself having is, for example, that the range or the value of a certain concentration, the concentration of A to be between a certain lower and upper value, B something along some other range, and then same thing with C. Then maybe you have some niche constraint that the ratio of B over A can be something under or has to be under two, for example.

This is typically what people would… First of all, people would typically use the Design of Experiments menu directly. Then, if there is any value range or limits, they will put that instead of putting 0 to 1 for each one of these formulations.

Over here, you see that factor constraint that we showed that A over B or B over A was always smaller than two. You can add that as a linear constraint in this format. If you look at the ternary plot, you will see that the design of experiment that would be suggested for you would have these points, and then you see the constraint over here.

This is really what I would say the typical type of constraints or complexity that people are used to. But then what happens if one of or all of these factors really had multiple sub-ingredients or sub-ingredient candidates? In other words, if I come and tell you, "Well, you know what? I'm trying to create a formula here that is a mix of component A, B, and C, but I have multiple options for A, and multiple options for B and C." You might think, "Well, okay. If I already know the limits or the range for each of these components, I may just add extra factors in my design of experiments where, for example, A is any of these five components, same thing you see here for B and same thing for C."

Let's make this a little bit more complex. What if each of these subcomponents or sub-ingredients had different upper and lower values? How can we show this in a design so that we capture the fact that each of these subcomponents have different range? You see here, this is the example where I'm showing that each one of these sub-ingredients have different levels or ranges.

I tried that in the DOE menu, and then if I add a disallowed combination filter where, for example, I tell it that when the category of A is A1, do not allow the concentration to be anywhere between or under 0.1 and above 0.4. When you click on Make Design, the issue is that you get a constraint error. It's already a mixture design, so there's already constraints on it. Adding that type of disallowed combination will just break the design and would not converge to optimize it.

Let's even make it more complex. What if I tell you now that instead of just choosing one of these subcomponents, I would like to choose a couple, a handful of these subcomponents together? Now, let's stick back to keeping the range the same and then saying that, "You know what? I'm trying to see my formula if I can optimize it when I use 1–3 ingredients of the type A, and then 1–2 ingredients of type B, and then just keep it at one ingredient from the C ingredients."

Now you see two type of constraints, the fact that I can have multiple subcomponents and the fact that each of these components can have its different range. Let's combine these two constraints, and then that would be, I would say, the most complex formulation situation where each one of these subcomponents have its own range, and at the same time, we're trying to get into using 1-3 or 1-2 or just one of these sub-ingredients.

Here, if you want, this is the problem statement. This is the situation where some formulation scientists or engineers might find themselves. The GUI, the add-in user interface that I created really helps in creating a Candidate Set Table for that.

Let's continue here. What to do? Before I talk about the GUI itself, the add-in itself, I'm going to take a step back here and acknowledge the function, the equation behind the scene here, which is a JSL function called Random Linearly Constrained Uniform function. That was developed by Laura Lancaster. If you go into the script index, the JSL script index, you might find it over there with a little example with it that explains that there are sub parameters that you can bring into the function, and what are these parameters.

I actually have an example here from Laura that she presented a while ago or at the beginning of this year, where you can actually put in the matrices where you can specify what are the constraints. In this example, there are 2, 4, 6, 8, 10, 12, 14, 14 total sub-ingredients between the three groups.

For example, in this case, in the first line, it's saying that these components, the 1, 2, 3, 4, 5, the sum of these five groups is equal to 100. These other five or six components, their sum is equal to 200. Here we are taking care of that constraint of these components. The lower and upper matrices, this is also relating to the range, so the upper and lower range of each of these components.

The G and LC and UC, all these are related to how many subcomponents are we going to take. These LC and UC are saying that anything between 1 to 2 components and 1 to 3 components for the first group and the second group. It's a little bit of a complex function, but by all means, you can do things in JSL. My contribution, if you want, was to take this and bring it into a user interface for people to input their information about the constraints, the number of sub-ingredients, and the upper and lower limit of each of these sub-ingredients.

The JSL function itself spits out a data table that looks like this. There isn't really names for the columns, etc, but you have to do just a little bit of a cleanup. This is an example going with Laura's example that she presented. If I go back to this table, the question might be, "Well, okay, great. This seems like it creates some table, but what do you do with it?"

Well, there's two options for you. One, you can take this table to the custom design, Covariate/Candidate Run function, or you can take it to the Bayesian optimization under the batch selection, load Candidate Set Table. They're as you see over here, and obviously, I'm going to show that in a demo in a moment.

But the idea is that because of these constraints that we talked about, the workflow towards creating a new design of experiments or creating a Bayesian optimization experiment is to load that Candidate Set Table so that any experiments that will be recommended will be based off a table that respects the constraints that we have.

Quickly, just to show here, you can see in the first row that there's only two components out of the five components that were chosen, for example, and their sum is always going to be 100. Again, I'll show a little bit more about that in the example that I will demo.

Before I continue, before I show the add-in, I just want to acknowledge also the presentation that Laura and Chris Gotwalt had presented at the beginning of the year. I highly recommend for people to go into this presentation, and this was part of how to take Bayesian optimization to another level or how to use it for this situation of complex formulations with complex constraints.

Chris presented those three situations where you have multi-mixtures, and then you have a situation where you have multiple sub-ingredients, and then Laura presented how you use the script, and then you create the data table, and then you create a cleanup version of the data table.

Let's hop into… Actually, no, before. Let's first bring the function to a graphical user interface. But before I hop into the demo, I'm just going to show here the example that I'm going to follow. We are going to create together the best green smoothie formulation ever.

The situation that we are in is that we have six fruits that we can choose from, and then three vegetables, along with milk and ice, and we are trying to create the best 500 grams of green smoothie.

If you remember at the beginning in the intro, when we spoke about the most complex product formulation situation where I said that you have multiple subcomponents of A, multiple B's, and multiple C's. In this case, this translates to the following: we have six different fruits, each one of them have different range.

You see the bananas and the avocado, for different reasons, they have a different range. Avocado being more expensive than the others, and banana, you really probably don't want to put too much banana in your smoothie, whereas the other ones are fine, they have similar range. We would like to take 2 to 3 of these components, and then 1 to 2 of the vegetables, and then ice and milk have their own limits or value range.

Then for response, I'm just going to focus on the taste rating. We would like to maximize the taste. Let's go into JMP. The add-in is called Candidate Set Generator. What we're going to see here is that there is a main… First of all, there is a number of candidate set runs that you can create.

The total number of rows at the end of that Candidate Set Table can be whatever you want. By default, I've set it to 150, but you can make it 1,000, 10,000, whatever you want. For the main factors, you're going to start by typing in if you'd like the fruits, for example, and then the min and max for each one of these values. I don't remember what they were, but let's just say for now these numbers.

Then have sub-ingredients, let me say you're going to have… we're going to take 1, 2, 3 sub-ingredients. Then you can continue adding more of the main factors, which were the fruit, vegetables, ice, and milk. To make my life easier, I actually created a main factor table. The nice thing in the add-in is that you can save and load the factor. In this case, I'm going to load from the main factors, and then it's going to replace these main factors for me.

Then for the sub-ingredient candidates, I'm going to do the same thing. If we follow the same example, I had the fruits, these six fruits, and then these three vegetables, with each one of them having its own upper and lower value.

For now, there's this column called Include, which 1 means this row will be included, but for whatever reason, let's say you have so many, you have hundreds of sub-ingredients, and you want to just keep them for now, and then you want to play around with whether to include it or not in the creation of the Candidate Set Table, you can just change that to 0, and the final table will just not have that row included.

Same thing, I'm going to load the sub-ingredients, and now I have these sub-ingredients over here. If I click on Generate Candidate Set Table, the table that I'm going to create will just have different columns for ice, milk, and then all the fruits and all of the vegetables with different levels or values, but it would not have any constraint on the summation, on whether the sum of these components is going to be equal to 500 or not.

If you truly want this to be a mixture, and you truly want the sum to be equal to a certain level or a certain value, this is where the add constraint will be helpful or useful. I'm just going to add that all of these four main factors, when you sum them, it's going to be equal to 500 grams.

Then if for some reason you had multiple constraints, such as if you remember at the very beginning when we had a ratio of component A to component B, and then it was less or equal to a certain value, you can certainly add that. Then similarly to here and here, you are able to save and load those constraint tables.

Let me just quickly show how the constraint table would look like. It's just something like this. Okay? But since I just have one constraint, I don't necessarily need to create a table. Then what happens is that when I click on Generate Candidate Set Table, I will get this table over here with 150 rows.

You can see I have ice, milk, and then fruits and vegetables are grouped, each one of them into their own group. If I sum them, combine and sum, you'll notice that the sum is always going to be 500. If I did not have that constraint, then the sum would just be random.

Then I go back to my initial thought or question, I have this candidate set. Great. What do I do with this? Here, if you remember when I said there are two applications, one either in the custom design or the second one in the Bayesian optimization.

Let's just start with the custom design menu here. Then let's say that, like I said, I'm trying to maximize the taste. For the factors, rather than adding the factors over here, I'm going to click on the Candidate Run or Select Covariate Factors. I'm going to take my covariates from here.

Then you'll notice if I click on Continue, I'm able to include or select the number of runs that I would like. Let's say I want to create 10 runs, or it seems 12 is the minimum that I have, if I want to understand the impact of each one of these parameters.

Now, because of the constraints that I have, if I click on Make Design, this is not going to converge. A little trick, if you want, is that I will need to select all these rows. For some reason, I do not know how to select all. Okay, here we go. Just quickly. Here we go.

Instead of having the estimation be necessary, I can change it to if possible to just make sure that the design does converge. Let me switch that back to 10. Then I'm going to click on Make Design. Then JMP is going to try to find me the best 10 runs that would converge to create for me a design experiment with the optimization.

You see over here, now I have a design experiment where I can go and do my first initial 10 experiments. Then you notice here that my constraints were respected, that the ice was between 50 to 150, the milk 150 to 300, that the banana, if it was present, that it was always above, I believe, what was it that we said? Between 50 to 80. You see it over here. Same thing with the other ones, and then same thing with the avocado is always going to be 50 to 80. Then for the vegetables, we're always going to take 1 to 2 sub-ingredients, and then we have the taste as our response.

That's with the usability of the Candidate Set Table for custom design. Now, let's see how you actually use it in the Bayesian optimization. Let's say you started with this first 10 experiments, let's say you got this taste survey, and you got taste of between 1 and 2, between 1, 2, maybe 3 over here. Then you're trying to really optimize this experiment or this formula, this smoothie, really.

We're going to click now on Analyze, Specialized Modeling, Bayesian Optimization. We're going to put the taste in the Y, we're going to take everything else as an X. Then maybe let's make or suggest two runs per batch for added batch, and then I'm going to click on OK.

When I'm going to use in the batch selection, when I'm going to have this recommended two additional experimentations, you see by default, you see the values of the fruits, for example, they're not respecting those constraints that we talked about. I'm getting all six fruits in the same time. Really the constraint that I had was that I'm only allowed to have 1 to 3 components in the same time, and same thing for the vegetables.

Over here in the Batch Selection tab under that red triangle under the Bayesian Optimization Batch Customizer, this is where we are able to click on Load Candidate Set from Data Table. This is where we can feed the Bayesian optimization tool or interface the candidate sets that we would like it to optimize or select from the next experiment.

If I click on Load Candidate Set from Table, and then I'm going to click on Candidate Set, you'll notice right away that the recommended experiments now are coming from that table, and then they do, as a matter of fact, respect the constraints that we talked about. You see here it's only selecting two fruits out of the six, and then it's only taking spinach this time, and then the second one also seems like it was taking the spinach as well.

In the same fashion of Bayesian optimization, you just click on Make Table, and then you will… If you go back to the table over here, you'll see the two added experiments to run with the reason added to it. You go and create those smoothies, you get the survey, you get the taste score back, and then hopefully, either the taste is the same or it's actually increasing, and then you optimize your smoothie this way. This is really the usage of the GUI for the creation of the Candidate Set Table in an easier way.

As a conclusion, really, the Candidate Set Table user interface allowed us to create a list of formulations that respect, 1, having multiple sub-ingredients. If it's actually mixture, then this is what typically people call mixture of mixture design, respecting the fact that different sub-ingredients have different ranges. This is what I would call mixture of mixture design with different range constraint.

When we're talking about choosing one or multiple sub-ingredients at the same time, this is what we refer to as cardinality constraint. Last but not least, this Candidate Set Table is used to be fed to the custom design platform or the Bayesian optimization. That's it. Thank you so much.



Start:
Mon, Jun 1, 2026 09:00 AM EDT
End:
Mon, Jun 1, 2026 10:00 AM EDT
N/A
0 Kudos