En prenant l'intégrale d'une fonction en CPLEX

0

La question

J'essaie de modèle un modèle MIP dans CPLEX. J'ai une fonction qui inclut des variables de décision et j'ai besoin de prendre l'intégrale de cette fonction pour calculer sa valeur attendue. Est-il possible de prendre de l'intégrale d'une fonction en CPLEX? Merci!!!!

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

La meilleure réponse

0

avec piecewise linear vous peut approximer toute fonction et de compter sur la Programmation Mathématique.

Voir Interpoler une fonction quelconque dans trucs et Astuces dans la BPO

// 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;

Avec la Programmation par contraintes à l'intérieur de CPLEX vous pouvez utiliser n'importe quelle fonction (même non linéaire) et même blackbox fonction.

Exemple de non linéaire de la fonction:

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

Dans d'autres langues

Cette page est dans d'autres langues

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