python pyomo:如何在目标函数中最大化最大值之和

时间:2019-10-29 07:40:38

标签: optimization linear-programming pyomo

我正在努力从值列表中选择最大值,以使 最大值应为最大值。请考虑以下示例:

订单:O1,O2和O3;商店:str_1,str_2和str_3 订单是从1个拥有最高加权得分的商店中完成的

wtd_scores = {
("O1", "str_1") = 90.03,
("O1", "str_2") = 83.03,
("O1", "str_3") = 83.07,
("O2", "str_1") = 70.84,
("O2", "str_2") = 96.90,
("O2", "str_3") = 90.92,
}
通过给予因子x,y和z一定的权重,可以得出上述分数->决策变量(换句话说,上述wtd_scores是x,y,z的函数)。我需要为x,y,z因子选择最佳的权重集合,以使每个订单的最大分数之和最大。 在上面的示例中,目标函数的值应为90.03 + 96.90 = 186.93 通过为O1选择str_1和为O2选择str_2

加权分数始终为0/100黑白

我试图做如下事情:

def dv_bounds2(m, i):
    return (0, 100)

# decision variable x2 should hold the maximum wtd score corresponding to each order
model.x2 = Var(model.orders, within=NonNegativeReals, bounds=dv_bounds2)

def const(m,i,j):
    return m.x2[i] >= wtd_scores[i,j]

model.const = Constraint(model.orders, model.stores, rule=const)

def obj_rule(m):
    return sum(m.x2[i] for i in m.orders)
model.obj = Objective(rule=obj_rule, sense=maximize)

但是,求解器始终选择x2 ['O1'] = x2 ['O2'] = 100的值,这是有道理的,因为我想最大化x2 ['O1'] + x2 ['O2]之和和上限= 100

但是,我需要为每个订单选择实际的最高分。即O1-> 90.03和O2-> 96.90 并且最好是相应的商店ID。

我是pyomo和优化新手,非常感谢您的帮助!

0 个答案:

没有答案