manbet体育手机客户端


genconstr.py


#!/usr/bin/python版权所有2019,Gurobi Opt狗万app足彩imization,LLC。在本例中,我们展示了建模的一般约束的使用,以及一些常见表达式。我们使用SAT问题作为一个例子,其中我们想看看是否有可能满足逻辑for(x0或~x1或x2)和(x1或~x2或x3)以及#(x2或~x3或x0)和(x3或~x0或x1)和#(~x0或~x1或x2)和(~x1或~x2或x3)以及#(~x2或~x2或x0或x0)的至少四个(或全部)子句####我们通过为每个文本引入两个变量(本身及其#否定值),为每个子句引入一个变量,然后两个#变量用于指示我们是否可以满足四个,另一个用于确定#子句的最小值(如果是一个,我们可以满足所有子句)#并将这两个变量放入目标中i、 e.目标函数为##最大化Obj0+Obj1##Obj0=MIN(第1条,…,第8条)#Obj1=1->第1条+…+因此,当且仅当我们能够满足所有条款时,目标值将为2;一个当且仅当至少满足四个条款时,否则为零。从gurobipy import*try:NLITERALS=4 n=NLITERALS#示例数据:#例如{0,n+1,2}子句(x0或~x1或x2)子句=[[0,n+1,2],[1,n+2,3],[2,n+3,0],[3,n+0,1],[n+0,n+1,2,3],[n+2,n+3,n+3,1]#创建一个新模型(“模型”)#初始化决策变量和目标Lit=model.addVars(NLITERALS,vtype=GRB.BINARY,name=“X”)NotLit=model.addVars(NLITERALS,vtype=GRB.BINARY,name=“NotX”)Cla=model.addVars(len(子句),vtype=GRB.BINARY,name=“子句”)Obj0=model.addVar(vtype=GRB.BINARY,name=“Obj0”)Obj1=model.addVar(vtype=GRB.BINARY,name=“Obj1”)链接链接席和NoXI模型。(Lime[i]+NoTrime[i]=1,i为范围(nRealSes)),链接子句和文字,用于枚举(子句)中的I,C:子句= [L ]在C中:如果L> = N:子句。#将objs与子句model.addConstr(Obj0==min(Cla),name=“CNSTR_Obj0”)model.addConstr((Obj1==1)>>(Cla.sum()>=4.0),name=“CNSTR_Obj1”)#设置优化目标模型。setObjective(Obj0+Obj1,GRB.MAXIMIZE)#保存问题模型。写入(“genconstr.mps”)模型。写入(“genconstr.lp”)#优化模型。优化()#状态检查Status=model.getAttr(GRB.Attr.Status)如果Status==GRB.INF\u或_UNBD或\Status==GRB.invasible或\Status==GRB.UNBOUNDED:print(“由于模型不可行或未绑定而无法求解模型”)系统。如果Status!=GRB.OPTIMAL:print(“优化已停止,状态为”),status)sys.exit(1)#print result objval=model.getAttr(GRB.Attr.objval)如果objval>1.9:print(“逻辑表达式可满足”)elif objval>0.9:print(“至少可以满足四个子句”)其他:print(“甚至不能满足三个子句”),但gurobier为e:print('Error code'+str(e.errno)+':“+str(e))除了AttributeError:print('遇到属性错误')