我正在努力从值列表中选择最大值,以使 最大值应为最大值。请考虑以下示例:
订单: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和优化新手,非常感谢您的帮助!