piecewise.py


piecewise.py


#!这个例子考虑了以下可分离凸问题:狗万app足彩# #最小化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,所有真实的你。#制定和解决简单的LP模型和分段线性函数近似f和g。然后,它将模型#转化为一个MIP,通过对f的近似值进行反求,而f的近似值对应于一个非凸分段线性函数,并再次求解它。从math Import exp def f(u): return exp(-u) def g(u): return 2 * u * u - 4 * u#创建一个新的模型m = gp.Model() #创建变量磅= 0.0乌兰巴托= 1.0 x = m.addVar(磅、乌兰巴托、名称= ' x ') y = m.addVar(磅、乌兰巴托、名称= y) z = m.addVar(磅、乌兰巴托、名称= ' z ') #为y m.setObjective设定目标(- y) #添加分段线性目标函数为x和z npt = 101 ptu = [] ptf = [] ptg =[]我的范围(npt): ptu。追加(磅+(乌兰巴托-磅)*我/ (npt - 1)) ptf.append (f (ptu[我]))ptg.append (g (ptu[我]))m.setPWLObj (x, ptu ptf) m.setPWLObj (z, ptu ptg) #添加约束:x + 2 y + 3 z < = 4 m.addConstr (x + 2 * y + 3 * z < = 4, c0) #添加约束:x + y > = 1 m.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[我]m.setPWLObj (x, ptu ptf) #优化模型作为MIP m.optimize()打印(‘IsMIP: % d % m.IsMIP)的v m.getVars ():print('%s %g' % (v.VarName, v.X)) print('Obj: %g' % m.ObjVal)除了gp。GurobiError as e: print('Error code ' + str(e.errno) + ": " + str(e)) except AttributeError: print('Encountered an attribute error')