gc_pwl.py


gc_pwl.py


#!# # maximum # sum c[j] * x[j] # subject t狗万app足彩o # sum A[i,j] * x[j] <= 0, for i = 0,…m - 1 #和y [j] < = 3 # y [j] = pwl (x [j]), j = 0,…, n-1 # x[j] free, y[j] >= 0, for j = 0,…(1) +| +|, if x != 0 # # +| +|, if x != 0 # #Sum pwl(x[j]) <= b表示约束的x向量,同时也表示稀疏的x向量。这里b = 3表示最多两个x[j]可以是非零的,如果是2,则# sum x[j] <= 1 # 2。Pwl (x)从1跳到0,从0跳到1,如果x从- 0到0,#然后到0,所以我们需要在x = 0处有3个点。X在两边都有无限的边界#,由两点(- 1,2)和(0,1)定义的部分可以#将X扩展到-无限。总的来说,我们可以使用五点(- 1,2),(0,1),#(0,0),(0,1)和(1,2)来定义y = pwl(x) #n = 5 m = 5 c = (0.5, 0.8, 0.5, 0.1, 1] A =[[0, 0, 0, 1, 1],[0, 0, 1, 1, 1),(1, - 1, 0, 0, 1],[1, 0, 1, 0, 1],[1, 0, 0, 1, 1]] #创建一个新的模型模型= gp.Model (gc_pwl) #创建变量x =模型。addVars (n,磅=伽马线暴。name="x") y =模型。addVars(n, name="y") # Set objective model.setObjective(gp.quicksum(c[j]*x[j] for j in range(n)), GRB.MAXIMIZE) # Add Constraints for i in range(m): model.addConstr(gp.quicksum(A[i][j]*x[j] for j in range(n)) <= 0) model.addConstr(y.sum() <= 3) for j in range(n): model.addGenConstrPWL(x[j], y[j], [-1, 0, 0, 0, 1], [2, 1, 0, 1, 2]) # Optimize model model.optimize() for j in range(n): print('%s = %g' % (x[j].varName, x[j].x)) print('Obj: %g' % model.objVal) except gp.GurobiError as e: print('Error code ' + str(e.errno) + ": " + str(e)) except AttributeError: print('Encountered an attribute error')