Python 蟒蛇浆“;“覆盖以前设置的目标”;多次解决优化问题时发出警告

Python 蟒蛇浆“;“覆盖以前设置的目标”;多次解决优化问题时发出警告,python,warnings,pulp,Python,Warnings,Pulp,我正在研究一个问题,需要我多次解决相同的优化问题,尽管每次都使用不同的变量集。我使用for循环来迭代优化过程,出于某种原因,它只在第一次工作(生成正确的结果;我手动检查)。然而,每次在第一次之后,优化都会提供一个次优问题。我得到以下语句:warnings.warn(“覆盖以前设置的目标”) 通过检查,计算出的解是不正确的(我试图最小化对象对之间的距离,这显然是错误的)。此外,目标函数是0,这没有意义,因为我将目标定义为成对距离的总和,因此目标函数的值应始终大于0。代码很长,但可能会显示我做错了什

我正在研究一个问题,需要我多次解决相同的优化问题,尽管每次都使用不同的变量集。我使用for循环来迭代优化过程,出于某种原因,它只在第一次工作(生成正确的结果;我手动检查)。然而,每次在第一次之后,优化都会提供一个次优问题。我得到以下语句:warnings.warn(“覆盖以前设置的目标”)

通过检查,计算出的解是不正确的(我试图最小化对象对之间的距离,这显然是错误的)。此外,目标函数是0,这没有意义,因为我将目标定义为成对距离的总和,因此目标函数的值应始终大于0。代码很长,但可能会显示我做错了什么。这就是我要重复的内容:

model = pulp.LpProblem('R_lessthan_V_' + str(t), LpMinimize)        

    #Set variables to optimize
    x = pulp.LpVariable.dicts('single_ride_' + str(t), ((i.num, j.num) for i in R_prime for j in V_prime), cat = 'Binary')
    x_prime = pulp.LpVariable.dicts('shared_ride_' + str(t), ((i.num, j.num) for i in R_prime for j in V_prime), cat = 'Binary')

    #Set objective function
    model += (pulp.lpSum([pulp.lpSum([[x[(i.num, j.num)] * (d[i.num][j.num] + phi * p[j.num])]
    + [x_prime[(i.num, j.num)] * rideshare_pen[i.num][j.num][0]]
    + [delta * q[j.num] * (x[(i.num, j.num)] + x_prime[(i.num, j.num)]) * (1 - y[i.num][j.num])]
    for i in R_prime]) for j in V_prime])), 'wait_cost_' + str(t)

    #Set constraints
    for j in V_prime:
        label = 'rideshare_pass_constraint_time%d_v%d' % (t, j.num)
        condition = p[j.num] >= pulp.lpSum([[x_prime[(i.num, j.num)]] for i in R_prime]) #passenger 1 before 2 ride-share
        model += condition, label

        label_single = 'one_max_single_time%d_v%d' % (t, j.num)
        label_shared = 'one_max_shared_time%d_v%d' % (t, j.num)
        condition_single = pulp.lpSum([[x[(i.num, j.num)]] for i in R_prime]) <= 1 #cap the number of single rides for each vehicle
        condition_shared = pulp.lpSum([[x_prime[(i.num, j.num)]] for i in R_prime]) <= 1 #cap the number of ride shares for each vehicle
        model += condition_single, label_single
        model += condition_shared, label_shared

    for i in R_prime:
        label = 'all_assigned_time%d_p%d' % (t, i.num)
        condition = pulp.lpSum([[x[(i.num, j.num)]] + [x_prime[(i.num, j.num)]] for j in V_prime]) == 1 #every passenger is assigned
        model += condition, label

    for i in R_prime:
        for j in V_prime:
            label_single = 'nonneg_single_time%d_p%d_i%d' % (t, i.num, j.num)
            label_shared = 'nonneg_shared_time%d_p%d_i%d' % (t, i.num, j.num)
            condition_single = x[(i.num, j.num)] >= 0 #nonnegative single rides
            condition_shared = x_prime[(i.num, j.num)] >= 0 #nonnegative ride shares
            model += condition_single, label_single
            model += condition_shared, label_shared

    for i in R_A:
        label = 'stay_assigned_time%d_p%d' % (t, i.num)
        condition = pulp.lpSum([x[(i.num, j.num)]] + [x_prime[(i.num, j.num)]]) #prevents assigned -> unassigned
        model += condition, label

        for j in V_P:
            label_single = 'reassign_single_time%d_p%d_i%d' % (t, i.num, j.num)
            label_shared = 'reassign_shared_time%d_p%d_i%d' % (t, i.num, j.num)
            condition_single = b[i.num] * (y[i.num][j.num] - x[(i.num,j.num)]) <= 0  #prevents more than 1 reassignment
            condition_shared = b[i.num] * (y[i.num][j.num] - x_prime[(i.num,j.num)]) <= 0  #prevents more than 1 reassignment
            model += condition_single, label_single
            model += condition_shared, label_shared
model=plup.LpProblem('R_lessthan_V_'+str(t),lpminimized)
#设置要优化的变量
x=pulp.LpVariable.dicts('single_ride_u'+str(t),((i.num,j.num)表示R_素数中的i表示V_素数中的j表示j),cat='Binary')
x_prime=pulp.LpVariable.dicts('shared_ride_'+str(t),((i.num,j.num)表示R_prime中的i表示V_prime中的j表示j),cat='Binary')
#设定目标函数
模型+=(palp.lpSum([palp.lpSum[x[(i.num,j.num)]*(d[i.num][j.num]+phi*p[j.num])]
+[x_prime[(i.num,j.num)]*i.num][j.num][0]]
+[delta*q[j.num]*(x[(i.num,j.num)]+x_素数[(i.num,j.num)])*(1-y[i.num][j.num])]
对于R_素数中的i)对于V_素数中的j),等待成本+str(t)
#设置约束条件
对于V_素数中的j:
label='rideshare\u pass\u constraint\u time%d\u v%d'(t,j.num)
条件=p[j.num]>=palp.lpSum([[x_prime[(i.num,j.num)]]表示i在R_prime中])#乘客1在2次乘车共享之前
模型+=条件、标签
label_single='one_max_single_time%d_v%d'(t,j.num)
label_shared='one_max_shared_time%d_v%d'(t,j.num)
条件_single=pill.lpSum([[x[(i.num,j.num)],对于R_素数中的i])=0#非负乘骑份额
模型+=条件单,标签单
模型+=条件共享,标签共享
对于我在R_A:
label='stay\u assigned\u time%d\u p%d'(t,i.num)
条件=palp.lpSum([x[(i.num,j.num)]]+[x_prime[(i.num,j.num)])#防止分配->未分配
模型+=条件、标签
对于V_P中的j:
label_single='reassign_single_time%d_p%d_i%d'(t,i.num,j.num)
label_shared='reassign_shared_time%d_p%d_i%d'(t,i.num,j.num)

条件_single=b[i.num]*(y[i.num][j.num]-x[(i.num,j.num)])迭代在哪里?我只看到一个模型,但它并没有在该代码中解决


更地道

嗨,谢谢你的回复;本质上,此代码是函数的一部分(被多次调用)。不久之后我调用了model.solve(),但我没有包括这些部分,因为我认为它与模型本身的定义没有那么大关系,但如果我包括所有内容,会有帮助吗?我将改变习惯用语。
model += pulp.lpSum(x[(i.num, j.num)] * (d[i.num][j.num] + phi * p[j.num])
+ x_prime[(i.num, j.num)] * rideshare_pen[i.num][j.num][0]
+ delta * q[j.num] * (x[(i.num, j.num)] + x_prime[(i.num, j.num)]) * (1 - y[i.num][j.num])
for i in R_prime for j in V_prime), 'wait_cost_' + str(t)