manbet体育手机客户端


分段


#!/usr/bin/env python3.7版权所有2019,Gurobi Opt狗万app足彩imization,LLC本例考虑了以下可分离的凸问题:###最小化f(x)-y+g(z)#服从x+2y+3z<=4#x+y>=1#x,y,z<=1###其中f(u)=exp(-u)和g(u)=2u^2-4u。它通过用分段线性函数逼近f和g来建立和求解一个更简单的LP模型。然后,通过对f的近似求反,将模型#转换为MIP,f对应于一个非凸分段线性函数,并再次求解。从数学导入表达式定义f(u):返回表达式(-u)定义g(u):返回2*u*u-4*u尝试:#创建一个新模型m=gp.model()#创建变量lb=0.0ub=1.0x=m.addVar(lb,ub,name='x')y=m.addVar(lb,ub,name='y')z=m.addVar(lb,ub,name='z')#为y.setObjective(-y)设置目标#为x和z NPT=101添加分段线性目标函数ptu=[]ptu=[]ptg=[]范围内i(NPT):ptu.append(lb+(ub-lb)*i/(npts-1))ptf(ptu[i])ptg.append(g(ptu[i])m.setPWLObj(x,ptu,ptf)m.setPWLObj(z,ptu,ptg)#Add约束:x+2y+3z<=4m.addconstruct(x+2*y+3*c04)<=c04#添加约束:x+y>=1 m.addConstr(x+y>=1,'c1')#将模型优化为LP m.Optimize()print('IsMIP:%d'%m.IsMIP)用于m.getVars()中的v:print('%s%g'(v.VarName,v.x))print('Obj:%g'%m.ObjVal)print('')#为范围内的i(npts)中的x求反分段线性目标函数:ptf[i]=-ptf[i]m.setpwj(x,ptu,ptu,ptf)#将模型优化为MIP m.Optimize()打印('IsMIP:%d'%m.IsMIP)用于m.getVars()中的v:print('%s%g'(v.VarName,v.X))打印('Obj:%g'%m.ObjVal),gp.GurobiError除外,如e:print('Error code'+str(e.errno)+':“+str(e)),AttributeError:print除外('遇到属性错误')