1.构造目标函数
(1)一般的写法:
我们常见的目标函数写法通常是定义好式子z=f(x,y,...),然后用m.setObjective(z, GRB。MINIMIZE),这样的定义方式比较普遍。
这也是一般的写法。
(2)但还有一种写法,是在定义变量的时候来构造目标函数。
x = m.addVar (lb=0.0, ub=float(’inf’), obj=0.0, vtype=GRB.CONTINUOUS, name="", column=None )
此处的obj是变量在目标函数中的系数。
如果obj=0,即该变量不出现在目标函数中,也是默认的形式,我们见得最多。
但如果是x=m.addVar(lb=0, float(’inf’), obj=2, vtype=GRB.CONTINUOUS),那么目标函数中会出现z=2x一项。
2.column()
这是约束中的列相关的函数。会在列生成,分支定价算法中用到。
包含:系数和变量两大类。通常是临时变量。
添加的时候用addTerm(),删除的时候用remove()。
具体如下所示:
- col_coef = [1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0]
- rmp_con为gurobi前期定义的一系列(24个R0,...,R24)约束
-
- # (1)列构造器,这里col_coef表示约束中的系数,rmp_con表示对应的约束,二者必须对应(维度一致)
- rmp_col = Column(col_coef, rmp_con)
- #
- # 1.0 R9 1.0 R10 0.0 R11 1.0 R12 0.0 R13 1.0 R14 0.0 R15 1.0 R16 1.0 R17 1.0 R18
- # 1.0 R19 0.0 R20 0.0 R21 0.0 R22 0.0 R23 0.0 R24 >
-
- # (2)把新列(新变量,即新产生的pattern)添加到模型中
- >>>其实对应的是s = m.addVar(lb,ub,obj,vtype,name,column),其中column表示GRBColumn对象,用于指>>> 定新变量s所属的一组约束
- RMP.addVar(lb = 0.0,ub = 1, obj = path_length, vtype = GRB.CONTINUOUS, name = var_name, column = rmp_col)