最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

programmeradmin3浏览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;
    }     
}
}

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
Add a comment  | 

1 Answer 1

Reset to default 0

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
发布评论

评论列表(0)

  1. 暂无评论