dense_cs.cs


/ * 2023年版权,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;类dense_cs{保护静态bool dense_optimize (GRBEnv env, int, int关口,双c[], / /目标函数的线性部分双[,]Q / /目标函数的二次部分双[,],/ /约束矩阵char[], / /约束感官双[],/ / rhs矢量双[]磅,/ /变量下界双[]乌兰巴托,/ /变量上界char [] vtype, / /变量类型(连续、二进制等)双[]解决方案){bool成功= false;尝试{GRBModel模型= new GRBModel (env);/ /向模型中添加变量GRBVar [] var =模型。vtype AddVars(磅,乌兰巴托,零,零);/ /填充矩阵(int i = 0;我<行;我+ +){GRBLinExpr expr = new GRBLinExpr (); for (int j = 0; j < cols; j++) if (A[i,j] != 0) expr.AddTerm(A[i,j], vars[j]); // Note: '+=' would be much slower 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]); // Note: '+=' would be much slower for (int j = 0; j < cols; j++) if (c[j] != 0) obj.AddTerm(c[j], vars[j]); // Note: '+=' would be much slower model.SetObjective(obj); } // Solve model model.Optimize(); // Extract solution if (model.Status == GRB.Status.OPTIMAL) { success = true; for (int j = 0; j < cols; j++) solution[j] = vars[j].X; } model.Dispose(); } catch (GRBException e) { Console.WriteLine("Error code: " + e.ErrorCode + ". " + e.Message); } 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}; bool success; double[] sol = new double[3]; success = dense_optimize(env, 2, 3, c, Q, A, sense, rhs, lb, null, null, sol); if (success) { Console.WriteLine("x: " + sol[0] + ", y: " + sol[1] + ", z: " + sol[2]); } // Dispose of environment env.Dispose(); } catch (GRBException e) { Console.WriteLine("Error code: " + e.ErrorCode + ". " + e.Message); } } }