Tomando la integral de una función en CPLEX

0

Pregunta

Yo trate de un modelo MIP en el modelo de CPLEX. Tengo una función que incluye variables de decisión y necesito tomar parte integral de esta función para calcular su valor esperado. Es allí cualquier manera de tomar la integral de una función en CPLEX? Gracias!

cplex opl optimization python
2021-11-18 17:27:24
1

Mejor respuesta

0

con un modelo lineal por tramos puede aproximar cualquier función y dependen de la Programación Matemática.

Ver Interpolar cualquier función en Consejos y Trucos en OPL

// linearization of f(x)=1/x through a piecewise linear function

int sampleSize=10000;
float s=1;
float e=10;
float x[i in 0..sampleSize]=s+(e-s)*i/sampleSize;
int nbSegments=5;
float x2[i in 0..nbSegments]=(s)+(e-s)*i/nbSegments;
float y2[i in 0..nbSegments]=1/x2[i];  // y=f(x)
float firstSlope=0;
 float lastSlope=0;
 
 tuple breakpoint // y=f(x)
 {
  key float x;
  float y;
 }
 
 sorted { breakpoint } breakpoints={<x2[i],y2[i]> | i in 0..nbSegments};
 
 float slopesBeforeBreakpoint[b in breakpoints]=
 (b.x==first(breakpoints).x)
 ?firstSlope
 :(b.y-prev(breakpoints,b).y)/(b.x-prev(breakpoints,b).x);
 
 pwlFunction f=piecewise(b in breakpoints)
 { slopesBeforeBreakpoint[b]->b.x; lastSlope } (first(breakpoints).x, first(breakpoints).y);
 
 assert forall(b in breakpoints) abs(f(b.x)-b.y)<=0.001;

Con la Programación con Restricciones dentro de CPLEX se puede utilizar cualquier función (aunque no lineal) e incluso en la caja negra de la función.

Ejemplo de no función lineal:

using CP;

// CPOptimizer allows all kind of non linearities

int nbKids=300;
float costBus40=500;
float costBus30=400;
 
dvar int+ nbBus40;
dvar int+ nbBus30;
 
// Non linear objective (exponential) 
minimize
 costBus40*exp(nbBus40) +exp(nbBus30)*costBus30;
 
subject to
{
 40*nbBus40+nbBus30*30>=nbKids;
} 
2021-11-19 08:26:01

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................