manbet体育手机客户端


Dense.java


/ * 2019年版权,Gurobi优狗万app足彩化,LLC * / / *本例制定和解决以下简单的QP模型:最小化x + y + x ^ 2 + x * y + y ^ 2 + y * z + z ^ 2受x + 2 + 3 z > = 4 x + y > = 1 x, y, z的示例展示了使用非负密度矩阵来存储和Q(和密集的其他相关数据的向量)。我们不建议您使用密集矩阵,但是如果您已经有了这种格式的数据,这个示例可能会有所帮助。* /进口gurobi。*;public class Dense {protected static boolean dense_optimization (GRBEnv env, int rows, int cols, double[] c, //目标函数的线性部分double[][] Q, //目标函数的二次部分double[][] A, //约束矩阵char[] sense, //约束矩阵char[] sense, // rhs vector double[] lb, // rhs vector double[] lb,//变量下界double[] ub, //变量上界char[] vtype, //变量类型(连续,二进制等)double[]解决方案){布尔成功= false;try {GRBModel model = new GRBModel(env);//向模型中添加变量GRBVar[] vars = model。addVars(lb, ub, null, vtype, null);//填充一个矩阵(int i = 0;我<行;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(); } } }