保留正文与补采附件。源页面当前未重新核验;具体限制见交付清单。

Revisit consent button We value your privacy We use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking "Accept All", you consent to our use of cookies. Customise Reject All Accept All Customise Consent Preferences We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below. The cookies that are categorised as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more NecessaryAlways Active Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Functional Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Analytics Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Performance Performance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Advertisement Advertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.

Uncategorised Other uncategorised cookies are those that are being analysed and have not been classified into a category as yet. No cookies to display. Reject All Save My Preferences Accept All Toggle SearchToggle Mobile Navigation Publish AI, ML & data-science insights to a global community of data professionals. Sign inSubmit an Article LatestEditor's PicksNewsletterShipAI


Write For TDS LinkedInXToggle Search Data Science

Optimizing complex simulations? Use Scipy interpolation

Instead of using fancy optimization algorithms, in many cases, we can use simple interpolation (Scipy) for fast optimization Tirthajyoti Sarkar October 27, 20216 min read Image source: Created by the author Image source: Created by the author

Background

Interpolating experimental or simulation data in complex scientific or business studies is a fairly common practice. In my previous article, I showed how to use simple Scipy code to achieve that for one or more dimensions.

How to Interpolate Data with Scipy One of the key benefits of this approach is that we get the exact function from the Scipy routine and can use it for many purposes - one of them being fast optimization. This is particularly useful for the cases where the individual experiment is costly. In most cases, the cost aspect goes far beyond mere computation. Think of optimization problems related to expensive product design iteration, or healthcare (drug testing). As the designer or researcher, you won't get an unlimited budget to run hundreds of experiments as each experiment can cost thousands of dollars. Instead, you can, Learn this step by step with the interactive AI and Data Scientist and Computer Science roadmaps.

No fancy optimization algorithm. No cost of expensive simulation. Just a little bit of Design-of-experiment knowledge and interpolation routines. This method does not guarantee you the best outcome in all situations. But it works in most practical scenarios. Let's see why.

As the designer or researcher, you won't get an unlimited budget to run hundreds of experiments as each experiment can cost thousands of dollars

Why does it work (in most scenarios)?

Interpolation primarily works on the assumption of smoothness or continuity. A function needs to be smooth and not too jumpy to be interpolated with reasonable accuracy. The idea is illustrated in the figure below with the assumption that we cannot collect a ton of data points (experiments). Image source: Created by the author Image source: Created by the author And, it turns out that most real-life, continuous-data problems are not that jumpy either i.e. they are smooth enough to be handled by interpolation techniques. Therefore, we can use a combination of physical simulation and interpolation to do fast optimization in many of those cases. Image source: Created by the author Image source: Created by the author So, here it is, Image source: Created by the author Image source: Created by the author

This method does not guarantee you the best outcome in all situations. But it works in most practical scenarios.

A simple demo

The boilerplate code is here in my Github repo. Let me show only some pertinent code snippets in this article.

Simulation and experiment functions

Let's suppose we have a complex simulation task that takes some time (0.1 seconds here) to finish. The actual output is just a simple nonlinear function. Here is the code, text

def complex_simulation(x):
    """
    A nonlinear simulation function with some time delay
    """
    time.sleep(0.1)
    y = np.cos(-x**2/9.0)+np.sin(x/6)
    return y

We also define a function run_experiment to run this simulation a fixed number of times. It returns both the experiment domain and results from a given bound (low/high endpoints). text

def run_experiments(experiment_bounds,n=10):
    results = []
    low,high = experiment_bounds
    domain = np.linspace(low, high, num=n, endpoint=True)
    for i in domain:
        y = complex_simulation(i)
        results.append(y)
    return (domain,results)

Let's say, we run it 11 times and get this data, Image source: Created by the author Image source: Created by the author

Interpolation and optimization

A simple cubic interpolation (using Scipy), will give us this nicely fitted result and also a new function that can generate any intermediate result we want. Image source: Created by the author Image source: Created by the author Now, we can write a simple search function with exhaustive simulated results to find the point at which the maximum occurs. text

def optimum_simulation(experiment_bounds,n=11):
    """
    Using exhaustive simulations
    """
    domain,results=np.array(run_experiments(experiment_bounds,n=n))
    imax = np.argmax(results)
    return (domain[imax])

Basically, it runs the experiment a certain number of times (using the previously defined run_experiment function) and search for the argmax of the result array. It's algorithmically simple, but it's not fast because of the nature of the simulation. When we run it for n = 11, it takes ~1.1 seconds, because of the 0.1 seconds time delay for each simulation. It yields the result for the optimum x as, x =8.0. Alternatively, we can define another function that uses the interpolated function instead of the actual simulation function. It, of course, utilizes the init_results obtained from a single experimental run of limited size. text

def optimum_interpolation(domain,init_results,n=101):
    """
    Using interpolation
    """
    low,high = domain.min(),domain.max()
    ip_interpolated = np.linspace(low, high, num=n, endpoint=True)
    f3 = interp1d(domain, init_results, kind='cubic')
    results_interpolated=np.array(f3(ip_interpolated))
    imax = np.argmax(results_interpolated)
    return (ip_interpolated[imax])

When we run it with n = 101, it finishes in ~ 900 microseconds and yields the result of x =7.54. If you look back at the actual function, you will realize that x =7.54 is a much better approximation of the optimum value than x =8.0. This means that the interpolation approach yielded not only a faster but also more accurate result. This may not be true for all cases, but the speed advantage often offsets a small sacrifice in the accuracy.

Design of experiment matters

One must, however, pay attention to the design-of-experiment aspect. Generally, a uniformly sampled experiment space is the most suitable starting point. For example, even for our simple demo, if we did the experiments with uniformly random x values (not linearly spaced), we could have landed with a sub-optimal interpolation function. Image source: Created by the author Image source: Created by the author For more information on design-of-experiment and how you can use a Python package to generate robust experimental plans, see my article here.

Design your engineering experiment plan with a simple Python command

Highly useful in higher dimensions

The Scipy interpolation routines work in two-dimension cases just as easily as they do in a single dimension. Optimization using exhaustive simulations is that much more complex and time-consuming in multiple dimensions because of the curse of dimensionality. An interpolation approach can come in handy in these scenarios. Here is a sample result where we make a smooth interpolated 2D surface out of sparse data using Scipy interpolation. Basically, from 400 actual data points, we created a 4900-data matrix that can point us toward the optimum point with higher accuracy and speed. Image source: Author created from another article by the same author Image source : Author created (from another article by the same author)

Summary

In this article, we showed, how using simple interpolation routines and carefully chosen, well-spaced experimental points, we can create interpolation functions that can yield fast optimization. This approach is particularly suitable for complex, time-consuming scientific or technical simulations that are more or less smooth in their response. Note that, although we showed the demo using a simulated function in Python, the experimental data can come from any source (e.g, a database, a MATLAB connector, or a streaming API) and the only Python portion is the Scipy-based interpolation and the subsequent search routine. Application domains such as semiconductor design, chemical process optimization, production planning, etc., can benefit from this approach.


Loved the article? Become a Medium member to continue learning without limits . I'll receive a portion of your membership fee if you use the following link,__with no extra cost to you . https://medium.com/@tirthajyoti/membership

Register Now to Continue Reading

Unlock Towards Data Science with a Free Account

All articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more. Register for freeSign in to your account


Written By

Tirthajyoti Sarkar

See all from Tirthajyoti Sarkar Data ScienceProgrammingPythonScienceTechnology Share This Article

Towards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program. Write for TDS

Related Articles

Underrated Combined Functionalities of Tableau - Point, LineString & Polygon Mapping

Data Science Geospatial Analytics in Tableau - Working with no need for geocoding/basemap services + Rendering mixed geometry types in a single setting Charmaine Chui October 21, 20206 min read

5 Facts they don't tell you about random forest feature importances

Artificial Intelligence 5 Key facts to know before interpreting tree-based feature importances Ali S March 17, 20224 min read

Calibrating Marketing Mix Models In Python

Machine Learning Part 2 of a hands-on guide to help you master MMM in pymc Ryan OSullivan November 11, 202411 min read

The Curse of Dimensionality; More is not always better!

Artificial Intelligence Philosophical takeaways from concepts in Artificial Intelligence & Machine Learning Sreekiran A R May 9, 20220 min read

The 3 Must-Read Data Science Books for Absolute Beginners

Artificial Intelligence "I'm overwhelmed with all the resources available; what should I do?" Arunn Thevapalan June 25, 20215 min read

Build a Shipment Tracking Tool using a Telegram Bot

Data Science Design a Telegram Bot with Python that interacts with truck drivers, tracks your shipments and provides real-time visibility. Samir Saci March 9, 20217 min read

Rockin' Rolling Regression in Python via PyMC

Learn how to deal with varying parameters Robert Kübler December 3, 202111 min read

Matplotlib Styles for Scientific Plotting

Artificial Intelligence Customizing Matplotlib for your scientific data visualization Rizky Maulana Nurhidayat October 25, 202010 min read

Who's your Number 1 Supporter on Strava?

Data Visualization Explore the Strava API and find out with Python Guillaume Weingertner October 27, 20223 min read

Your home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals. Subscribe to Our NewsletterWrite For TDS•About•Advertise•Privacy Policy•Terms of Use © Insight Media Group, LLC 2026•The New Stack•roadmap.sh•Creator Network