gurobipy的使用

class SBM_eff(object):
    def __init__(self,input_var,desir_output_var,undesir_output_var,DMUs,data):
        self.DMUs = len(data[DMUs])
        self.m= len(input_var)
        self.z=len(desir_output_var)
        self.j=len(undesir_output_var)
        self.X = data[input_var]
        self.Y=data[desir_output_var]
        self.B=data[undesir_output_var]
        self.result = []
    #    def __SBM_super_C(self):
    def SBM_shadow_price(self):
        MODEL = gurobipy.Model()
        u_y = MODEL.addVars(self.z)
        u_x = MODEL.addVars(self.m)
        u_b = MODEL.addVars(self.j)
        MODEL.update()
        for k in range(0,self.DMUs):
#             fi = MODEL.addVars(self.m1)
#             lambdas = MODEL.addVars(self.DMUs)
#             fo = MODEL.addVars(self.m2)
#             t = MODEL.addVar()
   #         MODEL.setObjective(-(quicksum(u_y[i] * self.Y.iloc[k,i] for i in range(self.z)) - quicksum(u_x[i] * self.X.iloc[k,i] for i in range(self.m)) - quicksum(u_b[i] * self.B.iloc[k,i] for i in range(self.j))) , sense=gurobipy.GRB.MINIMIZE)
            MODEL.setObjective((quicksum(u_y[i1] * self.Y.iloc[k,i1] for i1 in range(self.z)) - quicksum(u_x[i2] * self.X.iloc[k,i2] for i2 in range(self.m)) - quicksum(u_b[i3] * self.B.iloc[k,i3] for i3 in range(self.j))) ,gurobipy.GRB.MAXIMIZE)
            MODEL.addConstrs(u_x[i]>=((1/self.m)*self.X.iloc[k,i]) for i in range(self.m))
                
            MODEL.addConstrs(quicksum(u_y[i1] * self.Y.iloc[h1,i1] for i1 in range(self.z) for h1 in range(self.DMUs)) - quicksum(u_x[i2] * self.X.iloc[h2][i2] for i2 in range(self.m) for h2 in range(self.DMUs))  - quicksum(u_b[i3] * self.B.iloc[h3][i3] for i3 in range(self.j) for h3 in range(self.DMUs)) <=0 for d in range(1))
#            MODEL.addConstrs(quicksum(u_y[i1] * self.Y.iloc[h1][i1] for i1 in range(self.z) for h1 in range(self.DMUs)) - quicksum(u_x[i2] * self.X.iloc[h2][i2] for i2 in range(self.m) for h2 in range(self.DMUs))  - quicksum(u_b[i3] * self.B.iloc[h3][i3] for i3 in range(self.j) for h3 in range(self.DMUs)) <=0)
#            MODEL.addConstrs(u_x[i]>=((1/m)*self.X.iloc[k,i]) for i in range(self.m))
            MODEL.addConstrs(u_y[i1]>=(1+quicksum(u_y[i2] * self.Y.iloc[k,i2] for i2 in range(self.z)  ) - quicksum(u_x[i3] * self.X.iloc[k,i3] for i3 in range(self.m) ) - quicksum(u_b[i4] * self.B.iloc[k,i4] for i4 in range(self.j) ))*(1/(self.z + self.j) * (1/(self.Y.iloc[k,i1] ))) for i1 in range(self.z))        
            MODEL.addConstrs(u_b[i1]>=(1+quicksum(u_y[i2] * self.Y.iloc[k,i2] for i2 in range(self.z)  ) - quicksum(u_x[i3] * self.X.iloc[k,i3] for i3 in range(self.m) ) - quicksum(u_b[i4] * self.B.iloc[k,i4] for i4 in range(self.j) ))*(1/(self.z + self.j) * (1/(self.B.iloc[k,i1] ))) for i1 in range(self.j))                  
            MODEL.setParam('OutputFlag', 0)
            MODEL.setParam("NonConvex", 2)
            MODEL.optimize()
            print(gurobipy.GRB.attr.BatchErrorCode)#    var.getAttr()
            print(k.x)#返回值
            print(k,u_x,u_y,u_b)
        #self.result.append(MODEL.objVal)
        return self.result 

你可能感兴趣的:(写论文使用)