pptx - GPD - Universidad Complutense de Madrid

Download Report

Transcript pptx - GPD - Universidad Complutense de Madrid

Universidad
Complutense
Madrid
PROGRAMACIÓN CON RESTRICCIONES
IBM ILOG CPLEX CP
2012
FACULTAD DE INFORMÁTICA
GRADO EN INGENIERÍA INFORMÁTICA
3ro A
Frank Canchari Lapa
Marta Caro Martínez
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
1. Introducción IBM ILOG CPLEX CP
Es un lenguaje de Programación con Restricciones
basada en OPL (Optimization Programming Language),
siendo este un lenguaje de Modelado para la
resolución de la programación matemática.
OPL modela:
•
•
•
•
•
Programación lineal, entera y mixta
Programación cuadrática y problemas convexos
cuadráticamente limitados
Programación con Restricciones
Modelado de planificación (scheduling)
Conexión con base de de datos relacionales
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
1. Introducción IBM ILOG CPLEX CP
•
Hablar de CPLEX CP, es hablar de IBM ILOG CPLEX Optimizer Studio
(informalmente conocido como CPLEX). Siendo este una IDE que
integra el Lenguaje de Modelado de OPL y multiplataforma
soportando:

HP, AIX, Linux, Windows y Mac OS.
•
CPLEX cuenta con una amplia gama de librerías para los lenguajes
de programación tradicionales más importantes (C, C++, C#, Java,
Phyton, Visual Basic y FORTAN). También tiene complementos para
ser usados desde las tablas de Microsoft Excel y MATLAB
•
CPLEX también soporta la conexión a servidores de bases de datos
para la extracción de información, soportando:
 Windows: ODBC, Oracle, Sybase, Microsoft SQL Server
 UNIX: Oracle
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
2. Historia y Creación
• Originalmente desarrollado por Robert E. Bixby y ofrecida
comercialmente desde el año 1988 con el nombre de CPLEX Optimization.
El origen de su nombre está en su primera concepción, ya que fue
pensada para C, y también en el uso como algoritmo de simplex algorithm
(conocido como método simplex, para la programación lineal).
• En el año 1997 fue adquirida por ILOG.
• Finalmente en el año 2009, IBM completa la adquisición de ILOG en la
Bolsa de Nueva York y París, al precio de 215 millones de euros.
• Tras el último cambio de propietario, obtiene el nombre de IBM ILOG
CPLEX Optimizer Studio.
• En la actualidad, la versión más reciente de la aplicación es la 12.4.
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL
A. Introducción
B. OPL para la Programación con
Restricciones (P.R. o CP)
C. Estructura del Modelado en OPL y
Sintaxis
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL-Introducción
Como ya se ha mencionado, OPL engloba muchos
campos de la programación matemática. Por este
motivo explicaremos brevemente algunos de los
paradigmas principales donde se enfoca.
• Programación Lineal
• Programación Cuadrática
• Programación Con Restricciones
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL - Introducción P. Lineal
Se trata de la resolución de problemas mediante Sistemas de
Inecuaciones Lineales optimizando la función objetivo.
Las variables están definidas en un vector X, donde n es el numero de elementos
∀𝑗, 1 ≤ 𝑗 ≤ 𝑛 𝑋𝑗 ≥ 0}
La Función Objetivo es el resultado de sumar la multiplicación de el vector de
coeficientes 𝒄𝒊 con el vector X
𝑛
𝑀𝑎𝑥 =
𝑛
[𝑐𝑗 × 𝑋𝑖 ]
y
𝑀𝑖𝑛 =
𝑗=1
[𝑐𝑗 × 𝑋𝑗 ]
𝑗=1
Las Restricciones están limitadas por Matrices con valores conocidos:
𝑛
[𝑎𝑖,𝑗 × 𝑋𝑗 ] ≤ 𝑏𝑖
𝑗=1
𝑖 = 1,2, … , 𝑚
a y b son coeficientes
técnicos conocidos
En OPL esto se resuelve mediante Simplex Algorithm (método simple)
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL - Introducción P. Cuadrática
Se trata de la resolución de problemas donde la Función
Objetivo es Cuadrática y las Restricciones son Lineales
Las variables están definidas en un vector X, donde n es el numero de elementos
∀𝑖, 1 ≤ 𝑖 ≤ 𝑛 𝑋𝑖 ≥ 0}
La Función Objetivo es el resultado de sumar la multiplicación de el vector de
coeficientes 𝒄𝒊 con el vector X
𝑛
𝑀𝑖𝑛(𝑀𝑎𝑥) =
𝑛
[𝑐𝑗 × 𝑋𝑗 ] +
𝑗=1
𝑛
[𝑞𝑖,𝑗 × 𝑋𝑗 × 𝑋𝑖 ]
𝑖=1 𝑗=1
Las Restricciones están limitadas por :
𝑛
[𝑎𝑗,𝑖 × 𝑋𝑖 ] ≥ 𝑏𝑗
𝑖=1
∀𝑗, 1 ≤ 𝑗 ≤ 𝑚
a y b son coeficientes
técnicos conocidos
En OPL esto se resuelve mediante Pivote Complementario, Wolfe y en algunas
situaciones con aproximaciones de la Función de Lagrange, entre otros
algoritmos matemáticos.
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL - Introducción P. Restricciones
Se trata de la resolución de problemas donde no existe una Función
Objetivo que buscar, si no encontrar una o más asignaciones que
puedan satisfacer a la Restricción
Conjunto de variables X, donde cada elemento toma valores de su respectivo Dominio
𝑋 = 𝑥1 , 𝑥2 , 𝑥3 , … 𝑥𝑛
𝐷 = {𝐷 𝑥1 , 𝐷 𝑥2 , 𝐷 𝑥3 , … , 𝐷(𝑥𝑛 )}
Asignación de las variables de X, es una n-tupla de valores
𝑑1 , 𝑑2 , 𝑑3 , … , 𝑑𝑛 𝑡𝑎𝑙 𝑞𝑢𝑒 𝑑𝑖 ∈ 𝐷 𝑥𝑖
𝑝𝑎𝑟𝑎 𝑖 = 1,2, … , 𝑛
Las Restricciones 𝑅 𝑉 donde 𝑉 ⊆ 𝑋
𝑅(𝑥1 , 𝑥2 , 𝑥3 , … 𝑥𝑚 ) ⊆ 𝐷 𝑥1 × 𝐷 𝑥2 × 𝐷 𝑥3 × ⋯ × 𝐷(𝑥𝑚 )
Una asignación 𝑑1 , 𝑑2 , 𝑑3 , … , 𝑑𝑚 Satisface la restricción R si:
𝑅(𝑑1 , 𝑑2 , 𝑑3 , … , 𝑑𝑚 ) ∈ 𝑅 𝑥1 , 𝑥2 , 𝑥3 , … 𝑥𝑚
Una Restricción es Satisfactible si existe al menos una asignación que la satisface
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL
A. Introducción
B. OPL para la Programación con
Restricciones (P.R. o CP)
C. Estructura del Modelado en OPL y
Sintaxis
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL - Para P.R. (CP)
Después del contexto teórico de cómo OPL da solución a los problemas de
CP, vamos a ver, a modo general, como es el algoritmo de su resolutor.
Fase de Propagación
de Consistencia
No
Si
FIN
Con Sol
Son Todos
Dominios
Unitarios?
Inconsistencia?
No
Si
Retroceso
Si
Existen
Dominios no
Vacíos?
No
FIN
Sin Sol
Fase de Búsqueda
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL - Para P.R. (CP)
Mapa de Componentes
ILOG CPLEX
ILOG SOLVER
ILOG SCHEDULER
IBM ILOG CPLEX CP
Código
OPL
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL
A. Introducción
B. OPL para la Programación con
Restricciones (P.R. o CP)
C. Estructura del Modelado en OPL
y Sintaxis
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
a)
b)
c)
d)
e)
Datos
Variables
Función de optimización
Restricciones
Procedimiento básicos
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
Datos Tipos básicos:
//Enteros------------------------------------int num1 = 5;
int num2 = num1 * num1 + 5;
int num3 = …;
int inNum << "Inserta un numero";
//Reales-------------------------------------float real = -5.1;
float+ real = 5.1;
//Enumerados---------------------------------enum Color {R, G, B};
Color miColor = G;
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
Datos Tipos Estructurados:
//Rangos-------------------------------------range Intervalo = 1..5;
range Intervalo2 = [2*num1..5*num1];
//Arrays-------------------------------------int
miArray[1..5]
= [2, 4, 7, 8, 3];
Color misCoches[1..5]
= [R, B, B, R, G];
Color misCoches[Intervalo] = [R, B, B, R, G];
int
miArray2[i in 1..5] = i + 4;
//Estructura---------------------------------struct Punto{
float x;
float y;
};
Punto p = <1.3,5.3>;
//Set----------------------------------------{int}
Primos4
= {2, 3, 5, 7};
{Punto} CorteEjes = {<2,0>,<0,7>};
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
Variables de decisión:
//Enteros------------------------------------dvar int entero1 in 0..5;
dvar int arrayEnt[1..10] in 0..5;
dvar int arrayCoch[Intervalo] in 0..5;
//Reales-------------------------------------dvar float varX;
dvar float+ varY;
//Enumerados---------------------------------dvar Color coches[Intervalo];
//Aserciones --------------------------------assert numReynas >= 3;
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
Funciones de optimización:
//Minimizar----------------------------------minimize 10*var1 + 5*var2;
//Maximizar----------------------------------maximize 10*var1 + 5*var2;
Restricciones
Lineales:
//-------------------------------------------10*var1 + 5*var2 <= 5;
-varX
+ 4*varY <= 50;
Restricciones
NO
Lineales:
//-------------------------------------------numero <> 4;
-varX*varY > 10;
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
3. Lenguaje OPL – Estructura y Sintaxis
Procedimientos Básicos:
//Buscar------------------------------------------search{
tryall(j in 1..5 ordered by decreasing j)entero1=j;
};
//Forall------------------------------------------forall(j in 1..5){
reinas[j] <= 8;
reinas[j] >= 1;
};
//Suma-------------------------------------------sum(j in 1..5)reinas[j]=(8*(8+1))/1;
numReinas == sum(j in 1..8)reinas[j];
//alldifferent-----------------------------------allDifferent (array);
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Ejemplo: Coloreado de Mapa
El lenguaje OPL de IBM tiene un amplio repertorio de
instrucciones, funciones etc., pero a modo de introducción
usaremos el primer ejemplo visto en clase.
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Ejemplo: Coloreado de Mapa
Declaración del Dominio
//Especificamos que es Constraint Program---------------using CP;
//Inicializamos un rango--------------------------------range r = 1..4;
//Podemos usar array de string--------------------------string Colores[r]=["Negro", "Anaranjado", "Verde", "Gris"];
//Para poder usar la inicialización del dominio----------execute{} //simplemente actualiza las definiciones
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Ejemplo: Coloreado de Mapa
Declaración de Variables
//Variables de
dvar int gal =
dvar int can =
dvar int pva =
dvar int nav =
dvar int ara =
dvar int cat =
dvar int ast =
dvar int cyl =
dvar int rio =
dvar int mad =
dvar int clm =
dvar int val =
dvar int mur =
dvar int alu =
dvar int ext =
Facultad de Informática
Universidad Complutense de Madrid
decisión---------------------------------in r; //Galicia
in r; //Cantabria
in r; //País Vasco
in r; //Navarra
in r; //Aragón
in r; //Cataluña
in r; //Asturias
in r; //Castilla y León
in r; //La Rioja
in r; //Madrid
in r; //Castilla la Mancha
in r; //Valencia
in r; //Murcia
in r; //Andalucía
in r; //Extremadura
IBM ILOG CPLEX CP Optimization Studio -2
Ejemplo: Coloreado de Mapa
Declaración de Función de Optimización
//En este caso No queremos Optimizar nada-----------------
Restricciones
//Constraints--------------------------------------------subject to{
gal!=ast;
gal!=cyl;
ast!=cyl;
ast!=can;
can!=pva;
can!=cyl;
pva!=nav;
pva!=rio;
nav!=rio;
nav!=ara;
ara!=cat;
ara!=val;
rio!=cyl;
pva!=cyl;
cal!=val;
cyl!=mad;
cyl!=ext;
cyl!=clm;
ext!=clm;
ara!=clm;
mad!=clm;
clm!=val;
ext!=alu;
clm!=mur;
alu!=mur;
mur!=val;
rio!=ara;
ara!=cyl;
}
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Ejemplo: Coloreado de Mapa
Mostrar Resultado
//Mostrar-----------------------------------------------execute {
writeln("\tGalicia
: ", Colores[gal]);
writeln("\tCantabria
: ", Colores[can]);
writeln("\tPaís Vasco
: ", Colores[pva]);
writeln("\tNavarra
: ", Colores[nav]);
writeln("\tAragón
: ", Colores[ara]);
writeln("\tCataluña
: ", Colores[cat]);
writeln("\tAsturias
: ", Colores[ast]);
writeln("\tCastilla y León
: ", Colores[cyl]);
writeln("\tLa Rioja
: ", Colores[rio]);
writeln("\tMadrid
: ", Colores[mad]);
writeln("\tCastilla la Mancha: ", Colores[clm]);
writeln("\tValencia
: ", Colores[val]);
writeln("\tMurcia
: ", Colores[mur]);
writeln("\tAndalucia
: ", Colores[alu]);
writeln("\tExtremadura
: ", Colores[ext]);
}
Facultad de Informática
IBM ILOG CPLEX CP Optimization Studio -2
Universidad Complutense de Madrid
Ejemplo: Coloreado de Mapa
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Uso del Lenguaje
•El principal objetivo del uso de OPL es que el programador sea
capaz de modelar los problemas de optimización más comunes
que se encuentran en entornos industriales.
•OPL permite resolver eficientemente una extensa gama de
problemas scheduling (planificación):
-problemas de construcción,
-proyectos con consideraciones presupuestarias,
-planificación de carga de barcos
-proyectos de desarrollos de software a gran escala, etc.
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Uso del Lenguaje
VENTAJAS DE USO
• El Lenguaje OPL es un lenguaje fácil de aprender y a la vez
potente.
• Representación muy cercana a la formulación matemática del
problema a resolver.
• Se reduce el tiempo de desarrollo sin sacrificar eficiencia.
• Compatibilidad de las bibliotecas de componentes.
• Simplicidad: Resuelve problemas de tamaño o dificultad
prácticamente ilimitados.
• Agilidad : IBM ILOG CPLEX es compatible con una gran
variedad de sistemas informáticos.
Índice
1.
2.
3.
4.
5.
6.
Introducción
Historia y creación
Lenguaje OPL
Ejemplo
Uso del lenguaje
Situación actual
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2
Situación Actual
•Ampliamente usado en la actualidad.
•Conexión a Bases de datos, servidores, librerías para
C++, C y Java.
• Cuenta con una plataforma de programación,
llamado IBM ILOG CPLEX Optimizer Studio que
permite disponer de un sistema de soporte para la
toma de decisiones mediante análisis para mejorar la
eficacia, reducir costes y aumentar la rentabilidad.
•Última versión desarrollada: 12.4.
Facultad de Informática
Universidad Complutense de Madrid
IBM ILOG CPLEX CP Optimization Studio -2