gc_pwl_cs.cs


/ * 2023年版权,Gurobi优狗万app足彩化,LLC这个例子中制定和解决以下简单的模型PWL约束:最大化和c [j] * x [j]受总和(i, j) * x [j] < i = 0 = 0,,…m - 1和y [j] < = 3 y [j] = pwl (x [j]), j = 0,…,n - 1 x [j]自由,y [j] > = 0, j = 0,…,n - 1 pwl (x) = 0,如果x = 0 = 1 + x | |,如果x = 0注1。pwl总和(x [j]) < = b是绑定x向量和支持稀疏的向量。b = 3意味着最多两个x [j]可以非零,如果两个,然后x [j] < = 1和2。pwl (x)跳从1到0,从0到1,如果x从- 0到0,然后积极0,所以我们需要三个点x = 0。x无限边界两边,定义了两个点(1,2)和(0,1)可以扩展x无限。总体我们可以用5分(1、2),(0,1),(0,0)、(0,1)和(1、2)来定义y = pwl (x) * /使用系统;使用Gurobi;公开课gc_pwl_cs{公共静态空Main(){尝试{int n = 5;int m = 5; double[] c = new double[] { 0.5, 0.8, 0.5, 0.1, -1 }; double[,] A = new double[,] { {0, 0, 0, 1, -1}, {0, 0, 1, 1, -1}, {1, 1, 0, 0, -1}, {1, 0, 1, 0, -1}, {1, 0, 0, 1, -1} }; double[] xpts = new double[] {-1, 0, 0, 0, 1}; double[] ypts = new double[] {2, 1, 0, 1, 2}; // Env and model GRBEnv env = new GRBEnv(); GRBModel model = new GRBModel(env); model.ModelName = "gc_pwl_cs"; // Add variables, set bounds and obj coefficients GRBVar[] x = model.AddVars(n, GRB.CONTINUOUS); for (int i = 0; i < n; i++) { x[i].LB = -GRB.INFINITY; x[i].Obj = c[i]; } GRBVar[] y = model.AddVars(n, GRB.CONTINUOUS); // Set objective to maximize model.ModelSense = GRB.MAXIMIZE; // Add linear constraints for (int i = 0; i < m; i++) { GRBLinExpr le = 0.0; for (int j = 0; j < n; j++) { le.AddTerm(A[i,j], x[j]); } model.AddConstr(le, GRB.LESS_EQUAL, 0, "cx" + i); } GRBLinExpr le1 = 0.0; for (int j = 0; j < n; j++) { le1.AddTerm(1.0, y[j]); } model.AddConstr(le1, GRB.LESS_EQUAL, 3, "cy"); // Add piecewise constraints for (int j = 0; j < n; j++) { model.AddGenConstrPWL(x[j], y[j], xpts, ypts, "pwl" + j); } // Optimize model model.Optimize(); for (int j = 0; j < n; j++) { Console.WriteLine("x[" + j + "] = " + x[j].X); } Console.WriteLine("Obj: " + model.ObjVal); // Dispose of model and environment model.Dispose(); env.Dispose(); } catch (GRBException e) { Console.WriteLine("Error code: " + e.ErrorCode + ". " + e.Message); } } }