Maximal: MPL Software Demo - INFORMS Phoenix Oct 2012
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
520
On Slideshare
520
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 ApplicationsWhat are the two main differences between the applications on the leftcolumn 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 ITGlobality • 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 IT1. Mobile Devices are taking over personal computers2. Social Media is replacing traditional news distribution3. Social Networking is changing how people work together4. Online Collaboration tools are replacing standalone software5. Cloud computing is replacing traditional file-based documents6. Online Chatting are replacing emails as effective communication tool7. Text Messaging is replacing phone calls8. Online Video services are replacing television viewing9. Online Publishing: Books and published materials are going online10. Virtual Education: Education and seminars are going virtual11. Web sites are now expected to be personalized and engaging12. Software Development: Servers, Mobile, Remote, Web API, MashupsO.R. needs to adapt to this new changed world andshould effectively leverage these new IT technologies Copyright © 2012 Maximal Software, Inc. All rights reserved 5
  • 6. Free Development Copies of MPLMaximal is now offering several new special free andsubscription 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 MaximalAcademic 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 ApplicationsPhase I - Development • Model Development Environment • Formulating the Model • Connecting to External Data • Solver Testing and TuningPhase 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 ModelingApplication Programming• Programming Languages (Procedural)• Application/User-Interface• Database Programming• Most programmers tend to know rather little about optimization and formulating modelsOptimization 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 DBApplicationOptimization 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 HierarchyOptiMax 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 - SymbolsOptiMax 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 OptiMaxNew 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 Pythonfrom 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 CSharpOptiMax 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 Attributesfrom mplpy import mplfrom numpy import arange, float32from matplotlib import pyplot as plotmodelFilename = mpl.HomeDir + "Portfolio.mpl"result = mpl.model.SolveModel(modelFilename, mpl.cplex)investVect = mpl.model.InvestinvestVect.ZeroTol = 0.001count = investVect.Nonzeros.CountinvestAmount = 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 RHSiterCount = 100deltaPercent = 0.02CPLEX_OPTIMAL = 1targetReturnData = model.TargetReturnvarianceMacro = model.VariancemeetTargetCon = model.MeetTargetTargetArray = 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 / DataVectorsAdding 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() Statementsdef 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() Statementsdef 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 MessagesSyntax 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 TypesSyntax 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 ServersFull support for multi-threaded applications • Optimization Servers • Web Services (REST / SOAP) • Web API’s • Mobile / Tablet ApplicationsSupport for server-side application frameworks • ASP.Net • Python Copyright © 2012 Maximal Software, Inc. All rights reserved 29
  • 30. Optimization on Mobile DevicesOptimization on the mobile device (thick clients) • Model (device) • Solvers (device) • Data (device / server)Example: TSP Concord on iPadOptimization 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 ServersClient-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 OptimizationExample: 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
  • 34. Google Visualization API – Portfolio Opt. Copyright © 2012 Maximal Software, Inc. All rights reserved 34
  • 35. Google Maps API - Shortest Path Optimization Copyright © 2012 Maximal Software, Inc. All rights reserved 35