在 pulp objective 函数上获取最大值的最小值
Get minimum of maximize value on pulp objective function
我正在尝试使用纸浆获取以下 objective 函数的最小值 U(X)
,
其中 x_{f,i,v}
是二进制值。
将 objective 函数设置为 pulp.LpProblem
时,我在编写 max()
时遇到问题。
我所做的是使用 python 内部函数 max()
但它给了我一个错误。好像不能用来打浆
for each_sfc in self.SFCs:
vnf_id_list = list()
for each_VNF in each_sfc.VNF_list:
vnf_id_list.append(str(each_VNF.ID))
new_sfc_vars = LpVariable.dicts(
name='X',
indexs=vnf_id_list,
lowBound=0,
upBound=1,
cat='Continuous'
)
for each_key in new_sfc_vars.keys():
new_sfc_vars[each_key] = 1 - new_sfc_vars[each_key]
self.sfc_vars.append(new_sfc_vars)
self.LP_model = LpProblem(
name="Static backup",
sense=LpMinimize
)
for each_SFC, each_vars in zip(self.SFCs, self.sfc_vars):
self.LP_model.objective += each_SFC.backup_cost * max(each_vars.values())
print(self.LP_model.objective)
如何将 max()
与 pulp 一起使用或如何重新编写代码?
这是一个非常基础的问题。
max()
不是线性的。线性表达式看起来像 a1*x1+a2*x2+...
。 PuLP 仅适用于线性模型,因此它只允许 objective 和约束中的线性表达式。请注意,某些建模工具具有最大函数,但它们通常会在后台对其进行线性化处理。
像min sum(i, max(j, x(i,j))
这样的构造的一个非常标准的公式是
min sum(i, y(i))
y(i) >= x(i,j) for all i,j
只要查阅任何LP教材即可。它将解释这个公式。通常这被称为 minimax
.
我正在尝试使用纸浆获取以下 objective 函数的最小值 U(X)
,
其中 x_{f,i,v}
是二进制值。
将 objective 函数设置为 pulp.LpProblem
时,我在编写 max()
时遇到问题。
我所做的是使用 python 内部函数 max()
但它给了我一个错误。好像不能用来打浆
for each_sfc in self.SFCs:
vnf_id_list = list()
for each_VNF in each_sfc.VNF_list:
vnf_id_list.append(str(each_VNF.ID))
new_sfc_vars = LpVariable.dicts(
name='X',
indexs=vnf_id_list,
lowBound=0,
upBound=1,
cat='Continuous'
)
for each_key in new_sfc_vars.keys():
new_sfc_vars[each_key] = 1 - new_sfc_vars[each_key]
self.sfc_vars.append(new_sfc_vars)
self.LP_model = LpProblem(
name="Static backup",
sense=LpMinimize
)
for each_SFC, each_vars in zip(self.SFCs, self.sfc_vars):
self.LP_model.objective += each_SFC.backup_cost * max(each_vars.values())
print(self.LP_model.objective)
如何将 max()
与 pulp 一起使用或如何重新编写代码?
这是一个非常基础的问题。
max()
不是线性的。线性表达式看起来像a1*x1+a2*x2+...
。 PuLP 仅适用于线性模型,因此它只允许 objective 和约束中的线性表达式。请注意,某些建模工具具有最大函数,但它们通常会在后台对其进行线性化处理。像
min sum(i, max(j, x(i,j))
这样的构造的一个非常标准的公式是min sum(i, y(i)) y(i) >= x(i,j) for all i,j
只要查阅任何LP教材即可。它将解释这个公式。通常这被称为
minimax
.