你好,我们在OPL CPLEX程序中遇到一个LP-Model问题.我们的.mod文件显示了索引值k和t不存在的错误.&l


// Indices 
int K =  ...;                // Produktgruppe
int T = ...;                 // Periode
// Parameter
float a[1..K] = ...;        // Produktionskoeffizient für Produktgruppe k für die personelle Kapazität
float b[1..K] = ...;        // Produktionskoeffizient für Produktgruppe k für die technische Kapazität
float d[1..K] [1..T] = ...; // Nachfrage nach Produktgruppe p zum Zeitpunkt t
float l[1..K] = ...;        // Lagerkostensatz für Produktgruppe k
float u[1..T] = ...;        // Überstundenkostensatz in Periode t
int Cmax[1..T] = ...;       // Maximale technische Kapazität in Periode t
int Nmax[1..T] = ...;       // Maximale personelle Kapazität in Periode t
int Umax[1..T] = ...;       // Maximale Übersunden in Periode t 

// Entscheidungsvariable
dvar float+ X[1..K] [1..T]; // Produktionsmenge von Produktgruppe k in Periode t
dvar float+ L[1..K] [1..T]; // Lagermenge von Produktgruppe k in Periode t
dvar float+ U[1..T];        // Genutze Überstunden in Periode t
// Zielfunktion
minimize sum (t in 1..T, k in 1..K) (l[k]*L[k][t]) + sum(t in 1..T) (u[t]*U[t]);

// Nebenbedingungen    
subject to {

forall(t in 1..T, k in 1..K)   error: Aggregation operator FORALL not available for int.
//ctTechnische Kapazitaetsrestriktion:
sum(k in 1..K) (b[k]*X[k][t] <= Cmax[t]);    error: Name t does not exist

forall (k in 1..K)                 
//ctPersonelle Kapazitaetsrestriktion:
a[k]*X[k][t] - U[t] <= Nmax[t];          error: Name t does not exist

forall (t in 1..T)
//ctmaximale Ueberstundenrestriktion:
U[t] <= Umax[t];

forall (t in 1..T) (k in 1..K);
//ctProduktionsmengen:
X[k][t] => 0;                      error: Name k does not exist

forall (t in 1..T)(k in 1..K);
// Lagermengen:
L[k][t] => 0;                      error: Name k does not exist

forall (t in 1..T) (k in 1..K);
// Ueberstundenrestriktion:
U[t] => 0;                          error: Name t does not exist
}


我们在开始的右边标记了我们的参数,我们知道在参数中没有必要定义t和k的索引值。但是我们在LP-Model的限制区域得到了相同的错误,告诉我们它们不存在。如果有人发现问题在哪里,请给我们你的想法/解决方案。

亲切的问候

// Indices 
int K =  2;                // Produktgruppe
int T = 3;                 // Periode
// Parameter
float a[1..K] = [1,2];        // Produktionskoeffizient für Produktgruppe k für die personelle Kapazität
float b[1..K] =[1,2];         // Produktionskoeffizient für Produktgruppe k für die technische Kapazität
float d[i in 1..K] [j in 1..T] = i*j; // Nachfrage nach Produktgruppe p zum Zeitpunkt t
float l[1..K] = [1,2]; ;        // Lagerkostensatz für Produktgruppe k
float u[1..T] = [1,2,3]; ;        // Überstundenkostensatz in Periode t
int Cmax[1..T] = [1,2,3];;       // Maximale technische Kapazität in Periode t
int Nmax[1..T] = [1,2,3];       // Maximale personelle Kapazität in Periode t
int Umax[1..T] = [1,2,3];       // Maximale Übersunden in Periode t 

// Entscheidungsvariable
dvar float+ X[1..K] [1..T]; // Produktionsmenge von Produktgruppe k in Periode t
dvar float+ L[1..K] [1..T]; // Lagermenge von Produktgruppe k in Periode t
dvar float+ U[1..T];        // Genutze Überstunden in Periode t
// Zielfunktion
minimize sum (t in 1..T, k in 1..K) (l[k]*L[k][t]) + sum(t in 1..T) (u[t]*U[t]);

// Nebenbedingungen    
subject to {

forall(t in 1..T)   //error: Aggregation operator FORALL not available for int.
//ctTechnische Kapazitaetsrestriktion:
sum(k in 1..K) b[k]*X[k][t] <= Cmax[t];    //error: Name t does not exist

forall (t in 1..T,k in 1..K)                 
//ctPersonelle Kapazitaetsrestriktion:
a[k]*X[k][t] - U[t] <= Nmax[t];          //error: Name t does not exist

forall (t in 1..T)
//ctmaximale Ueberstundenrestriktion:
U[t] <= Umax[t];

forall (t in 1..T,k in 1..K)
//ctProduktionsmengen:
X[k][t] >= 0;                      //error: Name k does not exist

forall (t in 1..T,k in 1..K)
// Lagermengen:
L[k][t] >=0;                      //error: Name k does not exist

forall (t in 1..T,k in 1..K)
// Ueberstundenrestriktion:
U[t] >= 0;                         // error: Name t does not exist
}

没问题

相关内容

  • 没有找到相关文章