分段_vb.vb.


分段_vb.vb.


'版权所有2021,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 u ^ 2  -  4 u,对于所有真实的u。它通过具有分段线函数的近似f和v来制定和解决简单的LP模型。然后,它通过否定对应于非凸分段 - 线性函数的F的近似来将模型'转换为MIP,并再次解决它。导入系统导入Gurobi类分段_VB共享功能F(US Dibul)作为双返回Math.exp(-U)结束功能共享功能G(u为双)作为双重返回2 * U * U  -  4 * U结束功能共享子main()尝试'创建环境Dimen Env作为新的grbenv()'创建一个新的模型暗淡模型作为新的grbmodel(env)'创建变量dim lb作为dips = 0.0,Ub为双= 1.0暗x作为grbvar = model.addvar(LB,UB,0.0,GRB.CONTINOULY,“X”)DIM Y作为GRBVAR = MODEM.ADDVAR(LB,UB,0.0,GRB.Continuous,“Y”)DIM Z为GRBVAR = Model.Addvar(LB,UB,0.0,GRB.Continuous,“Z”)'用于y Model.setObjective(-y)'为x和z dim npts添加分段 - 线性目标函数作为Integer = 101 dim ptu作为double()= new double(NPTS-1){} DIMP PTF作为DOUBLE()= NEW DOUBLE(NPTS-1){} DIMP PTG为DOUBLE()=新的DOUBLE(NPTS  -  1){}为I作为INTEGER = 0到NPTS  -  1 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)'添加约束:x + 2 y + 3 z <= 4 model.addconstr(x + 2 * y + 3 * z <= 4.0,“c0”)'添加约束:x + y> = 1 model.addconstr(x + y> = 1.0,“c1”)'优化模型作为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 i As Integer = 0 To npts - 1 ptf(i) = -ptf(i) Next 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 e As GRBException Console.WriteLine("Error code: " + e.ErrorCode & ". " + e.Message) End Try End Sub End Class