piecewise.py


# !/usr/bin/env python3.7 # 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,对应#一个非凸分段线性函数,解决了一遍。进口gurobipy从数学gp进口exp def f (u):返回exp (- u) def g (u):返回2 *你* u - 4 *你试试:#创建一个新的模型m = gp.Model() #创建变量磅= 0.0乌兰巴托= 1.0 x = m。addVar(磅,乌兰巴托,name = ' x ') y = m。addVar(磅、乌兰巴托、名称= y) z = m。addVar(磅,乌兰巴托,name = ' z ') #为y m.setObjective设定目标(- y) #添加分段线性目标函数为x和z npt = 101 ptu = [] ptf = [] ptg =[]我的范围(npt): ptu。追加(磅+(乌兰巴托-磅)*我/ (npt - 1)) ptf.append (f (ptu[我]))ptg.append (g (ptu[我]))。setPWLObj (x, ptu ptf) m。setPWLObj (z, ptu ptg) #添加约束:x + 2 y + 3 z < = 4米。addConstr (x + 2 * y + 3 * z < = 4, c0) #添加约束:x + y > = 1米。addConstr (x + y > = 1, c1) #优化模型作为LP m.optimize()打印(‘IsMIP: % d % m.IsMIP)的v m.getVars():打印(“% s % g”% (v。VarName, v.X)打印(“Obj: % g”% m.ObjVal)打印(“)#否定分段线性目标函数x范围(npt):我的ptf[我]= ptf[我]。setPWLObj (x, ptu ptf) #优化模型作为MIP m.optimize()打印(‘IsMIP: % d % m.IsMIP)的v m.getVars():打印(“% s % g”% (v。VarName, v.X)打印(“Obj: % g”% m.ObjVal)除了gp。GurobiError e:打印(“错误代码”+ str (e.errno) +“:”+ str (e))除了AttributeError:打印('遇到一个属性错误')