More Related Content
Similar to Maximal: MPL Software Demo - INFORMS Phoenix Oct 2012 (20)
More from Bjarni Kristjánsson (8)
Maximal: MPL Software Demo - INFORMS Phoenix Oct 2012
- 1. INFORMS Phoenix – October 2012
Deploying Optimization Models
on Servers and Mobile Platforms
Presented by
Bjarni Kristjansson
Maximal Software, Inc.
Copyright © 2012 Maximal Software, Inc. All rights reserved
1
- 2. Presentation Overview
• Global IT Trends affecting O.R.
• MPL Free Development/Academic Program
• Optimization Component Libraries
• New version of MPL OptiMax 4.2n
• MPL OptiMax code examples (Python / CSharp)
• Exception handling in MPL OptiMax
• Server-based and Cloud-based Optimization
• Web API’s and Web Services for Optimization
Copyright © 2012 Maximal Software, Inc. All rights reserved
2
- 3. Well-Known Killer Applications
What are the two main differences between the applications on the left
column versus the right?
• VisiCalc • Firefox
• Lotus 1-2-3 • Napster
• Word Perfect • Google
• Harvard Graphics • YouTube
• DBase • Skype
• Turbo-Pascal • Facebook
• PageMaker • Twitter
We are Now in the Middle of the Web 2.0 Revolution!
Copyright © 2012 Maximal Software, Inc. All rights reserved
3
- 4. Global Trends in IT
Globality
• 2.3 Billion Internet users in 2011 (+13% Y/Y)
• 670M 3G Subscribers (+37% Y/Y, 14% penetration)
• Facebook 1 Billion Users (+51% Y/Y)
• Tenecent [China] 637M Visitors (+31% Y/Y)
Mobile
• Mobile Internet (Apple: 120M users, 330K Apps)
• Android 59%, iOS 23%, Symbian 7%, RIM 6% (IDC Report)
• Mixi Mobile [Japan]: 84% page views vs. 16% Internet
Copyright © 2012 Maximal Software, Inc. All rights reserved
4
- 5. Current Major Trends in Online IT
1. Mobile Devices are taking over personal computers
2. Social Media is replacing traditional news distribution
3. Social Networking is changing how people work together
4. Online Collaboration tools are replacing standalone software
5. Cloud computing is replacing traditional file-based documents
6. Online Chatting are replacing emails as effective communication tool
7. Text Messaging is replacing phone calls
8. Online Video services are replacing television viewing
9. Online Publishing: Books and published materials are going online
10. Virtual Education: Education and seminars are going virtual
11. Web sites are now expected to be personalized and engaging
12. Software Development: Servers, Mobile, Remote, Web API, Mashups
O.R. needs to adapt to this new changed world and
should effectively leverage these new IT technologies
Copyright © 2012 Maximal Software, Inc. All rights reserved
5
- 6. Free Development Copies of MPL
Maximal is now offering several new special free and
subscription programs for MPL:
• Free Development Copies of MPL
• Free MPL with Solver Purchase
• Free MPL for Conference Participants
• Free MPL Software for Academics
• Pay Maintenance Only
• Subscription-based Pricing
• Free Open-source Solvers
• Affordable Runtime / Floating Licenses
• Free Model Conversion to MPL
• To apply, please go to and fill out the application form:
www.maximalsoftware.com/FreeDev
Copyright © 2012 Maximal Software, Inc. All rights reserved
6
- 7. Academic Program from Maximal
Academic Program Highlights
• Free full-size MPL version for Academic Users
• Fully functional time-limited versions of MPL
• Distributed with the full-size open source CoinMP (CBC/CLP) solver
• Can be used with all other free academic solvers
supported by MPL (CPLEX, GUROBI, XPRESS)
• Mainly intended for classroom and research purposes:
Educational Research
Classroom Teaching
Student Projects
• Includes new Stochastic Programming and Nonlinear extensions
• To apply, please go to and fill out the application form:
www.maximalsoftware.com/Academic
Copyright © 2012 Maximal Software, Inc. All rights reserved
7
- 8. MPL OptiMax Applications
Phase I - Development
• Model Development Environment
• Formulating the Model
• Connecting to External Data
• Solver Testing and Tuning
Phase II - Deployment
• End-User Applications
• Run-times / Component Libraries
• Embedding Optimization into Application
• Packaging/Distribution
Copyright © 2012 Maximal Software, Inc. All rights reserved
8
- 9. Programming vs. Optimization Modeling
Application Programming
• Programming Languages (Procedural)
• Application/User-Interface
• Database Programming
• Most programmers tend to know rather little about
optimization and formulating models
Optimization Modeling
• Modeling Languages (Declarative)
• Optimization Packages
• Most model builders tend to know rather little about
application/GUI and database programming
Copyright © 2012 Maximal Software, Inc. All rights reserved
9
- 10. Optimization Component Library
Program
Program
OptiMax
OptiMax DB
DB
Application
Optimization
ModLang
ModLang
Solver
Solver
Copyright © 2012 Maximal Software, Inc. All rights reserved
10
- 11. OptiMax Component Library
Seamless Integration of Technologies
• Modeling Language
• Solver/Optimizers
• Database/Data Sources
• Programming Languages
• Visual Basic/VBA
• C/C++
• CSharp/VB.Net
• Python
• Java
• Delphi
• Web scripting
Copyright © 2012 Maximal Software, Inc. All rights reserved
11
- 12. OptiMax Component Library
Object Model Hierarchy
OptiMax
Solvers (Solver)
SolverOptions (SolverOption)
MplOptions (MplOption)
StatusWindow
Models (Model)
Matrix
Variables (Variable)
Constraints (Constraint)
Solution
Variables (Variable)
Constraints (Constraint)
Symbols (Symbol)
Copyright © 2012 Maximal Software, Inc. All rights reserved
12
- 13. OptiMax Component Library
Object Model - Symbols
OptiMax
Models (Model)
Symbols (Symbol)
IndexSets (IndexSet)
DataConstants (DataConstant)
DataVectors (DataVector)
Subscripts (Subscript)
Macros (Macro)
VariableVectors (VariableVector)
Subscripts (Subscript)
ConstraintVectors (ConstraintVector)
Subscripts (Subscript)
PlainVariables (Variable)
PlainConstraints (Constraint)
Copyright © 2012 Maximal Software, Inc. All rights reserved
13
- 14. OptiMax Component Library
Application Building Features
• General Model Handling
• Model Parsing
• Model Querying
• Modifying Models / Solving Models
• Write Standard Output Files
• Database Import/Export
• Multiple Models in Memory
• Multiple Model Runs / Iterations over models
• Use Solution Values as Input
• Callbacks/User Exits
• Access to MPL Internal Indexing Data Structures
Copyright © 2012 Maximal Software, Inc. All rights reserved
14
- 15. Applications with MPL OptiMax
• Model written in MPL
• Data transferred to/from MPL through
• Excel Ranges
• Database Connection
• Text files
• End-User Application Building
• User-Interface done in VB/CSharp/C/C++/Java/Phyton
• Process Input from User
• Control Solver Runs
• Process Output from Model
• Display graphs
• Model solved with any supported solver
No limits on size, speed, or robustness
Copyright © 2012 Maximal Software, Inc. All rights reserved
15
- 16. New release of MPL OptiMax
New MPL Release 4.2n:
• Multiple new objects, methods, and properties for OptiMax
• Full support for both 32-bit and 64-bit platforms
MPL OptiMax for .Net (CSharp / VB.Net)
MPL OptiMax for Python (PYD files)
MPL Connection for Matlab (MEX files)
• Seamless integration with native data structures - Add()
• Full exception handling with detailed error messages
• ToString() / str() implementation for all classes
• Lot of new MPL and OptiMax code samples
• C-API interface with Mpllib42.dll with over 600 functions
• MPL OptiMax server version with full multi-threaded support
Copyright © 2012 Maximal Software, Inc. All rights reserved
16
- 17. MPL OptiMax 4.2n for .Net
• Supports both CSharp and Visual Basic (VS 2008/2010 -
32/64 bit)
• Multiple new objects, methods and properties
• Seamless integration with native .Net data structures
• Array
• ArrayList
• Generic List
• ICollection
• IEnumerable
• Iterators for all collection classes to support foreach loops
• ToString() implementation for all classes
Copyright © 2012 Maximal Software, Inc. All rights reserved
17
- 18. MPL OptiMax 4.2n for Python
• Supports Python 2.6, 2.7, 3.1, and 3.2 in both 32-bit and 64-bit
mode
• Distributed as compiled PYD files for increased speed
• Multiple new objects, methods and properties
• Seamless integration with native python data structures
• Lists, List of Lists
• Tuples, Tuples of Tuples
• Iterators for all collection classes to support for loops
• Implementation of magic methods for all classes
__init__(), __len__(), __iter__(), __getitem__(),
__str__()
• Dynamic object attributes for model identifiers
Copyright © 2012 Maximal Software, Inc. All rights reserved
18
- 19. MPL OptiMax 4.2n for Matlab
• Supports MATLAB in both 32-bit and 64-bit mode
• Distributed as compiled MEX files
• Utilizes the new C-API Mpllib42.dll library
• Based on the standard interface of MATLAB Optimization
Toolbox
• mpl_initlibrary()
• mpl_linprog()
• mpl_bintprog()
• mpl_mintprog()
• mpl_freelibrary()
• MPL can be kept in memory through the hmpl library handle
• Solver can be specified through the solverName argument
• Solver options can be set through the option list argument
Copyright © 2012 Maximal Software, Inc. All rights reserved
19
- 20. Simple MPL OptiMax Example in Python
from mplpy import *
def RunModel(modelName):
modelFile = mpl.HomeDir + modelName + ".mpl"
print("MPL file: " + modelFile)
mod.ReadModel(modelFile)
print("Variables = " + str(mod.Matrix.Variables.Count))
print("Constraints = " + str(mod.Matrix.Constraints.Count))
print("")
print("Solving " + modelName + " with " + mpl.Solver.Name + " solver:")
mod.Solve(mpl.coinmp)
print("")
print(mod.Solution.ResultString)
print("ObjectValue = " + str(mod.Solution.ObjectValue))
for var in mod.Solution.Variables:
print(var.Name + " = " + str(var.Activity))
Copyright © 2012 Maximal Software, Inc. All rights reserved
20
- 21. Planning Example in CSharp
OptiMax mpl = new OptiMax();
mpl.UseExceptions = false;
Solver solver = mpl.Solvers.Add("CPLEX");
Model model = mpl.Models.Add("Planning");
string modelFile = mpl.HomeDirectory + modelName + ".mpl";
Console.WriteLine("Reading MPL file: " + modelFile);
ResultType result = model.ReadModel(modelFile);
if (result != ResultType.Success)
{
Console.WriteLine(model.Error.ToString());
}
Console.WriteLine("Solving " + modelName + " with " + solver.Name + " solver");
result = model.Solve(solver);
foreach (Variable var in model.Solution.Nonzeros)
{
Console.WriteLine(var.Name + " " + var.Activity.ToString());
}
Console.WriteLine(model.Solution.ResultString +
" ObjectValue = " + model.Solution.ObjectValue);
Console.WriteLine("Nonzeros = " + model.Solution.Nonzeros.Count.ToString());
Copyright © 2012 Maximal Software, Inc. All rights reserved
21
- 22. Portfolio Example - Dynamic Attributes
from mplpy import mpl
from numpy import arange, float32
from matplotlib import pyplot as plot
modelFilename = mpl.HomeDir + "Portfolio.mpl"
result = mpl.model.SolveModel(modelFilename, mpl.cplex)
investVect = mpl.model.Invest
investVect.ZeroTol = 0.001
count = investVect.Nonzeros.Count
investAmount = arange(count, dtype=float32)
stockNames = range(count)
for i, var in enumerate(investVect.Nonzeros):
investAmount[i] = var.Activity
stockNames[i] = investVect.stock.ValueStr
print((stockNames[i] + ":").ljust(8) +
("%1.1f%%" % (investAmount[i] * 100.0)).rjust(6))
Copyright © 2012 Maximal Software, Inc. All rights reserved
22
- 23. EFrontier Example - Changing RHS
iterCount = 100
deltaPercent = 0.02
CPLEX_OPTIMAL = 1
targetReturnData = model.TargetReturn
varianceMacro = model.Variance
meetTargetCon = model.MeetTarget
TargetArray = arange(iterCount, dtype=float32)
VarianceArray = arange(iterCount, dtype=float32)
for i in range(iterCount):
target = targetReturnData.Value * (1 + i * deltaPercent)
meetTargetCon.RHSValue = target
model.Solve(mpl.cplex)
print(str(i) + ") " + str(target) + ", " + str(varianceMacro.Value))
if model.Solution.ResultCode == CPLEX_OPTIMAL:
TargetArray[i] = target
VarianceArray[i] = varianceMacro.Value
else:
solCount = i
print(str(solCount + 1) + ") " +
model.Solution.ResultString + " (" +
str(model.Solution.ResultCode) + ")")
break
Copyright © 2012 Maximal Software, Inc. All rights reserved
23
- 24. Add Statements - IndexSet / DataVectors
Adding IndexSet:
cutNames = ['w1', 'w2', 'w3', 'w4', 'w5', 'w6', 'w7', 'w8']
model.IndexSets.AddNameSet("cuts", cutNames)
Adding DataVectors:
cutDemand = [500, 400, 300, 450, 350, 200, 800, 200]
model.DataVectors.AddDense("CutDemand[cuts]", cutDemand)
cutsInPattern = ['p1', 'w1', 1,
'p1', 'w8', 1,
'p2', 'w2', 1,
'p2', 'w7', 1,
. . .
'p28', 'w8', 5,
'p29', 'w8', 7]
model.DataVectors.Add("CutsInPattern[patterns, cuts]", cutsInPattern)
Copyright © 2012 Maximal Software, Inc. All rights reserved
24
- 25. CutStock Example – Add() Statements
def LoadModel(self, model, cutNames, patternNames, priceSheet,
sheetsAvail, cutDemand, cutsInPattern):
try:
model.IndexSets.AddNameSet("cuts", cutNames)
model.IndexSets.AddNameSet("patterns", patternNames)
model.DataConstants.Add("PriceSheet", priceSheet)
model.DataConstants.Add("SheetsAvail", sheetsAvail)
model.DataVectors.AddDense("CutDemand[cuts]", cutDemand)
model.DataVectors.Add("CutsInPattern[patterns, cuts]",
cutsInPattern)
model.ReadFilePart("Cutstock.mpl", 19);
except Exception as ex:
print(str(ex))
result = model.LastResult
return result
Copyright © 2012 Maximal Software, Inc. All rights reserved
25
- 26. CutStock Example – Add() Statements
def LoadModel(self, model, cutNames, patternNames, priceSheet, sheetsAvail,
cutDemand, cutsInPattern):
try:
. . . # previous model index and data Add() statements
model.PlainVariables.Add("SheetsCut", "-> T1")
model.PlainVariables.Add("TotalCost", "-> TC")
model.VariableVectors.Add("PatternCount[patterns]", "-> """)
model.VariableVectors.Add("ExcessCuts[cuts]", "-> X")
model.Objectives.Add("TotalCost", ObjectSense.Minimize)
model.PlainConstraints.Add("TotCost", "TotalCost =
PriceSheet*SheetsCut")
model.PlainConstraints.Add("RawAvail", "SheetsCut < SheetsAvail")
model.PlainConstraints.Add("Sheets",
"SheetsCut = SUM(patterns: PatternCount[patterns])")
model.ConstraintVectors.Add("CutReq[cuts]",
"SUM(patterns: CutsInPattern[patterns, cuts] *
PatternCount[patterns]) =
CutDemand[cuts] + ExcessCuts[cuts]")
except Exception as ex:
print(str(ex))
result = model.LastResult
return result
Copyright © 2012 Maximal Software, Inc. All rights reserved
26
- 27. Exceptions with Detailed Syntax Error Messages
Syntax Error:
model.PlainConstraints.Add("TotCost", "TotalCost = PriceSheet */ SheetsCut")
Exception Output:
The PlainConstraints.Add('TotCost', expr='TotalCost = PriceSheet */ SheetsCut') method
returned 'SyntaxError' (2) with the following error message:
**** A minor mistake was found in line 1:
6. I expected to see either a number or a variable, but found instead '/'.
File: C:MplWin4OptiMaxPythonCutStock
Line: (line=1, col=43)
SUBJECT TO TotCost: TotalCost = PriceSheet */ SheetsCut;
^
Copyright © 2012 Maximal Software, Inc. All rights reserved
27
- 28. Exceptions with Wrong Data Types
Syntax Error:
cutNames = ['w1', 'w2', 'w3', 'w4', 'w5', 'w6', 'w7', 'w8']
model.DataConstants.Add("SheetsAvail", cutNames)
Exception Output:
The argument 'dataValue' for the 'DataConstants.Add('SheetsAvail', dataValue, dataAttr)' method
cannot be assigned the value '['w1', 'w2', 'w3', 'w4', 'w5', 'w6', 'w7', 'w8']' of type 'list'.
Quick fix: Please enter either a numeric or string value.
Copyright © 2012 Maximal Software, Inc. All rights reserved
28
- 29. MPL OptiMax on Optimization Servers
Full support for multi-threaded applications
• Optimization Servers
• Web Services (REST / SOAP)
• Web API’s
• Mobile / Tablet Applications
Support for server-side application frameworks
• ASP.Net
• Python
Copyright © 2012 Maximal Software, Inc. All rights reserved
29
- 30. Optimization on Mobile Devices
Optimization on the mobile device (thick clients)
• Model (device)
• Solvers (device)
• Data (device / server)
Example: TSP Concord on iPad
Optimization on the server (thin clients)
• Model (server)
• Solvers (server)
• Data (device / server)
Copyright © 2012 Maximal Software, Inc. All rights reserved
30
- 31. MPL OptiMax on Optimization Servers
Client-Side Technologies:
• AJAX
• XMLHttpRequest
• XHTML and CSS
• Document Object Model (DOM)
• JavaScript
• XML and XSLT
• Mobile / Tablets
• iPhone / iPad (Objective-C)
• Android (Java)
• HTML5
Copyright © 2012 Maximal Software, Inc. All rights reserved
31
- 32. Cloud-based Optimization
Example:
Large energy company needs to run 2000 model instances,
each taking 1-2 hours to solve, within a day
• Traditional standalone computer approach
• Maintain large number machines
• Install optimization and modelling software
• Run model instances over the network
• Very expensive fixed costs upfront
• Cloud-based computing approach
• Setup account on Cloud, such as Amazon EC2
• Write script to run the models on cloud
• Cost is typically calculated per core, per hour.
Copyright © 2012 Maximal Software, Inc. All rights reserved
32
- 33. Google Web API Toolkits
• Google Drive (Google Apps)
• Google Spreadsheets API
• Full control of visibility and who can update
• Built-in Javascript
• Support SQL types of queries
• Google Query API
• Google Visualization API
• Bar charts, Pie charts, Line charts and many more
• Very customizable
• Data Tables and Data Views
• Google Maps API
• Add markers, Polylines and Info Windows
Copyright © 2012 Maximal Software, Inc. All rights reserved
33
- 35. Google Maps API - Shortest Path Optimization
Copyright © 2012 Maximal Software, Inc. All rights reserved
35