piecewise_cs.cs


/ * 2023年版权,Gurobi优狗万app足彩化,LLC * / / *这个例子考虑分离后,凸问题:减少f (x) - y + g (z)受到x + 2 y + 3 z < = 4 x + y > = 1 x, y, z < = 1 f (u) = exp (- u)和g (u) = 2 ^ 2 - 4 u,所有真正的u。制定和解决简单的LP模型近似与分段线性函数f和g。然后将模型转换成MIP否定近似为f,对应于一个非凸分段线性函数,解决了一遍。* /使用系统;使用Gurobi;类piecewise_cs{私有静态双f(双u){返回Math.Exp (- u);(双u){}私有静态双g返回2 *你* u - 4 *;}静态void Main(){尝试{/ /创建环境GRBEnv env = new GRBEnv ();/ /创建一个新的模型GRBModel模型= new GRBModel (env);/ /创建变量两磅= 0.0,乌兰巴托= 1.0;GRBVar x =模型。AddVar(lb, ub, 0.0, GRB.CONTINUOUS, "x"); GRBVar y = model.AddVar(lb, ub, 0.0, GRB.CONTINUOUS, "y"); GRBVar z = model.AddVar(lb, ub, 0.0, GRB.CONTINUOUS, "z"); // Set objective for y model.SetObjective(-y); // Add piecewise-linear objective functions for x and z int npts = 101; double[] ptu = new double[npts]; double[] ptf = new double[npts]; double[] ptg = new double[npts]; for (int i = 0; i < npts; i++) { ptu[i] = lb + (ub - lb) * i / (npts - 1); ptf[i] = f(ptu[i]); ptg[i] = g(ptu[i]); } model.SetPWLObj(x, ptu, ptf); model.SetPWLObj(z, ptu, ptg); // Add constraint: x + 2 y + 3 z <= 4 model.AddConstr(x + 2 * y + 3 * z <= 4.0, "c0"); // Add constraint: x + y >= 1 model.AddConstr(x + y >= 1.0, "c1"); // Optimize model as an LP model.Optimize(); Console.WriteLine("IsMIP: " + model.IsMIP); Console.WriteLine(x.VarName + " " + x.X); Console.WriteLine(y.VarName + " " + y.X); Console.WriteLine(z.VarName + " " + z.X); Console.WriteLine("Obj: " + model.ObjVal); Console.WriteLine(); // Negate piecewise-linear objective function for x for (int i = 0; i < npts; i++) { ptf[i] = -ptf[i]; } model.SetPWLObj(x, ptu, ptf); // Optimize model as a MIP model.Optimize(); Console.WriteLine("IsMIP: " + model.IsMIP); Console.WriteLine(x.VarName + " " + x.X); Console.WriteLine(y.VarName + " " + y.X); Console.WriteLine(z.VarName + " " + z.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); } } }