Dense.java


/*版权2023,Gurobi Opt狗万app足彩imization, LLC */ /*本例提出并解决了以下简单的QP模型:最小化x + y + x^2 + x*y + y^2 + y*z + z^2,服从x + 2 y + 3 z >= 4 x + y >= 1 x, y, z非负示例说明了使用密集矩阵存储A和Q(以及其他相关数据的密集向量)。我们不建议您使用密集矩阵,但是如果您已经有了这种格式的数据,那么这个示例可能会有所帮助。*/进口gurobi.*;public class Dense{受保护的静态boolean dense_optimize(GRBEnv env, int rows, int cols, double[] c, //目标函数线性部分double[][] Q, //目标函数二次部分double[][] A, //约束矩阵char[]意义,//约束意义double[] rhs, // rhs向量double[] lb, //变量下界double[] ub, //变量上界char[] vtype, //变量类型(连续、二进制等)双[]解){boolean success = false;try {GRBModel模型=新的GRBModel(env);//在模型中添加变量GRBVar[] vars = model。addVars(lb, ub, null, vtype, null);//填充一个矩阵(int i = 0;I < rows;i++) {GRBLinExpr expr = new GRBLinExpr();For (int j = 0; j < cols; j++) if (A[i][j] != 0) expr.addTerm(A[i][j], vars[j]); model.addConstr(expr, sense[i], rhs[i], ""); } // Populate objective GRBQuadExpr obj = new GRBQuadExpr(); if (Q != null) { for (int i = 0; i < cols; i++) for (int j = 0; j < cols; j++) if (Q[i][j] != 0) obj.addTerm(Q[i][j], vars[i], vars[j]); for (int j = 0; j < cols; j++) if (c[j] != 0) obj.addTerm(c[j], vars[j]); model.setObjective(obj); } // Solve model model.optimize(); // Extract solution if (model.get(GRB.IntAttr.Status) == GRB.Status.OPTIMAL) { success = true; for (int j = 0; j < cols; j++) solution[j] = vars[j].get(GRB.DoubleAttr.X); } model.dispose(); } catch (GRBException e) { System.out.println("Error code: " + e.getErrorCode() + ". " + e.getMessage()); e.printStackTrace(); } return success; } public static void main(String[] args) { try { GRBEnv env = new GRBEnv(); double c[] = new double[] {1, 1, 0}; double Q[][] = new double[][] {{1, 1, 0}, {0, 1, 1}, {0, 0, 1}}; double A[][] = new double[][] {{1, 2, 3}, {1, 1, 0}}; char sense[] = new char[] {'>', '>'}; double rhs[] = new double[] {4, 1}; double lb[] = new double[] {0, 0, 0}; boolean success; double sol[] = new double[3]; success = dense_optimize(env, 2, 3, c, Q, A, sense, rhs, lb, null, null, sol); if (success) { System.out.println("x: " + sol[0] + ", y: " + sol[1] + ", z: " + sol[2]); } // Dispose of environment env.dispose(); } catch (GRBException e) { System.out.println("Error code: " + e.getErrorCode() + ". " + e.getMessage()); e.printStackTrace(); } } }