python

您所在的位置:网站首页 python在print中加入判断条件 python

python

2024-07-10 12:21| 来源: 网络整理| 查看: 265

我有一个目标函数,其中有一个 if 条件。我在 Gurobi Python 中实现它时遇到问题。

背景

有 s 供应商和 p 工厂。 x[s][p] 是一个变量,指示从 supplier-x 流向 plant-p 的商品数量。 c[s][p] 表示从供应商向中心供应一件商品的成本。

此外,每个供应商都有固定成本t[s]。如果供应商向任何中心供货,就会产生此固定成本(此固定成本不取决于商品数量)。

我想使用像这样的目标函数来最小化成本 -

Objective Function

第一部分很容易建模,例如 sum(x[s, p] * spc[s, p] for s in range(num_suppliers) for p in range(num_center))。

对于第二项,我该如何建模? (第二部分基本上意味着仅当供应商实际上向任何工厂供应任何东西时才添加供应商的固定成本)。

编辑

这是我现在的代码。注意:这不会产生最小值 -

from gurobipy import * supplier_capacity = [ 5, 10 ] plant_demand = [ 2, 4 ] num_suppliers = len(supplier_capacity) num_plants = len(plant_demand) t = [ 100, 1 ] c = { (0, 0): 1, (0, 1): 4, (1, 0): 4, (1, 1): 2 } x = {} # flow between each supplier to plant m = Model() xl = [(s, p) for s in range(num_suppliers) for p in range(num_plants)] x = m.addVars(xl, vtype=GRB.INTEGER, lb=0, name='flow') for s in range(num_suppliers): m.addConstr(x.sum(s, '*') = plant_demand[p]) m.setObjective( ( sum(x[s, p] * c[s, p] for s in range(num_suppliers) for p in range(num_plants)) + sum(t[s] for s in range(num_suppliers) if x.sum(s, '*') >= 0) ), GRB.MINIMIZE ) m.update() m.optimize() if m.status == GRB.Status.OPTIMAL: print('==== RESULTS ====') print('Min Cost: {}'.format(m.ObjVal)) for v in m.getVars(): print('{} = {}'.format(v.VarName, v.X)) else: print('Infeasible model')

最佳答案

由于 x 是决策变量,因此您可以 not将其与标准 python if 语句一起使用。相反,您需要添加二进制 indicator每当任何发货变量 (x_sp) 非零时,变量 (y_s) 将被强制设置为值 1。然后将指标变量与系数 t_s 添加到目标函数中。

y = [m.addVar(vtype='B', obj=t_s) for t_s in t] for s, y_s in enumerate(y): for p in range(num_plants): big_M = min(supplier_capacity[s], plant_demand[p]) m.addConstr(big_M * y_s >= x[(s, p)]

这些限制迫使每个供应商在向任何工厂运送任何东西时都必须“开启”。 big_M 值是供应商可以运送到工厂的数量的上限。由于 y 是二元变量,因此如果任何相关 x 变量非零,则 y 必须为 1。相反,如果 y 为 1,则任何或所有相关 x 变量将实际上不受约束。由于 y 变量的系数都是正数,并且您正在最小化,因此如果所有 x 都为零,则不需要显式约束 y 为 0。

关于python - 如何在 Gurobi Python 目标函数中对 `if` 条件建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738865/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3