INTEGRACIÓN DE CPLEX Y CONCERT TECHNOLOGY EN PROGRAMAS DE C++ Alejandro Duque Gómez
[email protected]
Universidad Tecnológica de Pereira Noviembre, 2013
1
1. Introducción CPLEX es una herramienta desarrollada para resolver problemas de programación lineal (PL), problemas de flujo en redes, programación cuadrática (QP) y programación lineal entera mixta (MIP). Viene en varios formatos para atender las necesidades de una amplia gama de usuarios: CPLEX Interactive Optimizer • Concert Concer t Techno Technology logy • CPLEX callable library •
2
1. Introducción Concert Technology es un conjunto de librerías de C++, java y .NET en las que se aprovecha la programación orientada a objetos para facilitar la creación de modelos matemáticos, permitiendo al usuario incorporar el solver CPLEX en sus aplicaciones.
Modelo matemático
Técnica de solución
3
2. Objetivo Conocer los conceptos básicos necesarios para desarrollar aplicaciones en C++ que incorporen los objetos definidos en las librerías de Concert Technology para finalmente resolver diversos problemas de optimización dentro de dichas aplicaciones. Para tal fin, es necesario contar con conocimiento previo sobre programación en lenguaje C++ y programación orientada a objetos.
4
3. Software requerido Microsoft Visual Studio 2010
IBM ILOG CPLEX Optimization Studio
5
4. Configuración Inicial En Visual Studio: File → New → Project →Win32 Console Application →*Dar nombre* →OK
6
En la ventana Win 32 Application Wizard: Next→ Empty Project →Finish
7
En Solution Explorer: Source Files *Click derecho*→ Add→New Item
8
En la ventana Add New Item: C++ file → *Dar nombre* → Add
9
En Solution Explorer: Nombre Proyecto *Click derecho* → Properties
10
En Property Pages: Configuration Manager En Configuration Manager: Active solution configuration→Release Active solution platform →New En New Solution Platform: Type or select new platform →x64 Copy settings from → Win32 →OK →Close
11
En Property Pages: C/C++→General → Additional Include Directories →Edit → → *Directorio…\cplex\include* En la ventana emergente: → Seleccionar carpeta → → *Directorio…\concert\include* → Seleccionar carpeta → OK
12
En Property Pages → C/C++→General : Debug Information Format → C7 compatible (/Z7) →Aplicar
13
En Property Pages: C/C++→ Preprocessor → Preprocessor Definitions → *Escribir “IL_STD;” junto a Win32 → Aplicar
14
En Property Pages: C/C++→ Code Generation → Runtime Library → Multi-threaded (/MT) → Aplicar
15
En Property Pages: Linker→General → Additional Library Directories →Edit → →*…\cplex\lib\x64_windows_vs2010\stat_mta* En la ventana : → Seleccionar carpeta → →*…\concert\lib\x64_windows_vs2010\stat_mta* → Seleccionar carpeta → OK → Aplicar
16
En Property Pages: Linker → Input → Additional Dependencies → *Escribir “cplex125.lib; ilocplex.lib; concert.lib; ” junto a kernel32.lib → Aplicar → Aceptar
17
5. Modelar con Concert Technology Entorno – IloEnv env Modelo – IloModel mod(env) IloNumVar IloBoolVar IloArray IloNumVarArray IloBoolVarArray IloExpr IloRange IloConstraint IloConstraintArray IloObjective …
Cplex – IloCplex cplex(env) cplex.extract(mod) cplex.exportModel(Modelo.lp) cplex.solve() cplex.getValue() cplex.getObjValue() IloCplex::FractionalCutCallbackI IloCplex::DisjunctiveCutCallbackI IloCplex::CutCallbackI IloCplex::HeuristicCallbackI IloCplex::NodeCallbackI …
**Incluir la librería: #include
18
6. Ejemplo de aplicación max
x
1
2 x2 3 x3
. .
s a
x1 x
1
x
2
3 x2
40
, x3
0
2
3
x
0 x1 x
3
x
20 30
1. Generar por expresiones 2. Generar por columnas
19
7. Manual de referencia IBM http://pic.dhe.ibm.com/infocenter/cosinfoc/v12r2/index.jsp