我有一个如下所示的数据框:
City Country Time Points
---------------------------------------
London UK 31 20
Paris France 42 12
Sydney Australia 73 44
New York US 41 18
Lyon France 22 25
...
...
计划应该在给定的时间范围内选择要访问的城市。城市数量只有时间限制,没有严格限制。
然而:
目前我的代码如下:
max_time = 500
x = pulp.LpVariable.dicts("x", df.index, 0, 1, pulp.LpInteger)
mod = pulp.LpProblem("travel_prog", pulp.LpMaximize)
objval_points = {idx: (df['Points'][idx]) for idx in df.index}
mod += sum([x[idx]*objval_points[idx] for idx in df.index])
objval_time = {idx: (df['Time'][idx]) for idx in df.index}
mod += sum([x[idx]*objval_time[idx] for idx in df.index]) < max_time
for idx in df.index:
mod += x[idx] <= 1
我创建了一个约束,允许程序每个国家只选择一个城市,但这不是我想要的:
for country in df['Country'].unique():
sub_idx = df[df['Country']==country].index
mod += pulp.lpSum([x[idx] for idx in sub_idx]) <= 1
答案 0 :(得分:2)
计算每个国家/地区的访问次数。把它放在一个变量说CountVisit[Country]
。引入变量maxVisit
和MinVisit
。然后添加约束maxVisit >= CountVisit[Country]
和MinVisit <= CountVisit[Country]
,最后施加约束MaxVisit-MinVisit<=1
。