SlideShare une entreprise Scribd logo
1  sur  55
© 2013 IBM Corporation
®
Using
CPLEX 12.5.1
Remote Objects
Roland Wunderling
roland.wunderling@at.ibm.com
IBM Software Group
© 2013 IBM Corporation2
Agenda
 CPLEX 12.5.1 updates
 CPLEX remote object
• Synchronous use
• Asynchronous use
 Examples
– Distributed Decomposition Algorithm
• Decomposition
• Distributed Parallel Benders Decomposition
– Distributed MIP solver
• Simple
• Advanced
 CPLEX 12.5.1 performance
IBM Software Group
© 2013 IBM Corporation
CPLEX 12.5.1 Updates
3
IBM Software Group
© 2013 IBM Corporation
CPLEX 12.5.1 updates
 Ports
– Support for Microsoft Visual Studio 2012
– Support for Windows 8 and Server 2012
– Support for Xcode and 64-bit Python on Mac OS X
 Various fixes
4
IBM Software Group
© 2013 IBM Corporation
CPLEX 12.5.1 updates
 Added functionality to OPL
– Extended scripting
• New relaxation iterator IloOplRelaxationIterator
• New conflict iterator IloOplConflictIterator
• Support of multiple MIP starts
– Extended IloOplConflictIterator for Java and .NET
 Added functionality to CPLEX
– Duals for QCPs
• Parameter CPX_PARAM_CALCQCPDUALS
– Remote Object support for C++ and Java
5
IBM Software Group
© 2013 IBM Corporation
CPLEX Remote Objects
6
IBM Software Group
© 2013 IBM Corporation7
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation8
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Slow performance on local hardware
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation9
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Slow performance on local hardware
– High Performance Hardware available
• Port application to HPC
 Needs full environment / licenses on Server
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation10
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Slow performance on local hardware
– High Performance Hardware available
• Port application to HPC
 Needs full environment / licenses on Server
• Use CPLEX as Remote Object
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation11
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Change single line of code to establish connection
• Constructor takes arguments to describe how to
access remote CPLEX
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env, transport
argc, argv);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation12
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Change single line of code to establish connection
• Constructor takes arguments to describe how to
access remote CPLEX
– All methods are mapped to messages to remote
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env, transport
argc, argv);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation13
CPLEX remote object
 Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1
– Transparent use of remote hardware
– Change single line of code to establish connection
• Constructor takes arguments to describe how to
access remote CPLEX
– All methods are mapped to messages to remote
– solve() method used high performance hardware
optimize(Data data)
{
IloEnv env;
IloCplex cplex(env, transport
argc, argv);
buildModel(cplex, data);
cplex.solve();
useSolution(cplex);
}
IBM Software Group
© 2013 IBM Corporation14
CPLEX remote object - Transports
 Transports
– Describe how to potentially initiate and connect to remote
CPLEX object
 3(+1) transports available
– ssh
• Start CPLEX on remote hardware via
ssh <host> cplex –worker=process
– TCP/IP
• Connect to CPLEX that has been started on remote hardware via
cplex –worker=tcpip –address=<host:port>
– MPI
• Message Passing Interface
• Established standard for HPC since 1992
– (NULL, i.e. use local object)
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
15
Local CPLEX CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
16
cplex cplex (proxy) cplex
Local CPLEX CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
17
cplex (proxy)
Local CPLEX CPLEX remote object
cplex cplex
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 cplex.solve();
 Synchronous: Blocks until completed
18
cplex
cplex (proxy)
cplex
Local CPLEX CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 cplex.solve();
 Synchronous: Blocks until completed
19
cplex
cplex (proxy)
cplex
Local CPLEX CPLEX remote object
solution solution
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 cplex.solve();
 Synchronous: Blocks until completed
 useSolution(cplex);
20
cplex
cplex (proxy)
cplex
Local CPLEX CPLEX remote object
solution solution
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - architecture
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 cplex.solve();
 Synchronous: Blocks until completed
 useSolution(cplex);
 cplex.end();
21
Local CPLEX CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
22
cplex (proxy)
cplex
CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
 doOtherThings();
23
cplex (proxy)
cplex
CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
 doOtherThings();
 handle.join();
24
cplex (proxy)
cplex
CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
 doOtherThings();
 handle.join();
 Blocking until solution available
25
cplex (proxy)
cplex
CPLEX remote object
solution
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
 doOtherThings();
 handle.join();
 Blocking until solution available
 useSolution(cplex);
26
cplex (proxy)
cplex
CPLEX remote object
solution
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Why idle during cplex.solve()?
 IloCplex cplex(env, ?);
 buildModel(cplex, data);
 handle = cplex.solve(true);
 Asynchronous: non-blocking
 doOtherThings();
 handle.join();
 Blocking until solution available
 useSolution(cplex);
 cplex.end();
27
CPLEX remote object
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 Asynchronous calls support a master/worker distributed
parallel programming paradigm for building distributed
parallel optimization algorithms
 Asynchronous calls return AsyncHandle objects to join
back
 Different subclasses for different asynchronous calls to
handle different return data in specific join*() method,
e.g.
– SolveHandle IloCplex::solve()
– bool SolveHandle::joinSolve()
28
IBM Software Group
© 2013 IBM Corporation
Example
-
Distributed Decomposition
Algorithms
29
IBM Software Group
© 2013 IBM Corporation
Decomposition
 Decomposition
– Solve larger problem by partitioning into smaller parts and
merging the results
 Sequential workflow
30
Main
Problem
Split
Part 1
Part 2
Part N
Soln 1
Soln 2
Soln N
Solve
Solve
Solve
Combine
Main
Solution
IBM Software Group
© 2013 IBM Corporation
Decomposition
 Decomposition
– Solve larger problem by partitioning into smaller parts and
merging the results
 Parallel workflow
31
Main
Problem
Split
Part 1
Part 2
Part N
Soln 1
Soln 2
Soln N
Solve
Solve
Solve
Combine
Main
Solution
IBM Software Group
© 2013 IBM Corporation
Decomposition
 Decomposable matrix
min c’x
s.t. Ax = b, with A =
x ≥ 0
 Solve each block i independently
min ci’xi
s.t. Aixi = bi
xi ≥ 0
32
A1
A2
An
IBM Software Group
© 2013 IBM Corporation
Decomposition
 Sequential code
solveParts (int N, IloModel *part, IloNumVarArray *vars) {
IloNumArray solution(part[0].getEnv());
IloCplex cplex[P];
for (int p = 0; p < N; ++p) {
// solve each part
cplex[p] = IloCplex(part[p]);
if ( cplex[p].solve() ) {
// collect and combine results
IloNumArray partsol(part[p].getEnv());
cplex[p].getValues(parsol, vars[p]);
solution.add(partsol);
partsol.end();
cplex[p].end();
}
}
return solution;
}
33
IBM Software Group
© 2013 IBM Corporation
Decomposition
 Distributed parallel code
solveParts (int N, IloModel *part, IloNumVarArray *vars) {
IloNumArray solution(part[0].getEnv());
IloCplex cplex[P];
IloCplex::SolveHandle handle[P];
for (int p = 0; p < N; ++p) {
// solve each part
cplex[p] = IloCplex(part[p], transport, argc, argv);
handle[p] = cplex.solve(true);
}
for (int p = 0; p < N; ++p) {
if ( handle[p].joinSolve() ) {
// collect and combine results
IloNumArray partsol(part[p].getEnv());
cplex[p].getValues(parsol, vars[p]);
solution.add(partsol);
partsol.end();
cplex[p].end();
}
}
return solution;
}
34
IBM Software Group
© 2013 IBM Corporation
Benders Decomposition
 Block-structured Problem
min c’x
s.t. Ax = b, with A =
x ≥ 0
 Transform into 2-stage problem
min {c0’x0 + min{d’y : Dy = b-Ax0, y ≥ 0} : solvable, x0 ≥ 0},
where d’ = (c’1, …, c’n),
y’ = (x’1, …, x’n), and
D = diag(A1, …, An).
35
A1
A2
An
A0
IBM Software Group
© 2013 IBM Corporation
Benders Decomposition
 Sketch of Algorithm
1. Solve restricted master problem to produce x0
2. Solve subproblem on y
a) If subproblem solves to objective limit goto 3
b) Otherwise add cut to master problem and goto 1
3. (x0,y) is optimal solution to problem
 Implementation (see example iloparbenders.cpp)
– Step 2 implemented as lazy constraint callback for solver of
step 1
– Step 2 implemented using distributed decomposition
algorithm adding cuts separately per part
36
IBM Software Group
© 2013 IBM Corporation
Example
-
Distributed MIP Solver
37
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object – asynchronous calls
 All methods of class IloCplex::AsyncHandle
– join()
• Blocks until asynchronous call has completed
– test()
• Tests if asynchronous call has completed
– kill()
• Interrupt asynchronous call (still need to call join())
 Support more types of parallel algorithms
38
IBM Software Group
© 2013 IBM Corporation
Simple Example: Distributed Concurrent MIP
 Idea
– Execute several solvers concurrently on remote hardware
each with different parameter settings
– Stop when first solver is done
 Master (simplified)
distributedConcurrentMIPopt(const char* modelfile)
{
IloEnv env;
IloModel model(env);
IloCplex cplex(env);
cplex.importModel(model);
// create and start all worker solvers
Worker worker[N];
for (int i = 0; i < N; ++i) {
// setup transport, argc, argv according to chosen transport
worker[i] = new Worker(env, model, i, transport, argc, argv);
}
39
IBM Software Group
© 2013 IBM Corporation
Simple Example: Distributed Concurrent MIP
 Worker class (simplified)
class Worker {
IloCplex cplex;
IloCplex::SolveHandle handle;
public:
Worker(IloEnv env, IloModel model, int idx,
const char *transport, int argc, const char *argv)
{
cplex = IloCplex(model, transport, argc, argv);
cplex.setParam(IloCplex::RandomSeed, idx);
handle = cplex.solve(true);
}
40
Exploit
Performance
variability
IBM Software Group
© 2013 IBM Corporation
Simple Example: Distributed Concurrent MIP
 Master (continued…)
distributedConcurrentMIPopt(const char* modelfile)
{
// create and start all worker solvers
// wait for first worker to terminate and kill others
int winner = -1;
while (winner < 0) {
for (int i = 0; i < N; ++i) {
if ( !worker[i]->test() ) {
winner = i;
for (int j = 0; j < N; ++j) {
if (i != j)
delete worker[j];
}
break;
}
}
}
// Solution can be found in winning worker
bool success = worker[winner]->join();
}
41
IBM Software Group
© 2013 IBM Corporation
Simple Example: Distributed Concurrent MIP
 Worker class (continued…)
class Worker {
IloCplex cplex;
IloCplex::SolveHandle handle;
public:
Worker(IloEnv env, const char *modelfile, int idx,
const char *transport, int argc, const char *argv;
bool test() { return (handle ? handle.test() : false); }
~Worker() {
if ( handle ) {
handle.kill();
handle.join();
}
cplex.end();
}
bool join() {
bool status = (handle ? handle.joinSolve() : false);
handle = NULL;
return status;
}
}
42
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Cooperate rather than Compete
– Primal bound
• Best solution found so far
– Dual bound
• Proven bound for possible solution values
– Optimal solution
• Primal bound == Dual bound
 Idea
– Parameterize some workers to focus on primal bound
– Parameterize some workers to focus on dual bound
– Stop when best known primal and dual bound match
43
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Configure and launch primal and dual worker(s)
44
cplex
cplex
primal.solve(true)
dual.solve(true)
Primal worker
Dual worker
Master
MIP
Params
solve(true)
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Monitor primal dual bounds from workers
45
cplex
cplex
primal.solve(true)
dual.solve(true)
Primal worker
Dual worker
Master
Worker
primal/dual
bound
Best primal
?
Best dual
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Monitor primal dual bounds from workers
 Sending bounds implemented as user callback on remote
– Installed with user function from .so on remote computers
46
cplex
cplex
primal.solve(true)
dual.solve(true)
Primal worker
Dual worker
Master
Worker
primal/dual
bound
User callback
User callback
user
function
from
.so
user
function
from
.so
Best primal
?
Best dual
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Monitor primal dual bounds from workers
 Receiving bounds implemented as Info Handlers
– Callbacks on worker handles process incoming messages
47
cplex
cplex
primal.solve(true)
dual.solve(true)
Primal worker
Dual worker
Master
Worker
primal/dual
bound
User callback
User callback
user
function
from
.so
user
function
from
.so
Best primal
?
Best dual
InfoHandler
InfoHandler
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Terminate when best dual == best primal bound
48
cplex
cplex
primal.solve(true)
dual.solve(true)
Primal worker
Dual worker
Master
Kill
User callback
User callback
user
function
from
.so
user
function
from
.so
Best primal
==
Best dual
InfoHandler
InfoHandler
IBM Software Group
© 2013 IBM Corporation
Advanced Example: Distributed Parallel MIP
 Requires monitoring of primal/dual bounds by master in
order to stop progress ASAP
 Advanced functionality: user functions
– Call C user function available in shared library on workers
– Used to install info callback that sends bound information to
master using CPXXsendinfodouble()
 Advanced functionality: IloCplex::RemoteInfoHandler
– Reacts to info sent from callback via function
CPXXsendinfodouble()
 Master monitors best primal and dual bound reported by
info handlers of workers to stop all workers
– See iloparmipopt.cpp
49
IBM Software Group
© 2013 IBM Corporation
Performance experiments with parmipopt example
 User reported performance of his adapted parmipopt
example on unit commitment problems
50
IBM Software Group
© 2013 IBM Corporation
CPLEX remote object - summary
 Synchronous remote function calls to transparently use
remote hardware for optimization tasks in your program
 Asynchronous remote function calls support
master/worker parallel programming paradigm
– Handle Objects to test/join/kill asynchronous call and collect
return values
– User functions (C only) to extend remote functionality
– InfoHandler Objects to handle data sent during
asynchronous optimization
51
IBM Software Group
© 2013 IBM Corporation
CPLEX 12.5.1
Performance Improvements
52
IBM Software Group
© 2013 IBM Corporation
CPLEX 12.5.1 performance
 CPLEX Performance Improvements
– MILP
• Lift-and-Project Cuts
 Parameter CPX_PARAM_LANDPCUTS
• Parallel cut loop
• Probing
 Implied Literals Detection and Probing
 Orbital Probing
 Lifting after Probing
 Parallel Probing
• Previously unsolved MIPLIB 2010 problems ns111636 and tw-
myciel4 have been solved with CPLEX 12.5.1
– MIQP
• New presolve reduction for linearizing products xy for binary
variables x and y
53
IBM Software Group
© 2013 IBM Corporation
 Unbiased performance evolution (internal testset)
MIP Performance Improvements
54
0
200
400
600
800
1000
1200
1400
6.0
6.5
7.0
8.0
9.0
10.0
11.0
12.1
12.2
12.3
12.4
12.5
12.5.1
numberoftimeouts
0
50
100
150
200
250
totalspeedup
IBM Software Group
© 2013 IBM Corporation
 Unbiased performance evolution (internal testset)
MIP Performance Improvements
55
0
200
400
600
800
1000
1200
1400
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
numberoftimeouts
0
50
100
150
200
250
totalspeedup

Contenu connexe

Tendances

Concurrent Root Cut Loops to Exploit Random Performance Variability
Concurrent Root Cut Loops to Exploit Random Performance VariabilityConcurrent Root Cut Loops to Exploit Random Performance Variability
Concurrent Root Cut Loops to Exploit Random Performance VariabilityIBM Decision Optimization
 
Conditional interval variables: A powerful concept for modeling and solving c...
Conditional interval variables: A powerful concept for modeling and solving c...Conditional interval variables: A powerful concept for modeling and solving c...
Conditional interval variables: A powerful concept for modeling and solving c...Philippe Laborie
 
Solving Large Scale Optimization Problems using CPLEX Optimization Studio
Solving Large Scale Optimization Problems using CPLEX Optimization StudioSolving Large Scale Optimization Problems using CPLEX Optimization Studio
Solving Large Scale Optimization Problems using CPLEX Optimization Studiooptimizatiodirectdirect
 
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three Problems
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three ProblemsIBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three Problems
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three ProblemsPhilippe Laborie
 
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...Philippe Laborie
 
A (Not So Short) Introduction to CP Optimizer for Scheduling
A (Not So Short) Introduction to CP Optimizer for SchedulingA (Not So Short) Introduction to CP Optimizer for Scheduling
A (Not So Short) Introduction to CP Optimizer for SchedulingPhilippe Laborie
 
ICAPS-2020 Industry Session
ICAPS-2020 Industry SessionICAPS-2020 Industry Session
ICAPS-2020 Industry SessionPhilippe Laborie
 
Industrial project and machine scheduling with Constraint Programming
Industrial project and machine scheduling with Constraint ProgrammingIndustrial project and machine scheduling with Constraint Programming
Industrial project and machine scheduling with Constraint ProgrammingPhilippe Laborie
 
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...Philippe Laborie
 
Objective Landscapes for Constraint Programming
Objective Landscapes for Constraint ProgrammingObjective Landscapes for Constraint Programming
Objective Landscapes for Constraint ProgrammingPhilippe Laborie
 
CP Optimizer pour la planification et l'ordonnancement
CP Optimizer pour la planification et l'ordonnancementCP Optimizer pour la planification et l'ordonnancement
CP Optimizer pour la planification et l'ordonnancementPhilippe Laborie
 

Tendances (12)

Concurrent Root Cut Loops to Exploit Random Performance Variability
Concurrent Root Cut Loops to Exploit Random Performance VariabilityConcurrent Root Cut Loops to Exploit Random Performance Variability
Concurrent Root Cut Loops to Exploit Random Performance Variability
 
Conditional interval variables: A powerful concept for modeling and solving c...
Conditional interval variables: A powerful concept for modeling and solving c...Conditional interval variables: A powerful concept for modeling and solving c...
Conditional interval variables: A powerful concept for modeling and solving c...
 
Solving Large Scale Optimization Problems using CPLEX Optimization Studio
Solving Large Scale Optimization Problems using CPLEX Optimization StudioSolving Large Scale Optimization Problems using CPLEX Optimization Studio
Solving Large Scale Optimization Problems using CPLEX Optimization Studio
 
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three Problems
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three ProblemsIBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three Problems
IBM ILOG CP Optimizer for Detailed Scheduling Illustrated on Three Problems
 
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...
Modeling and Solving Resource-Constrained Project Scheduling Problems with IB...
 
A (Not So Short) Introduction to CP Optimizer for Scheduling
A (Not So Short) Introduction to CP Optimizer for SchedulingA (Not So Short) Introduction to CP Optimizer for Scheduling
A (Not So Short) Introduction to CP Optimizer for Scheduling
 
Recent Advances in CPLEX 12.6.1
Recent Advances in CPLEX 12.6.1Recent Advances in CPLEX 12.6.1
Recent Advances in CPLEX 12.6.1
 
ICAPS-2020 Industry Session
ICAPS-2020 Industry SessionICAPS-2020 Industry Session
ICAPS-2020 Industry Session
 
Industrial project and machine scheduling with Constraint Programming
Industrial project and machine scheduling with Constraint ProgrammingIndustrial project and machine scheduling with Constraint Programming
Industrial project and machine scheduling with Constraint Programming
 
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...
An Update on the Comparison of MIP, CP and Hybrid Approaches for Mixed Resour...
 
Objective Landscapes for Constraint Programming
Objective Landscapes for Constraint ProgrammingObjective Landscapes for Constraint Programming
Objective Landscapes for Constraint Programming
 
CP Optimizer pour la planification et l'ordonnancement
CP Optimizer pour la planification et l'ordonnancementCP Optimizer pour la planification et l'ordonnancement
CP Optimizer pour la planification et l'ordonnancement
 

Similaire à CPLEX 12.5.1 remote object - June 2013

Direct Code Execution - LinuxCon Japan 2014
Direct Code Execution - LinuxCon Japan 2014Direct Code Execution - LinuxCon Japan 2014
Direct Code Execution - LinuxCon Japan 2014Hajime Tazaki
 
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLBoosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLJanakiRam Raghumandala
 
OpenCL Programming 101
OpenCL Programming 101OpenCL Programming 101
OpenCL Programming 101Yoss Cohen
 
Track A-Compilation guiding and adjusting - IBM
Track A-Compilation guiding and adjusting - IBMTrack A-Compilation guiding and adjusting - IBM
Track A-Compilation guiding and adjusting - IBMchiportal
 
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...Edge AI and Vision Alliance
 
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes][HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]Wong Hoi Sing Edison
 
"Making OpenCV Code Run Fast," a Presentation from Intel
"Making OpenCV Code Run Fast," a Presentation from Intel"Making OpenCV Code Run Fast," a Presentation from Intel
"Making OpenCV Code Run Fast," a Presentation from IntelEdge AI and Vision Alliance
 
RTP NPUG: Ansible Intro and Integration with ACI
RTP NPUG: Ansible Intro and Integration with ACIRTP NPUG: Ansible Intro and Integration with ACI
RTP NPUG: Ansible Intro and Integration with ACIJoel W. King
 
DevEx | there’s no place like k3s
DevEx | there’s no place like k3sDevEx | there’s no place like k3s
DevEx | there’s no place like k3sHaggai Philip Zagury
 
MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxgopikahari7
 
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...Michael Hofmann
 
.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3aminmesbahi
 
David Kirk_Local Microservice Development in EKS.pdf
David Kirk_Local Microservice Development in EKS.pdfDavid Kirk_Local Microservice Development in EKS.pdf
David Kirk_Local Microservice Development in EKS.pdfAWS Chicago
 
Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: ConcurrencyPlatonov Sergey
 
TIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldTIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldThe Incredible Automation Day
 
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP..."Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...Edge AI and Vision Alliance
 

Similaire à CPLEX 12.5.1 remote object - June 2013 (20)

Direct Code Execution - LinuxCon Japan 2014
Direct Code Execution - LinuxCon Japan 2014Direct Code Execution - LinuxCon Japan 2014
Direct Code Execution - LinuxCon Japan 2014
 
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLBoosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
 
Ph.D. Defense
Ph.D. DefensePh.D. Defense
Ph.D. Defense
 
OpenCL Programming 101
OpenCL Programming 101OpenCL Programming 101
OpenCL Programming 101
 
Track A-Compilation guiding and adjusting - IBM
Track A-Compilation guiding and adjusting - IBMTrack A-Compilation guiding and adjusting - IBM
Track A-Compilation guiding and adjusting - IBM
 
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...
“Khronos Group Standards: Powering the Future of Embedded Vision,” a Presenta...
 
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes][HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
 
"Making OpenCV Code Run Fast," a Presentation from Intel
"Making OpenCV Code Run Fast," a Presentation from Intel"Making OpenCV Code Run Fast," a Presentation from Intel
"Making OpenCV Code Run Fast," a Presentation from Intel
 
Kubernetes @ meetic
Kubernetes @ meeticKubernetes @ meetic
Kubernetes @ meetic
 
Type-safe DSLs
Type-safe DSLsType-safe DSLs
Type-safe DSLs
 
RTP NPUG: Ansible Intro and Integration with ACI
RTP NPUG: Ansible Intro and Integration with ACIRTP NPUG: Ansible Intro and Integration with ACI
RTP NPUG: Ansible Intro and Integration with ACI
 
DevEx | there’s no place like k3s
DevEx | there’s no place like k3sDevEx | there’s no place like k3s
DevEx | there’s no place like k3s
 
MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptx
 
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...
Developer Experience Cloud Native - From Code Gen to Git Commit without a CI/...
 
.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3
 
David Kirk_Local Microservice Development in EKS.pdf
David Kirk_Local Microservice Development in EKS.pdfDavid Kirk_Local Microservice Development in EKS.pdf
David Kirk_Local Microservice Development in EKS.pdf
 
Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: Concurrency
 
RISC V in Spacer
RISC V in SpacerRISC V in Spacer
RISC V in Spacer
 
TIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldTIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container world
 
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP..."Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...
"Efficient Implementation of Convolutional Neural Networks using OpenCL on FP...
 

Dernier

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Dernier (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

CPLEX 12.5.1 remote object - June 2013

  • 1. © 2013 IBM Corporation ® Using CPLEX 12.5.1 Remote Objects Roland Wunderling roland.wunderling@at.ibm.com
  • 2. IBM Software Group © 2013 IBM Corporation2 Agenda  CPLEX 12.5.1 updates  CPLEX remote object • Synchronous use • Asynchronous use  Examples – Distributed Decomposition Algorithm • Decomposition • Distributed Parallel Benders Decomposition – Distributed MIP solver • Simple • Advanced  CPLEX 12.5.1 performance
  • 3. IBM Software Group © 2013 IBM Corporation CPLEX 12.5.1 Updates 3
  • 4. IBM Software Group © 2013 IBM Corporation CPLEX 12.5.1 updates  Ports – Support for Microsoft Visual Studio 2012 – Support for Windows 8 and Server 2012 – Support for Xcode and 64-bit Python on Mac OS X  Various fixes 4
  • 5. IBM Software Group © 2013 IBM Corporation CPLEX 12.5.1 updates  Added functionality to OPL – Extended scripting • New relaxation iterator IloOplRelaxationIterator • New conflict iterator IloOplConflictIterator • Support of multiple MIP starts – Extended IloOplConflictIterator for Java and .NET  Added functionality to CPLEX – Duals for QCPs • Parameter CPX_PARAM_CALCQCPDUALS – Remote Object support for C++ and Java 5
  • 6. IBM Software Group © 2013 IBM Corporation CPLEX Remote Objects 6
  • 7. IBM Software Group © 2013 IBM Corporation7 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware optimize(Data data) { IloEnv env; IloCplex cplex(env); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 8. IBM Software Group © 2013 IBM Corporation8 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Slow performance on local hardware optimize(Data data) { IloEnv env; IloCplex cplex(env); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 9. IBM Software Group © 2013 IBM Corporation9 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Slow performance on local hardware – High Performance Hardware available • Port application to HPC  Needs full environment / licenses on Server optimize(Data data) { IloEnv env; IloCplex cplex(env); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 10. IBM Software Group © 2013 IBM Corporation10 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Slow performance on local hardware – High Performance Hardware available • Port application to HPC  Needs full environment / licenses on Server • Use CPLEX as Remote Object optimize(Data data) { IloEnv env; IloCplex cplex(env); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 11. IBM Software Group © 2013 IBM Corporation11 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Change single line of code to establish connection • Constructor takes arguments to describe how to access remote CPLEX optimize(Data data) { IloEnv env; IloCplex cplex(env, transport argc, argv); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 12. IBM Software Group © 2013 IBM Corporation12 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Change single line of code to establish connection • Constructor takes arguments to describe how to access remote CPLEX – All methods are mapped to messages to remote optimize(Data data) { IloEnv env; IloCplex cplex(env, transport argc, argv); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 13. IBM Software Group © 2013 IBM Corporation13 CPLEX remote object  Available in C since CPLEX 12.5.0 – C++ & Java 12.5.1 – Transparent use of remote hardware – Change single line of code to establish connection • Constructor takes arguments to describe how to access remote CPLEX – All methods are mapped to messages to remote – solve() method used high performance hardware optimize(Data data) { IloEnv env; IloCplex cplex(env, transport argc, argv); buildModel(cplex, data); cplex.solve(); useSolution(cplex); }
  • 14. IBM Software Group © 2013 IBM Corporation14 CPLEX remote object - Transports  Transports – Describe how to potentially initiate and connect to remote CPLEX object  3(+1) transports available – ssh • Start CPLEX on remote hardware via ssh <host> cplex –worker=process – TCP/IP • Connect to CPLEX that has been started on remote hardware via cplex –worker=tcpip –address=<host:port> – MPI • Message Passing Interface • Established standard for HPC since 1992 – (NULL, i.e. use local object)
  • 15. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture 15 Local CPLEX CPLEX remote object
  • 16. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?); 16 cplex cplex (proxy) cplex Local CPLEX CPLEX remote object
  • 17. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?);  buildModel(cplex, data); 17 cplex (proxy) Local CPLEX CPLEX remote object cplex cplex
  • 18. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?);  buildModel(cplex, data);  cplex.solve();  Synchronous: Blocks until completed 18 cplex cplex (proxy) cplex Local CPLEX CPLEX remote object
  • 19. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?);  buildModel(cplex, data);  cplex.solve();  Synchronous: Blocks until completed 19 cplex cplex (proxy) cplex Local CPLEX CPLEX remote object solution solution
  • 20. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?);  buildModel(cplex, data);  cplex.solve();  Synchronous: Blocks until completed  useSolution(cplex); 20 cplex cplex (proxy) cplex Local CPLEX CPLEX remote object solution solution
  • 21. IBM Software Group © 2013 IBM Corporation CPLEX remote object - architecture  IloCplex cplex(env, ?);  buildModel(cplex, data);  cplex.solve();  Synchronous: Blocks until completed  useSolution(cplex);  cplex.end(); 21 Local CPLEX CPLEX remote object
  • 22. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking 22 cplex (proxy) cplex CPLEX remote object
  • 23. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking  doOtherThings(); 23 cplex (proxy) cplex CPLEX remote object
  • 24. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking  doOtherThings();  handle.join(); 24 cplex (proxy) cplex CPLEX remote object
  • 25. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking  doOtherThings();  handle.join();  Blocking until solution available 25 cplex (proxy) cplex CPLEX remote object solution
  • 26. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking  doOtherThings();  handle.join();  Blocking until solution available  useSolution(cplex); 26 cplex (proxy) cplex CPLEX remote object solution
  • 27. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Why idle during cplex.solve()?  IloCplex cplex(env, ?);  buildModel(cplex, data);  handle = cplex.solve(true);  Asynchronous: non-blocking  doOtherThings();  handle.join();  Blocking until solution available  useSolution(cplex);  cplex.end(); 27 CPLEX remote object
  • 28. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  Asynchronous calls support a master/worker distributed parallel programming paradigm for building distributed parallel optimization algorithms  Asynchronous calls return AsyncHandle objects to join back  Different subclasses for different asynchronous calls to handle different return data in specific join*() method, e.g. – SolveHandle IloCplex::solve() – bool SolveHandle::joinSolve() 28
  • 29. IBM Software Group © 2013 IBM Corporation Example - Distributed Decomposition Algorithms 29
  • 30. IBM Software Group © 2013 IBM Corporation Decomposition  Decomposition – Solve larger problem by partitioning into smaller parts and merging the results  Sequential workflow 30 Main Problem Split Part 1 Part 2 Part N Soln 1 Soln 2 Soln N Solve Solve Solve Combine Main Solution
  • 31. IBM Software Group © 2013 IBM Corporation Decomposition  Decomposition – Solve larger problem by partitioning into smaller parts and merging the results  Parallel workflow 31 Main Problem Split Part 1 Part 2 Part N Soln 1 Soln 2 Soln N Solve Solve Solve Combine Main Solution
  • 32. IBM Software Group © 2013 IBM Corporation Decomposition  Decomposable matrix min c’x s.t. Ax = b, with A = x ≥ 0  Solve each block i independently min ci’xi s.t. Aixi = bi xi ≥ 0 32 A1 A2 An
  • 33. IBM Software Group © 2013 IBM Corporation Decomposition  Sequential code solveParts (int N, IloModel *part, IloNumVarArray *vars) { IloNumArray solution(part[0].getEnv()); IloCplex cplex[P]; for (int p = 0; p < N; ++p) { // solve each part cplex[p] = IloCplex(part[p]); if ( cplex[p].solve() ) { // collect and combine results IloNumArray partsol(part[p].getEnv()); cplex[p].getValues(parsol, vars[p]); solution.add(partsol); partsol.end(); cplex[p].end(); } } return solution; } 33
  • 34. IBM Software Group © 2013 IBM Corporation Decomposition  Distributed parallel code solveParts (int N, IloModel *part, IloNumVarArray *vars) { IloNumArray solution(part[0].getEnv()); IloCplex cplex[P]; IloCplex::SolveHandle handle[P]; for (int p = 0; p < N; ++p) { // solve each part cplex[p] = IloCplex(part[p], transport, argc, argv); handle[p] = cplex.solve(true); } for (int p = 0; p < N; ++p) { if ( handle[p].joinSolve() ) { // collect and combine results IloNumArray partsol(part[p].getEnv()); cplex[p].getValues(parsol, vars[p]); solution.add(partsol); partsol.end(); cplex[p].end(); } } return solution; } 34
  • 35. IBM Software Group © 2013 IBM Corporation Benders Decomposition  Block-structured Problem min c’x s.t. Ax = b, with A = x ≥ 0  Transform into 2-stage problem min {c0’x0 + min{d’y : Dy = b-Ax0, y ≥ 0} : solvable, x0 ≥ 0}, where d’ = (c’1, …, c’n), y’ = (x’1, …, x’n), and D = diag(A1, …, An). 35 A1 A2 An A0
  • 36. IBM Software Group © 2013 IBM Corporation Benders Decomposition  Sketch of Algorithm 1. Solve restricted master problem to produce x0 2. Solve subproblem on y a) If subproblem solves to objective limit goto 3 b) Otherwise add cut to master problem and goto 1 3. (x0,y) is optimal solution to problem  Implementation (see example iloparbenders.cpp) – Step 2 implemented as lazy constraint callback for solver of step 1 – Step 2 implemented using distributed decomposition algorithm adding cuts separately per part 36
  • 37. IBM Software Group © 2013 IBM Corporation Example - Distributed MIP Solver 37
  • 38. IBM Software Group © 2013 IBM Corporation CPLEX remote object – asynchronous calls  All methods of class IloCplex::AsyncHandle – join() • Blocks until asynchronous call has completed – test() • Tests if asynchronous call has completed – kill() • Interrupt asynchronous call (still need to call join())  Support more types of parallel algorithms 38
  • 39. IBM Software Group © 2013 IBM Corporation Simple Example: Distributed Concurrent MIP  Idea – Execute several solvers concurrently on remote hardware each with different parameter settings – Stop when first solver is done  Master (simplified) distributedConcurrentMIPopt(const char* modelfile) { IloEnv env; IloModel model(env); IloCplex cplex(env); cplex.importModel(model); // create and start all worker solvers Worker worker[N]; for (int i = 0; i < N; ++i) { // setup transport, argc, argv according to chosen transport worker[i] = new Worker(env, model, i, transport, argc, argv); } 39
  • 40. IBM Software Group © 2013 IBM Corporation Simple Example: Distributed Concurrent MIP  Worker class (simplified) class Worker { IloCplex cplex; IloCplex::SolveHandle handle; public: Worker(IloEnv env, IloModel model, int idx, const char *transport, int argc, const char *argv) { cplex = IloCplex(model, transport, argc, argv); cplex.setParam(IloCplex::RandomSeed, idx); handle = cplex.solve(true); } 40 Exploit Performance variability
  • 41. IBM Software Group © 2013 IBM Corporation Simple Example: Distributed Concurrent MIP  Master (continued…) distributedConcurrentMIPopt(const char* modelfile) { // create and start all worker solvers // wait for first worker to terminate and kill others int winner = -1; while (winner < 0) { for (int i = 0; i < N; ++i) { if ( !worker[i]->test() ) { winner = i; for (int j = 0; j < N; ++j) { if (i != j) delete worker[j]; } break; } } } // Solution can be found in winning worker bool success = worker[winner]->join(); } 41
  • 42. IBM Software Group © 2013 IBM Corporation Simple Example: Distributed Concurrent MIP  Worker class (continued…) class Worker { IloCplex cplex; IloCplex::SolveHandle handle; public: Worker(IloEnv env, const char *modelfile, int idx, const char *transport, int argc, const char *argv; bool test() { return (handle ? handle.test() : false); } ~Worker() { if ( handle ) { handle.kill(); handle.join(); } cplex.end(); } bool join() { bool status = (handle ? handle.joinSolve() : false); handle = NULL; return status; } } 42
  • 43. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Cooperate rather than Compete – Primal bound • Best solution found so far – Dual bound • Proven bound for possible solution values – Optimal solution • Primal bound == Dual bound  Idea – Parameterize some workers to focus on primal bound – Parameterize some workers to focus on dual bound – Stop when best known primal and dual bound match 43
  • 44. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Configure and launch primal and dual worker(s) 44 cplex cplex primal.solve(true) dual.solve(true) Primal worker Dual worker Master MIP Params solve(true)
  • 45. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Monitor primal dual bounds from workers 45 cplex cplex primal.solve(true) dual.solve(true) Primal worker Dual worker Master Worker primal/dual bound Best primal ? Best dual
  • 46. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Monitor primal dual bounds from workers  Sending bounds implemented as user callback on remote – Installed with user function from .so on remote computers 46 cplex cplex primal.solve(true) dual.solve(true) Primal worker Dual worker Master Worker primal/dual bound User callback User callback user function from .so user function from .so Best primal ? Best dual
  • 47. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Monitor primal dual bounds from workers  Receiving bounds implemented as Info Handlers – Callbacks on worker handles process incoming messages 47 cplex cplex primal.solve(true) dual.solve(true) Primal worker Dual worker Master Worker primal/dual bound User callback User callback user function from .so user function from .so Best primal ? Best dual InfoHandler InfoHandler
  • 48. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Terminate when best dual == best primal bound 48 cplex cplex primal.solve(true) dual.solve(true) Primal worker Dual worker Master Kill User callback User callback user function from .so user function from .so Best primal == Best dual InfoHandler InfoHandler
  • 49. IBM Software Group © 2013 IBM Corporation Advanced Example: Distributed Parallel MIP  Requires monitoring of primal/dual bounds by master in order to stop progress ASAP  Advanced functionality: user functions – Call C user function available in shared library on workers – Used to install info callback that sends bound information to master using CPXXsendinfodouble()  Advanced functionality: IloCplex::RemoteInfoHandler – Reacts to info sent from callback via function CPXXsendinfodouble()  Master monitors best primal and dual bound reported by info handlers of workers to stop all workers – See iloparmipopt.cpp 49
  • 50. IBM Software Group © 2013 IBM Corporation Performance experiments with parmipopt example  User reported performance of his adapted parmipopt example on unit commitment problems 50
  • 51. IBM Software Group © 2013 IBM Corporation CPLEX remote object - summary  Synchronous remote function calls to transparently use remote hardware for optimization tasks in your program  Asynchronous remote function calls support master/worker parallel programming paradigm – Handle Objects to test/join/kill asynchronous call and collect return values – User functions (C only) to extend remote functionality – InfoHandler Objects to handle data sent during asynchronous optimization 51
  • 52. IBM Software Group © 2013 IBM Corporation CPLEX 12.5.1 Performance Improvements 52
  • 53. IBM Software Group © 2013 IBM Corporation CPLEX 12.5.1 performance  CPLEX Performance Improvements – MILP • Lift-and-Project Cuts  Parameter CPX_PARAM_LANDPCUTS • Parallel cut loop • Probing  Implied Literals Detection and Probing  Orbital Probing  Lifting after Probing  Parallel Probing • Previously unsolved MIPLIB 2010 problems ns111636 and tw- myciel4 have been solved with CPLEX 12.5.1 – MIQP • New presolve reduction for linearizing products xy for binary variables x and y 53
  • 54. IBM Software Group © 2013 IBM Corporation  Unbiased performance evolution (internal testset) MIP Performance Improvements 54 0 200 400 600 800 1000 1200 1400 6.0 6.5 7.0 8.0 9.0 10.0 11.0 12.1 12.2 12.3 12.4 12.5 12.5.1 numberoftimeouts 0 50 100 150 200 250 totalspeedup
  • 55. IBM Software Group © 2013 IBM Corporation  Unbiased performance evolution (internal testset) MIP Performance Improvements 55 0 200 400 600 800 1000 1200 1400 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 numberoftimeouts 0 50 100 150 200 250 totalspeedup