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 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜗笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值