// 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
}
没问题