Author:Â Robert Bixby, PhD
Date: 3/9/2020
Mathematical optimization technologies such as linear programming (LP) and mixed-integer programming (MIP) are utilized today by thousands of major global corporations across numerous industries to solve their complex, real-world problems and make optimal, data-driven business decisions.
But the transformation of LP and MIP from theorical to practical (and very powerful) problem-solving tools did not happen overnight. Indeed, these mathematical optimization technologies have undergone a slow, steady, and significant evolution since they were first introduced around 70 years ago.
In the first blog in this series, I chronicled the early years in the history of mathematical optimization – from the initial introduction of LP and MIP in the 1940s and 1950s respectively, to their emergence (propelled by advancements in computing capabilities) as commercially viable technologies in a handful of industries in the 1970s. And that’s where we will continue the story of the development of these mathematical optimization technologies in this blog.
Although the 1970s were a time of great promise and potential (as interest in mathematical optimization, particularly in the academic world, blossomed during this period), actual adoption and application of mathematical optimization technologies in the business world was quite limited.
During that period, LP applications were used by a select group of companies in certain industries (most notably oil companies, who were the chief funders of research into computational linear programming at that time) to solve relatively small, mostly planning-oriented problems.
Widespread adoption of LP and MIP in the business world, however, was simply not possible in the 1970s and 1980s due to the complexity of building a mathematical optimization application (which, back then, more often than not literally took years!), the difficulty in maintaining such an application, and – most importantly – the very limited capability to solve the resulting models.
Indeed, at that time, building and maintaining mathematical optimization applications was a time-consuming and labor-intensive endeavor – requiring expertise across an array of areas including data collection, operations research, computer programming, and business analysis.
As a result of these issues, a sense of disillusionment (particularly about using MIP as a practical, problem-solving tool) set in and persisted for many years – and the development of mathematical optimization technologies hit a significant roadblock. Change, however, was on the horizon.
The early 1990s marked a period of phenomenal growth and profound transformation for mathematical optimization technologies.
Fueled by the groundbreaking research of computer scientist Narendra Karmarkar and others (who developed special purpose algorithms to solve several categories of large-scale, real-world problems), LP applications underwent a metamorphosis and became increasingly powerful, practical, and popular – particularly in the airlines industry.
The commercial codes for solving MIP applications – which up until then had been widely viewed as a fascinating modeling “toy” with little applicability in addressing real-world problems – saw dramatic improvements in the 1990s.
During that time, MIP capabilities steadily improved, experiencing two major bumps in performance: 1) In 1994, because of the maturity of simplex algorithms as they are used in MIP and 2) In 1998, through a mining of the theoretical backlog that had been built up over 30 years – which I will discuss in greater detail in the next section of this article.
The tides were turning: LP – the foundation of mathematical optimization as we know it today – was being overtaken by MIP as the predominant problem-solving approach.
Over the course of the 1990s, MIP would come to revolutionize the applicability of mathematical optimization technologies, enhancing their impact and expanding their reach into a broad range of industries.
It was around this time that I entered the mathematical optimization software field (and, thus, this story).
Actually, I began working on mathematical optimization in the early 1980s – first on theoretical, academic-oriented research and then on designing a general-purpose LP code. This code was tested on real-world models by Tom Baker, the founder of Chesapeake Decision Sciences – and it was this connection to real-world models drove the early development and improvement of the code and led to the establishment of CPLEX Optimization.
In 1987, I co-founded CPLEX Optimization, and we released our first product, an LP code, in 1988.
Looking back, I can honestly say that this period – when I got into the mathematical optimization software business – was truly one of the most exciting periods of my professional life.
And it was truly a watershed moment for mathematical optimization technologies: Karmarkar had just published his groundbreaking paper on interior-point algorithms and there was a growing conviction that mathematical optimization algorithms could be used to solve complex, real-world business problems. This conviction – accompanied by the significant improvements in the classical simplex algorithm (which until today remains the primary computational tool in MIP) – injected a huge amount of enthusiasm into the field.
The improvements were absolutely jaw-dropping. Between 1988 and 2004, LP algorithms – which many had previously thought had progressed as far as they could go – got faster by a factor of five million times!
In the mid-1990s, as I continued with my work designing code at CPLEX Optimization, I had a significant revelation. I realized that what academics conducting ongoing research into integer programming needed was an LP code that could be embedded as a “black-box” solver – which would enable programmers to define and change the parameters of their problems and solve those problems in an efficient manner. This realization led to the creation of the callable library design of CPLEX – an object-oriented structure that enabled users to build applications easily around it. This design turned out to be exactly what business applications needed.
The introduction of this callable library approach was a major development, and ultimately became the model for essentially all future codes in this domain.
Another major development occurred in 1998, when Ed Rothberg and Zonghao Gu (who had recently joined the team at CPLEX Optimization) spurred the most significant performance improvement ever in the development of MIP technologies – which came with the release of CPLEX Version 6.5 that year. In that release, Ed and Gu mined the theoretical backlog and implemented a huge number of ideas – which were inspired by the seminal computational and theoretical research that had been done over the preceding 30 years (but wasn’t being used in commercial codes).
CPLEX Version 6.5 – which cleverly combined a wide spectrum of theoretical ideas developed over the past 30 years, numerous new ideas introduced by Ed and Gu, and combined these ideas with a genius for software engineering – led to a speedup exceeding a factor of 10.0 and the emergence of a new generation of general-purpose MIP codes that could be used out-of-the-box to solve a whole host of real-world problems (simply not possible prior to that time).
In one fell swoop, our team at CPLEX had changed the game. We revolutionized the mathematical optimization software industry by introducing an out-of-the-box solver that – without any customization of code – can be used in an essentially unlimited breadth of applications to solve a whole host of real-life business problems.
In 2008, Ed, Gu, and I co-founded Gurobi Optimization with the aim of building the world’s most powerful mathematical optimization solver – and that is exactly what we did.
Since its first release in 2009, the Gurobi Optimizer has been constantly setting new standards in terms of solver performance (by achieving an average 60% yearly improvement in speed) and applicability (by expanding its use to over 1,200 companies in more than 40 different industries). Indeed, the performance of our solver just keeps getting better and its presence in various business areas just keeps getting bigger.
Generally speaking, mathematical optimization has firmly established itself as a powerful problem-solving approach in today’s business world. It is used by an ever-increasing number of companies to tackle their complex, real-world problems and make better decisions.
But this is not the end of the story of mathematical optimization technologies – in fact, it is only the beginning of a new chapter. Indeed, with the recent improvements in data availability and quality and the advent of cutting-edge IoT and AI technologies, the use of mathematical optimization is being expanded to new applications. I will explore this topic in the next blog in this series.
GUROBI NEWSLETTER
Latest news and releases
Choose the evaluation license that fits you best, and start working with our Expert Team for technical guidance and support.
Request free trial hours, so you can see how quickly and easily a model can be solved on the cloud.
Cookie | Duration | Description |
---|---|---|
_biz_flagsA | 1 year | A Cloudflare cookie set to record users’ settings as well as for authentication and analytics. |
_biz_pendingA | 1 year | A Cloudflare cookie set to record users’ settings as well as for authentication and analytics. |
_biz_sid | 30 minutes | This cookie is set by Bizible, to store the user's session id. |
ARRAffinity | session | ARRAffinity cookie is set by Azure app service, and allows the service to choose the right instance established by a user to deliver subsequent requests made by that user. |
ARRAffinitySameSite | session | This cookie is set by Windows Azure cloud, and is used for load balancing to make sure the visitor page requests are routed to the same server in any browsing session. |
BIGipServersj02web-nginx-app_https | session | NGINX cookie |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category . |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | Records the default button state of the corresponding category & the status of CCPA. It works only in coordination with the primary cookie. |
elementor | never | This cookie is used by the website's WordPress theme. It allows the website owner to implement or change the website's content in real-time. |
JSESSIONID | session | New Relic uses this cookie to store a session identifier so that New Relic can monitor session counts for an application. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Cookie | Duration | Description |
---|---|---|
__cf_bm | 30 minutes | This cookie, set by Cloudflare, is used to support Cloudflare Bot Management. |
_biz_nA | 1 year | Bizible sets this cookie to remember users’ settings as well as for authentication and analytics. |
_biz_uid | 1 year | This cookie is set by Bizible, to store user id on the current domain. |
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar sets this cookie to detect a user's first pageview session, which is a True/False flag set by the cookie. |
_mkto_trk | 2 years | This cookie is set by Marketo. This allows a website to track visitor behavior on the sites on which the cookie is installed and to link a visitor to the recipient of an email marketing campaign, to measure campaign effectiveness. Tracking is performed anonymously until a user self-identifies by submitting a form. |
bcookie | 1 year | LinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser ID. |
bscookie | 1 year | LinkedIn sets this cookie to store performed actions on the website. |
doc_langsBB | 1 year | Documentation system cookie |
doc_version | 1 year | Documentation system cookie |
lang | session | LinkedIn sets this cookie to remember a user's language setting. |
lidc | 1 day | LinkedIn sets the lidc cookie to facilitate data center selection. |
UserMatchHistory | 1 month | LinkedIn sets this cookie for LinkedIn Ads ID syncing. |
whova_client_id | 10 years | Event agenda system cookie |
Cookie | Duration | Description |
---|---|---|
_gat_UA-5909815-1 | 1 minute | A variation of the _gat cookie set by Google Analytics and Google Tag Manager to allow website owners to track visitor behaviour and measure site performance. The pattern element in the name contains the unique identity number of the account or website it relates to. |
Cookie | Duration | Description |
---|---|---|
_an_uid | 7 days | 6Sense Cookie |
_BUID | 1 year | This cookie, set by Bizible, is a universal user id to identify the same user across multiple clients’ domains. |
_ga | 2 years | The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors. |
_ga_* | 1 year 1 month 4 days | Google Analytics sets this cookie to store and count page views. |
_gat_UA-* | 1 minute | Google Analytics sets this cookie for user behaviour tracking. |
_gcl_au | 3 months | Provided by Google Tag Manager to experiment advertisement efficiency of websites using their services. |
_gd_session | 4 hours | This cookie is used for collecting information on users visit to the website. It collects data such as total number of visits, average time spent on the website and the pages loaded. |
_gd_visitor | 2 years | This cookie is used for collecting information on the users visit such as number of visits, average time spent on the website and the pages loaded for displaying targeted ads. |
_gid | 1 day | Installed by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously. |
_hjFirstSeen | 30 minutes | Hotjar sets this cookie to identify a new user’s first session. It stores the true/false value, indicating whether it was the first time Hotjar saw this user. |
_hjIncludedInSessionSample_* | 2 minutes | Hotjar cookie that is set to determine if a user is included in the data sampling defined by a site's daily session limit. |
_hjRecordingEnabled | never | Hotjar sets this cookie when a Recording starts and is read when the recording module is initialized, to see if the user is already in a recording in a particular session. |
_hjRecordingLastActivity | never | Hotjar sets this cookie when a user recording starts and when data is sent through the WebSocket. |
_hjSession_* | 30 minutes | Hotjar cookie that is set when a user first lands on a page with the Hotjar script. It is used to persist the Hotjar User ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjSessionUser_* | 1 year | Hotjar cookie that is set when a user first lands on a page with the Hotjar script. It is used to persist the Hotjar User ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjTLDTest | session | To determine the most generic cookie path that has to be used instead of the page hostname, Hotjar sets the _hjTLDTest cookie to store different URL substring alternatives until it fails. |
6suuid | 2 years | 6Sense Cookie |
AnalyticsSyncHistory | 1 month | LinkedIn cookie |
BE_CLA3 | 1 year 1 month 4 days | BrightEdge sets this cookie to enable data aggregation, analysis and report creation to assess marketing effectiveness and provide solutions for SEO, SEM and website performance. |
CONSENT | 2 years | YouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data. |
dj | 10 years | DemandJump cookie |
djaimid.a28e | 2 years | DemandJump cookiean |
djaimses.a28e | 30 minutes | DemandJump cookie |
li_gc | 5 months 27 days | LinkedIn Cookie |
ln_or | 1 day | LinkedIn Cookie |
vuid | 2 years | Vimeo installs this cookie to collect tracking information by setting a unique ID to embed videos to the website. |
Cookie | Duration | Description |
---|---|---|
__adroll | 1 year 1 month | This cookie is set by AdRoll to identify users across visits and devices. It is used by real-time bidding for advertisers to display relevant advertisements. |
__adroll_fpc | 1 year | AdRoll sets this cookie to target users with advertisements based on their browsing behaviour. |
__adroll_shared | 1 year 1 month | Adroll sets this cookie to collect information on users across different websites for relevant advertising. |
__ar_v4 | 1 year | This cookie is set under the domain DoubleClick, to place ads that point to the website in Google search results and to track conversion rates for these ads. |
_fbp | 3 months | This cookie is set by Facebook to display advertisements when either on Facebook or on a digital platform powered by Facebook advertising, after visiting the website. |
_te_ | session | Adroll cookie |
fr | 3 months | Facebook sets this cookie to show relevant advertisements to users by tracking user behaviour across the web, on sites that have Facebook pixel or Facebook social plugin. |
IDE | 1 year 24 days | Google DoubleClick IDE cookies are used to store information about how the user uses the website to present them with relevant ads and according to the user profile. |
li_sugr | 3 months | LinkedIn sets this cookie to collect user behaviour data to optimise the website and make advertisements on the website more relevant. |
test_cookie | 15 minutes | The test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies. |
VISITOR_INFO1_LIVE | 5 months 27 days | A cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface. |
YSC | session | YSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt-remote-device-id | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt.innertube::nextId | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |