gc_pwl.py


# !/usr/bin/env python3.7 # 2023年版权,Gurobi优化狗万app足彩,LLC #这个例子中制定和解决以下简单的模型与PWL约束#:# # #最大化和c [j] * x [j] #话题#总和(i, j) * x [j] < i = 0 = 0,,…m - 1 #和y [j] < = 3 # y [j] = pwl (x [j]), j = 0,…,n - 1 # x [j]自由,y [j] > = 0, j = 0,…,n - 1 # pwl (x) = 0,如果x = 0 # = 1 + x | |,如果x ! = 0 # # # 1。pwl总和(x [j]) < = b是绑定x向量和支持稀疏的向量。#这里b = 3意味着最多两个x [j]可以非零,如果两个,然后x [j] < = 1 #和# 2。pwl (x)跳从1到0,从0到1,如果x从- 0到0 #然后积极0,所以我们需要三个点x = 0。x无限边界#两边,文章定义了两个点(1,2)和(0,1)# x扩展到无限。总体我们可以用5分(1、2),(0,1),#(0,0),(0,1)和(1、2)来定义y = pwl (x) #进口gurobipy从gurobipy gp进口伽马线暴试题: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 =模型。name = " y " addVars (n) #设置目标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')