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
gurobipy的使用
最新推荐文章于 2023-07-23 23:18:57 发布