Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求纸浆目标函数最大值的最小值_Python_Linear Programming_Pulp - Fatal编程技术网

Python 求纸浆目标函数最大值的最小值

Python 求纸浆目标函数最大值的最小值,python,linear-programming,pulp,Python,Linear Programming,Pulp,我试图用纸浆来得到以下目标函数的最小值U(X), 其中,x{f,i,v}是二进制值 当将目标函数设置为plup.LpProblem时,我在编写max()时遇到了问题 我所做的是使用python内部函数max(),但它给了我一个错误。似乎它不能用来制浆 for each_sfc in self.SFCs: vnf_id_list = list() for each_VNF in each_sfc.VNF_list: vnf_id_l

我试图用纸浆来得到以下目标函数的最小值
U(X)

其中,
x{f,i,v}
是二进制值

当将目标函数设置为
plup.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()
用于纸浆,或者如何重新编写代码?

这是一个非常基本的问题

  • max()
    不是线性的。线性表达式看起来像
    a1*x1+a2*x2+…
    。纸浆仅用于线性模型,因此它只允许在目标和约束中使用线性表达式。请注意,某些建模工具具有max功能,但它们通常会在引擎盖下对此进行线性化

  • 对于像
    最小和(i,max(j,x(i,j))
    这样的构造,一个非常标准的公式是

    min sum(i, y(i))
    y(i) >= x(i,j)  for all i,j 
    
  • 只要查阅任何LP教科书。它会解释这个公式。通常这被称为
    minimax


  • 这是一个非常基本的问题

  • max()
    不是线性的。线性表达式类似于
    a1*x1+a2*x2+…
    。纸浆仅用于线性模型,因此它只允许在目标和约束中使用线性表达式。请注意,某些建模工具具有max函数,但它们通常会在引擎盖下对此进行线性化

  • 对于像
    最小和(i,max(j,x(i,j))
    这样的构造,一个非常标准的公式是

    min sum(i, y(i))
    y(i) >= x(i,j)  for all i,j 
    
  • 只要查阅任何LP教科书。它会解释这个公式。通常这被称为
    minimax


  • 抱歉,但我不认为从一个基本问题开始回答是有建设性的,如果你做了很多,这可能对你来说,或者,但我相信这对很多人来说都不是。@Maddo Fair.Otoh,这是一个非常基本的问题。抱歉,但我不认为从一个基本问题开始回答是有建设性的,如果你愿意,这可能对你来说“哦,有很多,但我相信这不是为很多人准备的。”Maddo Fair。哦,这是一个非常基本的问题。