首页 > 解决方案 > 在 JAVA 中为数学模型添加非线性约束

问题描述

我正在尝试使用 CPLEX 库在 JAVA 中编写数学模型,除了一个非线性约束,其余约束和目标函数都是线性表达式。在编写目标和线性约束时,我使用了代码“cplex.linearNumExpr()”,但在编写非线性约束时,我编写了“cplex.quadNumExpr();”。代码。我的代码中没有任何语法错误,但是当我运行它时,我遇到的错误是指非凸的非线性约束。有人知道我该如何解决吗?有没有办法在不线性化约束的情况下解决它?相关约束如下:

IloQuadNumExpr[][] seventh_cons= new IloQuadNumExpr[dataRead.N][dataRead.N];

for (int i = 0; i < dataRead.N; i++) {
    for (int j = 0; j < dataRead.N; j++) {
        if (j!=i) {
            seventh_cons[i][j] = cplex.quadNumExpr();
            for (int k = 0; k < dataRead.N; k++) {
                if (k!=i) {
                    seventh_cons[i][j].addTerm(dataRead.A[i][k]/dataRead.cust_distance[i][k], y[k], dem[i][j]);
                }                           
            }
            seventh_cons[i][j].addTerm(-dataRead.q[i]/dataRead.cust_distance[i][j], y[j],quaDy[j]);
            cplex.addEq(seventh_cons[i][j], 0,"c7_" + i + "_"+ j);
        }
    }
}

标签: javamathematical-optimizationcplexnonlinear-optimizationilog

解决方案


推荐阅读