Está en la página 1de 34

INTRODUCCIN A C++/CPLEX

Kevin Aldair Castillo Iturrieta

C++

Lo Bsico
Variables
Operadores Lgicos Estructuras de Control

Variables
Int x; x=4; cout << El valor de x : << x << endl;
float numero; cin >> numero; //toma un nmero del teclado y lo guarda en nmero

bool cerouno=0;

Operadores Lgicos
a == b
a != b a >= b ; a > b

a <= b ; a < b
!a ( NOT ) TRUE && FALSE ( AND )

TRUE || FALSE ( OR )

Estructuras de Control

IF & ELSE
Int a=4; Int b=10; if ( a > b ) { cout << " a es mayor a b " << endl; } else { cout << " a no es mayor a b " << endl; }

FOR
for (int i=0; i<10;++i) { cout << i << endl; }

WHILE
float a; bool ok=0; while (!ok) { cout << "Escribe un numero entre 0 y 20 : "; cin >> a; ok = ((a>=0) && (a<=20)); if (!ok) cout << "ERROR - "; } cout << "listo!" ;

C++/CPLEX

Estructura Bsica
Environment

Permite manejar todas las entradas y salidas, asignacin de memorias, y otros servicios para todos los objetos Model Qu es el modelo?

Estructura del Programa


#include <ilcplex/ilocplex.h> ILOSTLBEGIN
void main() { IloEnv env; try { IloModel model(env); // ... // gather data, create model, // solve model, query solution, change model // ... } catch (IloException& e) { cerr << e << endl; } env.end(); // free all memory system(pause); }

Tipos de Datos
Parmetros
IloNum;

IloInt;
IloBool; IloNumArray;

IloFloatArray;
IloIntArray; IloBoolArray;

IloNumArray cParam (env, size);

Tipos de Variables
Variables
IloNumVar

IloFloatVar
IloIntVar IloBoolVar

Examples
IloNumVar x(env, lb, ub, type, name); IloNumVarArray xArray(env, size, lb, ub, type);

Tipos de Variables
IloNumVar x(env, 0, IloInfinity, ILOFLOAT); IloIntVar y(env, 10, 25,"varY"); IloBoolVar z(env); IloFloatVarArray A1(env, 20, 0, 9999); IloNumVarArray A2(env, 10, 1, x, ILOFLOAT); IloNumVarArray A3(env, 3); A3[0] = x;

Restricciones y Funcin Objetivo


Sumatorias ( )
IloNumVarArray x(env,sizeX,0,IloInfinity); IloExpr sum = IloSum(x);
Devuelve la suma de todo el arreglo!

Productos Escalares ( ) IloNumVarArray x(env,sizeX,0,IloInfinity); IloNumArray c(env,sizeX); for (IloInt i=0; i<sizeX; i++) c[i]=i; IloExpr sum = IloScalProd(c,x);

Restricciones y Funcin Objetivo


Restricciones Metdo 1 IloRange c(env,2,IloSum(x),4); model.add(c);
Metdo 2

model.add(2 <= IloSum(x) <= 4);

Restricciones y Funcin Objetivo


Funcin Objetivo Metdo 1 model.add(z == IloScalProd( c, x)); model.add(IloMinimize(env, z));
Metdo 2

model.add(IloMinimize(env,IloScalProd(c,x)));

Optimizando
IloCplex cplex ( env ); cplex.setOut(env.getNullStream()); cplex.extract(model); cplex.exportModel ( salida.lp" ); env.out() << "Variables binarias: " << cplex.getNbinVars() << endl; env.out() << "Variables Enteras: " << cplex.getNintVars() << endl; env.out() << "Filas - Restricciones: " << cplex.getNrows() << endl; env.out() << "Columnas - Variables: " << cplex.getNcols() << endl; if ( !cplex.solve() ) { env.error() << "No se pudo resolver :-(" << endl; throw ( -1 ); } env.out() << "Es ptimo ? = " << cplex.getStatus() << endl; env.out() << "Valor F.O = " << cplex.getObjValue() << endl; env.out() << Tiempo de Resolucin = " << env.getTime() << endl; } catch (IloException& e) { cerr << "Error Cplex: " << e << endl; } catch (...) { cerr << "Error Cpp" << endl; } env.end(); system(pause);

Ms
Obtener Valores de X

for (int i=0;i<x.getSize();++i) { cout << cplex.getValue(x[i]) << endl;} IloNumArray temp(env, x.getSize()); cplex.getValues( temp, x); cout << "x = "; cout << temp << endl;
Como crear una matriz

IloArray <IloNumArray> matriz(env, filas); for (int i=0; i<filas; ++i) { matriz[i] = IloNumArray(env, columnas); }

IloArray <IloIntVarArray> matriz(env, filas); for (int i=0; i<filas; ++i) { matriz[i] = IloIntVarArray(env, columnas); }

CONFIGURACIN DE ARRANQUE

Configuracin de Arranque
1. Crear un nuevo Proyecto (Aplicacin de Consola Win32)

Configuracin de Arranque
1.1. Marcar como proyecto vaco en opciones adicionales

Configuracin de Arranque
2. En proyecto agregar nuevo elemento (Archivo C++ (.cpp))

Configuracin de Arranque
3. Ir a propiedades de proyecto y elegir en configuracin Todas las config.

Configuracin de Arranque
4. Ir a propiedades de configuracin/(C/C++)/General/DirectoriosDeInclusinAdicionales y agregar las siguientes rutas:

Configuracin de Arranque
5. Ir a (C/C++)/Preprocesador/DefinicionesdePreProcesador y agregar
IL_STD

Configuracin de Arranque
6. Ir a (C/C++)/GeneracindeCodigo/BibliotecaEnTiempoDeEjecucin y
seleccionar Multiproceso (/MT)

Configuracin de Arranque
7. Ir a Vinculador/Entrada/Dependenciasadicionales y agregar las siguientes
rutas:

Configuracin de Arranque
8. Compilar en modo release 9. Ejecturar sin Depurar

EJEMPLO

Problema
Una empresa manufacturera ha discontinuado la produccin de cierta lnea de productos no provechosa. Esto cre un exceso considerable en la capacidad de produccin. El gerente est considerando dedicar esta capacidad en exceso a uno o ms de tres productos; llammoslo productos 1, 2 y 3. La capacidad disponible de las mquinas, que podra limitar la produccin y los requerimientos por unidad de producto, se resume como sigue:
Fresadora Torno Rectificadora Tipo Maquina Tiempo Disponible (HM/Semana) 500 350 150

Tipo Maquina Fresadora Torno Rectificadora

Coef. de Productividad (HM/Unidad) Producto 1 Producto 2 9 3 5 4 3 0

Producto 3 5 0 2

Problema
El departamento de ventas indica que el potencial de ventas para los productos 1 y 2 es mayor que la tasa de produccin mxima y que el potencial de ventas para el producto 3 es de 20 unidades por semana. La utilidad unitaria sera de $30, $12 y $ 15 respectivamente, para los productos 1, 2 y 3. Modelo Optimizacin Lineal

Max Ci X i
i

s.t

a
j

ij

X j bi i N

X 3 20 X i 0 i N

Solucin