Many engineering and scientific problems involve finding the best operating conditions while minimizing the number of costly or time-consuming experiments. This session demonstrates how Bayesian Optimization in JMP Pro intelligently guides experimentation by learning from previous results and recommending the next most informative experimental conditions. Using an intuitive plant growth optimization example, we illustrate how Bayesian Optimization balances exploration and exploitation to efficiently search for optimal conditions without exhaustively testing every possible combination. This practical workflow highlights how JMP Pro helps reduce experimental effort, accelerate discovery, conserve valuable resources, and make confident, data-driven decisions across engineering, manufacturing, agriculture, product development, and scientific research.

Hello everyone, and thank you for joining today. My name is Momena Monwar, and I'm a systems engineer at JMP. Today, we will be talking about intelligent experimentation and how we can accelerate optimization through that approach. In particular, I'll show how we can move beyond simply collecting more data and instead use smarter experimental strategies to learn more efficiently, identify important factors in our design, and reach better operating conditions with fewer experimental runs. I'll also walk you through a practical example so you can see how I use these approaches to a real-world problem to find out my optimum. Let's get started.
Now that we have the broader context on accelerating optimization through intelligent experimentation, the next question comes, what makes these optimizations challenging? In many engineering and scientific problems, we are trying to find the best operating conditions. But every experiment may cost time, material, a lot of money, or also a lot of labor. So we usually cannot afford to test every possible combination of all our factors. What we really want to have that a better smart plan that can reduce these experimental efforts to accelerate discovery and conserve our resources, and still give me that confidence to take data-driven decisions.
The key question comes here, can we reach this desired target without exhaustively testing every combination? Where this intelligent experimentation becomes very powerful, we'll try to answer that question by looking into a project that is my very own. Let me make this a little more personal. This is an example that actually came from a small project I did in my own backyard, growing red amaranth plant. You can compare it with growing leafy vegetables like spinach. I was excited about it. It's a very popular vegetable, leafy vegetables back in my country, where I'm from, and I was excited to grow it.
At first, I was simply trying different conditions, somewhat randomly changing things like soil, water, different kind of soil, water, soaking the seeds for a certain time, and I was giving time to see how long it takes to grow a perfect vegetable in my backyard. But after a while, I started thinking that instead of just trying different combinations and seeing what happens, why not approach it in a more efficient and structured way? Why not just use a smarter experimental design to learn more from just putting randomly seeds over there and growing those batches of plants?
That become the motivation for this example, the goal to identify the conditions in my experiments that give desirable plant growth, which is, I'm wanting, using factors such as different soil types and other water amount and everything, and looking into responses, I was looking into plant's height and weight. It gives a targeted range. I didn't want it to overgrow or have less weight on that. I wanted to analyze all of this information.
For that purpose, now that we have this problem defined, what I'm trying to achieve or look, the next question is what we can control in the experiment. For this backyard example, I focused on basically four factors that I could reasonably vary. The first was soil types because different soils affect nutrients and water retention and root development, so I decided to use three different types. The second one was seed pre-soaking time, which may influence how quickly the seeds germinate. If it's helping pre-soaking or not, I didn't have any clue. I wanted to find out. The third factor I was looking was as the growth duration, so this is important because the longer we allow the plant to grow, the more opportunity it has to get or accumulate the biomass. Although longer is not necessarily always better. Think about like a baby spinach. If it overgrows, it's not having or retain that taste or good quality sometimes.
Finally, we have water amount, which directly affects the photosynthesis, the nutrient transport, and overall plant's development. We could provide the water as well as calculated from the weather report. We definitely added some water. Also, there was weather report that I collected that how much rain happened and how much accumulation of water was there per square feet. These are the factors that I was already changing informally in my backyard. The difference is now that instead of changing them randomly, I want to vary them in a structured way so I can understand which factors are really mattered and how much they mattered, and whether they interact with each other or not.
After I define my factors, now the next thing to have is my response. How I'm going to measure the quality? Is it good? Is it bad? What is that? I want to achieve that optimum operating condition. What this optimum means, that I need to define. I chose two different responses here that are easy to measure, that represent plant's performance in a meaningful way. The first was looking into plant's height, and the second one was the fresh weight. This is the image you can see from a bunch where I had 50 plants together as a bunch that I grew from my backyard.
When I was looking in, I found out that the desirable target range is about 18 to 20 inches of each plant. That gives us a practical definition of what good growth of these plants look like. The second response was the fresh weight. It represents the amount of usable biomass we harvest. Here, I defined the target range for 50 a bunch would be 900 to 1100 grams. You see already the picture of that bunch. This is important in optimization where we define the response and the targets here, because we need to find out that when our responses goals are clear, then the design that we will be making can evaluate the different experimental conditions and help us to find a combination that satisfy both of my responses at the same time.
In a nutshell, what we have here, so this is the complete problem. On the top, we have all the factors. I have those factor settings that what type of soils, what type of pre-soaking duration I want to use for giving or feeding to my model. I have this water amount, duration. Also, I have my responses, which tells that I have to match a target height of between 18 to 20 with 900 to 1100. I have my goal clear. Then I forgot something. I forgot that I actually already have some useful information on the historical data from my backyard experiments that I did previously. These were not Design of Experiments. I had information of seven of them where I have these low points, high points. Here I had some medium points data as well. I collected this information from previous information, weather report, and other things, and I did measure the height and weight of those.
So, even though this data were collected somewhat randomly, they still contain useful information. Instead of throwing out... These are some information. Instead of just throwing away and starting completely from scratch, it would be great if I can use this as a starting point, because these runs are not generated from a formal DOE, that the factor combinations we are seeing may not be perfectly balanced, but at least we have some data.
Now the question comes that, can we take what we already know and learn from it and then intelligently decide what experiments to run next? Many organizations already have a lot of historical process data. They can use this technique. Before they begin any formal optimization study, they can actually get some useful information from their background.
What options of design of experiments we have? First, when I'm thinking about designing experiment, if I'm too bookish thinking, I would think about classical DOEs. Then in JMP, regular JMP, we have custom design. In JMP Pro, we have a new feature that is Bayesian optimization. I thought about exploring these three options. Let me start with the classical design. When I started putting my factor settings, like my values in classical design, it gave me an experimental design having 24 runs. Look at that, 24 runs, but in this one, I had to start from scratch. I could not use my historic data. But also these 24 runs, if I see, does not cover any curvature. It only tests these lows and highs. I'm not sure because there's no curvature tested in this design. Let's see what design space covers. When we put in scatterplot matrix, I see it covers this area. But in this whole design space, I can see that there are a lot of white space. My optimum could lie in here, and I would just miss this using this classical design approach.
What else? Now let's look into custom design. I can look into custom design because I know it might be a better approach. I put this and fit this information in custom design. What I see a little better, I see this curvature test, and I see the midpoints, high, low, and medium. It also gave me these 24 runs. I need to run 24 experiments to collect more and more information on these. Let's see how that looks in the design space. I see way less white space. I'm covering more and more compared to the previous one with this design.
When I'm thinking about these two approaches, they did show promise to do my experiment or what I want. But one thing to remember, I am not looking to explore the whole design space. I want to get to that best point as soon as possible. You think, I don't have whole season. I need to grow it as fast as possible. In both cases, we cannot apply the historic data, but I already have some data, and I want to make a good use of it. I had to start from scratch.
But when I am thinking, okay, now let's explore the Bayesian optimization in JMP Pro because it tells that it gives sequential and adaptive learning. It learns from the results that we already have, and then it recommends the next experiment based on what it has already learned. All the three approaches can support optimization. But for my situation, where I already had some historical data and want to learn efficiently from one experiment to the next, then Bayesian optimization could be a game changer.
Let me see. Before I start doing any experiment, I ask myself what information I already have. This is the information I had. I had three type of soils, I had this value settings, and I have the results from those as well. I was thinking, okay, what I want, I want to match a target. I have defined those responses already. The question comes, can I use these historical observations to guide the next experiment towards those targets?
Before I start experimenting, I have to consider about some practical constraints I have. This is a picture of my backyard, and it's some of the beds we'll put a few more later on. But at that point, I was thinking that I have limited growing space, so I cannot test many conditions at the same time. I also have limited parallel capacity, restricting only two or three experimental conditions per batch. On top of that, plant growth is seasonal, and each run can take several weeks. Every additional experiment has a real, real cost, both in time and space for me. Thinking about Bayesian optimization, it uses this historic data and previous experiments to learn and recommend a future test for us to run in hopes of achieving our goal. Basically, if I just put DOE versus Bayesian optimization here, it's just a visual. DOE explores the whole space. If I want to get to this peak of this mountain, what is my goal is I want to get there as soon as possible with as less number of experiments possible. I don't want to have control over my whole design space. That is why I picked Bayesian optimization approach.
First thing, we set up the historic data. Here, if you see, we have this information, seven points where we start. If I just have defined this... We have to define factor codings, what is the high/low values for my factor settings here. Also in these responses, I need to define the response limit where I'm targeting, so between 18 and 20. I need to include this step as the initial setup before I start doing my Bayesian optimization. Once done, then we can go to this Analyze menu, Specialized Modeling, Bayesian Optimization. Here it will launch the platform, this platform over here.
The thing on here, we can just include our responses in the Y and the factors in the X, and we can hit okay. But if you look in this region, there's option that number of batch runs to auto-select. Because of my practical constraints that I have, I don't want JMP to recommend a large number of experiments at once, but I set the batch size to two, which means JMP will recommend only two new experimental conditions each iteration. This fits the way that I can actually run in my garden experiment. I run those two conditions, collect the data, then add them back to the data table, and then JMP learns from that new information that I added and recommends the next batch. I can run in two at a time because of the season and other things, considering all the constraints I have. This process is sequential and adaptive.
Once we had this and hit okay, it's going to take me to this Bayesian optimization platform. Under this batch selection type, I can see what JMP has suggested me as for my next run. You see here it has given me the soil types, two of them at a time to test, and some seed-soaking conditions, duration and water amount, along with there's something in the reason added. What is this? How Bayesian optimization is suggesting this run? It is using a Gaussian prediction process to decide where to run the next experiment. There's an acquisition function in this Bayesian optimization that rule which decides where should I run the next experiment. Based on that complex equations and calculations, it suggests these runs. If you see that in here, it has reason added as MaxPro space filling. In JMP Pro Bayesian optimization, this MaxPro space filling option is essentially an exploration strategy. Instead of using the fitted response model to chase a predicted optimum, it deliberately proposes experimental conditions that are far from the points you have already tested. From that historic data, if you see there is unexplored, it suggested settings in this MaxPro space filling design.
Then we can collect information. We can make table, and it's going to make this two added things in the table. If you see, we had fractional numbers in the suggested ones, but I wanted to keep it like full numbers, so I have easier experimentation analysis in my end, on my understanding. I could manually change it. When I will be adding more data to it, it's going to propose the next runs or next set of runs from the value I give in here. Practically, sometimes I could not get to 57 days. It was 3 days over, to 60 days. I had to include that or have that flexibility in my design that I could not cut. I was probably out for a tour, so I could not cut it within that specific timeline, but it was 3 days late or something. This happened. This is practical real conditions or real-time, real-life situations that we have in our lives. That happened to me as well.
Also, we don't need to again add more going back to the Analyze Bayesian Optimization platform. It generates a script, if you see on your left here, and you can click this script to run more, more, and more batches. Once you feed information in here, then you click this one, and it's going to show you or propose the next run. What it shows in the Bayesian optimization, we can get to the model summary, and this is really informative. I had this historic data up in here. Then I added these two runs and I added the information, and this shows me where the desirability lies. I have not achieved, it's still in the low numbers. I haven't achieved my desirability one yet. When I will keep adding or JMP will keep adding experiments based on my set of information, I would get to the 100% desirability at some point. It's also showing that at this point, my model fit what I see here, actual by predicted, it's very low, like 33% and 40% for both of these responses up here. Still not there, but it didn't work with these two experiments, but I need to keep doing that until I reach to the optimum point.
Now I keep running it from this experiment eight. The first thing it did, like MaxPro space filling. But when I added more and more, it started the next two runs, max expected improvement and max desirability standard deviation. What these things are. If we're looking into space filling design, which was my first two, it tells where have I physically not explored yet, and based on that, it gives suggestions. But once it achieved that area, and we certainly get to the specific auto mode for finding out the optimal points, then next it suggested this max expected improvement and max desirability standard deviation.
What these things are? These are the sections where my model is refining itself. We are seeing if there are candidate rows that suggest it be the best training row from the data table or not. Max expected improvement, which next experiment has the greatest expected chance of improving on my current best run. When it gets to desirability standard deviation, it finds out at which factor settings I am most uncertain about the overall desirability, where I should investigate because my map is uncertain. These information are going back and forth in refining model, and it has suggested me this two to six batch of both doing this refining model.
Finally, when I get to my seventh batch, it suggested me replicating the best run. Replicating the best run goes under confirm and challenge, where it shows me that I already found that optimum from your model, and it is asking me that this premium organic garden mix having 1, 40, in these settings, I can replicate the best run if it's replicable for the best run, to try that one out. Can you match the target? It's just confirm what my model has so far learned.
I can tell that within this 14 suggested run, I could get to the optimum. I have added just a 3D plot here where I previously had some historical data point, then we had two space filling designs. Finally, it keeps adding. How it was adding it using this structure where it was doing it. It began with training data. It fitted a model to the response and then asked, have we met our target yet? If yes, we stop. If not, JMP determines the next most informative run or small batch of run. Then we perform those experiments, collect the new response, feed them back to the model, and repeat the cycle. The important idea is here that we are not designing all the experiments upfront, but we are learning as we go, and each new run is chosen based on the previous every data that we have fed to the model. As you see here, we have these data points. This is my whole design space, and I can see where the points are lying.
These are some results that I had from those batches. Loam soil did not perform really well within these conditions, and I had smaller ones. Those are undergrown plants that I had from my backyard. Then I had some overgrown one which were higher on days, had the best quality soils, but those were overgrown. If you see, there are some fadings, and also it started to grow, the flowering started to happen. Those are not a good quality for eating those leafy vegetables at this condition. But we did get some great ones where those were perfect batch grown based on weight and height ratios that we have. In 12th run, we saw this one, which went into this max expected improvement. It was trying refining the model more and more. After all of these runs, in this one, it asked to replicate very similar, and it optimized to replicate the best run at this point, and we had the good results with this model at this point.
If I focus a little on this Bayesian optimization, the first one results, we saw up until this point. But now, as I added more and more information, I see here when I went to this 19th number of my row, it achieved that desirability. If I see how well this was fitted, I see this actual versus predicted plot, and these are all my observation points, I see that they are very close to the fit line over here. It also confirms here that my R², it was like 33 and 40%, right now it went up to 87 and 90%, so now I can say that it's a good fit.
The most important thing here that there are plantations that we found where I can find the optimum, and from this provider we can also see that the most important thing visual here is duration, and it has a strong curve effect. So both height and weight increases as the duration goes from roughly 30 towards 50 to 55 days, then it starts decreasing. In comparison to soaking the seed, water amount, and the soil types, they also have some effects on the output, but still the duration is the most dominant one. Also, this gray confidence intervals represent where the prediction uncertainty lies. The wider the bands are, it means they're less certain about the prediction, but here it's not that wide, so it's a good fit.
In this section, once we found these, when we run the model again, then it will give me replicate the best run. At this point, I can tell that we have found that point, and we have arrived the peak of that mountain that we were looking in. It goes in this range, goes into confirm and challenge mode, and it starts to generate points to replicate the best run. This is where we know that we need to stop.
Did we achieve the goal? We had a few questions previously, and I want to know if we can answer those. Yes, we achieved the goals. Using Bayesian optimization, we reached this desired plant growth region within only 14 experimental runs. It's quite smaller than what approaches we were looking in. The best condition was found: I should use premium organic garden mix, I should soak the seeds for 1 hour, then use 40 days to grow duration, and use a controlled amount of 5.696 gallon of water per square feet.
This demonstrates that the main advantage of Bayesian optimization for this study, that we learned from each experiment, we concentrated resources on a promising condition, and reach the goal with relatively fewer runs. If I look back, how fast? Yeah, 14 runs. Can we reach the desired? We reached. Can you use the historical observation to guide? Yes, we did. It helped a lot. It replicated the best run from there.
Before I end, I would like to say sincere thanks to Dr. Mohammad Hafizur Rahman. He has supported me with this work because he was doing all the hands-on and uplifting on the garden bed work. All the experimental things, it was him doing. He's my husband. I would give a special thanks to Bradley. He's a JMP colleague and a great person. He knows all and everything about Bayesian optimizations, so he really helped me understand better on this. I would like to thank all my JMP colleagues. It's a pleasure to work here with all of them, and I expect to collaborate throughout this work. Thank you so much for listening to my presentation, and thank you.
Presenter
Skill level
- Beginner
- Intermediate
- Advanced