通CCR与BCC、SBM已经发布资源,超效率SBM代码已经修复(网上的带bug)
通过链接启发:https://tieba.baidu.com/p/5986755578
https://download.csdn.net/download/qq_42830971/20586629
可联系邮箱找SBM资源:leon_leon@yeah.net
import gurobipy
import pandas as pd
from gurobipy import quicksum
class effect_economic(object):
def __init__(self,input_var,output_var,data):
self.DMUs = len(data['DMUs'])
self.m1= len(input_var)
self.m2=len(output_var)
self.X = data[input_var]
self.Y=data[output_var]
self.result = []
# def __SBM_super_C(self):
def __call__(self):
for k in range(self.DMUs):
MODEL = gurobipy.Model()
fi = MODEL.addVars(self.m1)
lambdas = MODEL.addVars(self.DMUs)
fo = MODEL.addVars(self.m2)
t = MODEL.addVar()
MODEL.update()
MODEL.setObjective(t + t/self.m1 * quicksum(fi[j] for j in range(self.m1)), sense=gurobipy.GRB.MINIMIZE)
MODEL.addConstrs(quicksum(lambdas[i] * self.X.iloc[i][j] for i in range(self.DMUs) if i != k) <= (1+fi[j]) * self.X.iloc[k][j] for j in range(self.m1))
MODEL.addConstrs(quicksum(lambdas[i] * self.Y.iloc[i][j] for i in range(self.DMUs) if i != k) >= (1-fo[j]) * self.Y.iloc[k][j] for j in range(self.m2))
MODEL.addConstr(t-t/self.m2 * quicksum(fo[j] for j in range(self.m2)) == 1)
MODEL.setParam('OutputFlag', 0)
MODEL.setParam("NonConvex", 2)
MODEL.optimize()
self.result.append(MODEL.objVal)
return self.result
eff = effect_economic(input_var=['x1','x2'],output_var=['y1','y2'],data=data)
eff()