Reputation: 1
This is a part of my Cplex code. I want to code the constraint below but it seems nonlinear constraints and can not run in CPlex opl. Can anyone help me deal with it? Here is the constraint
...
int Z_val = ...;
int T_val = 10;
int I_val = ...;
int J_val = ...;
float alpha = ...; // The average loading rate of delivery trucks;
range Z = 1 .. Z_val;// Number of vessels
range T = 1 .. T_val; // Number of time intervals
range I = 1 .. I_val; // Number of gate lanes
range J = 1 .. J_val; // Number of yard blocks
float beta_zj[Z][J] = ...;
// Define sets
{int} Z_j[J];
// Objective function or constraints go here
execute {
// Iterate over j and z to update Z sets
for (var j in J) {
for (var z in Z) {
if (beta_zj[z][j] > 0) {
Z_j[j].add(z); // Add z to the set Z_j[j]
}
}
}
// Print the result (optional)
for (var j in J) {
writeln("Z_j[", j, "] = ", Z_j[j]);
}
}
// Derived variables
dvar int+ lambda_zt_g[Z][T];// Number of trucks related to vessel z arriving at terminal gate at interval t
dvar int+ lambda_it_g[I][T];// Number of trucks arriving at gate lane i at interval t
dvar int+ lambda_t_y[T];// Number of export containers arriving at yard at interval t
dvar int+ lambda_jt_y[J][T];// Number of export containers arriving at block j at interval t
…..
….
subject to
{
forall ( j in J, t in T ){//(15)
lambda_jt_y[j][t] == lambda_t_y[t] * alpha * sum ( z in Z_j[j] )
(beta_zj[z][j] * lambda_zt_g[z][t] / sum ( i in I ) lambda_it_g[i][t]);
}
code nonlinear constraints
Upvotes: 0
Views: 114
Reputation: 10062
Since all your decision variables are integer you could use constraint programming in CPLEX.
The following model works:
using CP;
int Z_val = 10;
int T_val = 10;
int I_val = 10;
int J_val = 2;
float alpha = 0.5; // The average loading rate of delivery trucks;
range Z = 1 .. Z_val;// Number of vessels
range T = 1 .. T_val; // Number of time intervals
range I = 1 .. I_val; // Number of gate lanes
range J = 1 .. J_val; // Number of yard blocks
float beta_zj[i in Z][j in J] = i*j;
// Define sets
{int} Z_j[J];
// Objective function or constraints go here
execute {
// Iterate over j and z to update Z sets
for (var j in J) {
for (var z in Z) {
if (beta_zj[z][j] > 0) {
Z_j[j].add(z); // Add z to the set Z_j[j]
}
}
}
// Print the result (optional)
for (var j in J) {
writeln("Z_j[", j, "] = ", Z_j[j]);
}
}
// Derived variables
dvar int+ lambda_zt_g[Z][T];// Number of trucks related to vessel z arriving at terminal gate at interval t
dvar int+ lambda_it_g[I][T];// Number of trucks arriving at gate lane i at interval t
dvar int+ lambda_t_y[T];// Number of export containers arriving at yard at interval t
dvar int+ lambda_jt_y[J][T];// Number of export containers arriving at block j at interval t
subject to
{
forall ( j in J, t in T ){//(15)
lambda_jt_y[j][t] == lambda_t_y[t] * alpha * sum ( z in Z_j[j] )
(beta_zj[z][j] * lambda_zt_g[z][t]/ sum ( i in I ) lambda_it_g[i][t]);
}
}
Upvotes: 0