Python 加上「;每隔一天“限制”;使用问题类

Python 加上「;每隔一天“限制”;使用问题类,python,pulp,Python,Pulp,我正在尝试使用纸浆模块优化商店时间表,我已经得到了预期的结果。 但我只有一个问题,因为我需要添加一个新的解释 通过下面的代码,我将能够在每天分发商店 基于以下约束条件 门店总需求量不得超过一天的产能(1000或更少) 每个门店将根据其天数进行分配。(门店天数) 例:“S2”只能在三天内播放 现在我需要添加一个新的约束,当商店只有三天时。 “每隔一天”条件,以获得一天的间隔 例如:“S2”商店 如果安排在周六,其他日子将是周一和周三 如果安排在太阳上,其他日子将是星期二和星期四 容量=10

我正在尝试使用纸浆模块优化商店时间表,我已经得到了预期的结果。 但我只有一个问题,因为我需要添加一个新的解释

通过下面的代码,我将能够在每天分发商店 基于以下约束条件

  • 门店总需求量不得超过一天的产能(1000或更少)
  • 每个门店将根据其天数进行分配。(门店天数) 例:“S2”只能在三天内播放
现在我需要添加一个新的约束,当商店只有三天时。 “每隔一天”条件,以获得一天的间隔

例如:“S2”商店

  • 如果安排在周六,其他日子将是周一和周三
  • 如果安排在太阳上,其他日子将是星期二和星期四
容量=1000
日期列表=[“周六”、“周日”、“周一”、“周二”、“周三”、“周四”]
无天数列表=范围(1,7)
存储=[“S1”、“S2”、“S3”、“S4”]
存储需求={
“S1”:400,
“S2”:300,
“S3”:250,
“S4”:200,
}
储存天数={
“S1”:6,
“S2”:3,
“S3”:3,
“S4”:1,
}
prob=LpProblem(“时间表”,lp最大化)
storeVars=LpVariable.dicts(“天”,(无天列表,存储),0,1,LpInteger)
对于无天数列表中的d:

prob+=pulp.lpSum([Store_demand[s]*storeVars[d][s]针对店内的s])您可以通过为所有在三天内营业的店铺添加额外的限制来实现这一点。以下约束条件表示店铺不能连续两天营业:

for s in Store:
    if Store_Days[s] == 3:
        for d in range(1,6):
            prob += storeVars[d][s] + storeVars[d+1][s] <= 1
对于存储中的:
如果存储天数=3:
对于范围(1,6)内的d:

prob+=storeVars[d][s]+storeVars[d+1][s]我认为您可以保持以前的代码不变。只需在其他约束之后添加代码段。我尝试按原样复制它,但在最后一行中遇到错误“KeyError:4”问题抱歉,我错误地删除了我的注释,但您可以找到最新的更新我只需在循环中添加一条if语句,您是否刚刚在
prob.solve()的正上方插入了代码段
?是的,在上面

rob = LpProblem("schedule",LpMaximize)
storeVars = LpVariable.dicts("Days",(no_days_list,Store),0,1,LpInteger)
   for d in no_days_list:
        prob += pulp.lpSum([Store_demand[s] * storeVars[d][s] for s in Store]) <= capacity
   for s in Store:
        prob += pulp.lpSum(storeVars[d][s] for d in no_days_list) == store_Days[s]
          if store_Days[s] == 3:
                prob += pulp.lpSum([ storeVars[d][s]  + storeVars[d][s] for d in no_days_list])  <= 1
  prob.solve()

for s in Store:
    if Store_Days[s] == 3:
        for d in range(1,6):
            prob += storeVars[d][s] + storeVars[d+1][s] <= 1