I want to solve a problem in cplex.In this problem ,I want to calculate delta , mdelta and Tt first (All the data are available). Then I want to solve the minimization problem. But when I am writing square root of delta as mdelta , I am getting error. How to solve this issue.
int nd=9;
range rm = 1..nd;
int njun=6;
range jm = 1..njun;
int sn=1;
int dn=6;
int fd[rm]=...;
int td[rm]=...;
float vf[rm]=...;
float d[rm]=...;
float kj[rm]=...;
float y[rm]=...;
dvar boolean x[rm];
float Tt[rm];
delta [rm] ;
mdelta [rm];
minimize sum(r in rm) (x[r] * Tt[r]);
// Constraints
subject to {
forall(r in rm) {
delta[r] == vf[r] * vf[r] - (4 * vf[r] * y[r] / kj[r]);
mdelta[r] == sqrt(delta[r]);
Tt[r] == (vf[r] - mdelta[r]) / ((2 * vf[r] * y[r]) / (d[r] * kj[r]));
sum(r in rm: fd[r] == sn) x[r] - sum(r in rm: td[r] == sn) x[r] == 1;
sum(r in rm: fd[r] == dn) x[r] - sum(r in rm: td[r] == dn) x[r] == -1;
forall(n in jm: n != sn && n != dn) {
sum(r in rm: fd[r] == n) x[r] - sum(r in rm: td[r] == n) x[r] == 0;
}
}
}
I want to solve a problem in cplex.In this problem ,I want to calculate delta , mdelta and Tt first (All the data are available). Then I want to solve the minimization problem. But when I am writing square root of delta as mdelta , I am getting error. How to solve this issue.
int nd=9;
range rm = 1..nd;
int njun=6;
range jm = 1..njun;
int sn=1;
int dn=6;
int fd[rm]=...;
int td[rm]=...;
float vf[rm]=...;
float d[rm]=...;
float kj[rm]=...;
float y[rm]=...;
dvar boolean x[rm];
float Tt[rm];
delta [rm] ;
mdelta [rm];
minimize sum(r in rm) (x[r] * Tt[r]);
// Constraints
subject to {
forall(r in rm) {
delta[r] == vf[r] * vf[r] - (4 * vf[r] * y[r] / kj[r]);
mdelta[r] == sqrt(delta[r]);
Tt[r] == (vf[r] - mdelta[r]) / ((2 * vf[r] * y[r]) / (d[r] * kj[r]));
sum(r in rm: fd[r] == sn) x[r] - sum(r in rm: td[r] == sn) x[r] == 1;
sum(r in rm: fd[r] == dn) x[r] - sum(r in rm: td[r] == dn) x[r] == -1;
forall(n in jm: n != sn && n != dn) {
sum(r in rm: fd[r] == n) x[r] - sum(r in rm: td[r] == n) x[r] == 0;
}
}
}
Share
Improve this question
asked Jan 19 at 7:48
SUBHADARSHINI PANDASUBHADARSHINI PANDA
111 bronze badge
1 Answer
Reset to default 0Let me share 3 ways of computing square roots in OPL:
float r=100;
dvar float mdelta;
subject to
{
mdelta==r;
}
float v1=sqrt(mdelta);
float v2;
float v3;
execute
{
v2=Opl.sqrt(mdelta);
v3=Math.sqrt(mdelta);
writeln(v1," ",v2," ",v3);
}
gives
10 10 10