cplex

How to calculate the square root of a variable in execute block in cplex?


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

Solution

  • Let 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