Перезапуск функции в том же скрипте - PullRequest
0 голосов
/ 11 марта 2019

У меня есть функция, которая распределяет предметы по разным грузовикам, но когда я пытаюсь перезапустить одну и ту же функцию для другого набора данных, выдает ошибку, что объект 'list' не может быть вызван

Второй набор данных (т.е. набор данных) является копией исходного набора данных, но с некоторыми исключенными значениями, поэтому в данных, которые я предоставляю, изменений нет.

Я вставляю весь код для лучшего понимания, если ситуация все еще не ясна, пожалуйста, скажите мне, что еще мне нужно предоставить

Код:

def allocator(item_mass,item_vol,truck_mass,truck_vol,truck_cost):
    n_items = len(item_vol)
    set_items = range(n_items)
    n_trucks = len(truck_cost)
    set_trucks = range(n_trucks)

    y = pulp.LpVariable.dicts('truckUsed', set_trucks,
        lowBound=0, upBound=1, cat=LpInteger)

    x = pulp.LpVariable.dicts('itemInTruck', (set_items, set_trucks), 
        lowBound=0, upBound=1, cat=LpInteger)

    # Model formulation
    prob = LpProblem("Truck allocatoin problem", LpMinimize)

    # Objective
    prob += lpSum([truck_cost[i] * y[i] for i in set_trucks])

    # Constraints
    for j in set_items:
        # Every item must be taken in one truck
        prob += lpSum([x[j][i] for i in set_trucks]) == 1

    for i in set_trucks:
        # Respect the mass constraint of trucks
        prob += lpSum([item_mass[j] * x[j][i] for j in set_items]) <= truck_mass[i]*y[i]

        # Respect the volume constraint of trucks
        prob += lpSum([item_vol[j] * x[j][i] for j in set_items]) <= truck_vol[i]*y[i]

    # Ensure y variables have to be set to make use of x variables:
    for j in set_items:
        for i in set_trucks:
            x[j][i] <= y[i]


    prob.solve()

    x_soln = np.array([[x[i][j].varValue for i in set_items] for j in set_trucks])
    y_soln = np.array([y[i].varValue for i in set_trucks])

    lpstatus = LpStatus[prob.status]
    value_obj = value(prob.objective)


    trucks_used = str(sum(([y_soln[i] for i in set_trucks])))        #output3

    a = []
    b = []

    for i in set_items:
        for j in set_trucks:
            if x[i][j].value() == 1:
                a.append(str(j))
                b.append(str(i))


    totalitemvol = sum(item_vol)

    totaltruckvol = sum([y[i].value() * truck_vol[i] for i in set_trucks])

    trucks_status = []                                                #output4  #sufficient or not

    if(totaltruckvol >= totalitemvol):
        trucks_status.append("Trucks are sufficient")
    else:
        trucks_status.append("Trucks are insufficient")


    zipped = list(zip(a, b))
    packed_items = {} 

    for tr,it in zipped:
        try:
            packed_items[tr].append(it)
        except KeyError:
            packed_items[tr] = [it]


    output_dict = {}                                                 #output5 #Dictionary with trucks and items 
    for k, v in packed_items.items():
        output_dict[int(k)] = [int(item) for item in v]


    return lpstatus,value_obj,trucks_used, trucks_status, output_dict

вызов той же функции во второй раз:

dat = data[~data["Pid"].isin([8, 1, 2, 6])]
item_m = dat["Weight"].tolist()
item_v = dat["Volume"].tolist()

# Mass & volume capacities of trucks
truck_m = truck["Weight"].tolist()
truck_v = truck["Volume"].tolist()

# Cost of using each truck
truck_c = truck["Price"].tolist()
print(dat)
print(item_mass)


allocator(item_m,item_v,truck_m,truck_v,truck_c)

Вот ошибка:

TypeError                                 Traceback (most recent call last)
<ipython-input-179-134dc70f4c45> in <module>()
     14 
     15 
---> 16 allocator(item_m,item_v,truck_m,truck_v,truck_c)
     17 
     18 

<ipython-input-166-80638aac383c> in allocator(item_mass, item_vol, truck_mass, truck_vol, truck_cost)
     41 
     42     lpstatus = LpStatus[prob.status]
---> 43     value_obj = value(prob.objective)
     44 
     45 

TypeError: 'list' object is not callable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...