Объект не подлежит подписке - PullRequest
0 голосов
/ 29 октября 2019

Я работаю над проблемой оптимизации, целью которой является отображение нескольких решений. Этот код является дополнительным ограничением, запрещающим возвращать одно и то же решение. Вот вывод, который я получаю: TypeError: 'builtin_function_or_method' object is not subscriptable

Я посмотрел несколько решений, но, похоже, они не работают с моей установкой. Вот два словаря:

pref_dict[(c, d)] = int(preference[index_c][index_d])
assign = pulp.LpVariable.dicts("AssignTo", [(i, j) for i in worker for j in job], 0, 1, LpBinary)  
while True:
    model.solve()
    print("Status:", LpStatus[model.status])
    if LpStatus[model.status] == "Optimal":
        for v in model.variables():
            if v.varValue > 0:
                answer = str(v).split("'")
                solutions.append((answer[1], answer[3]))
            with open('Solutions.csv', 'w', newline='') as myfile:
                writer = csv.writer(myfile)
                writer.writerows(solutions)
#this is the line that gives me issues:
        model += pulp.lpSum([pref_dict[(i, j)] * assign[(i, j)] for i in worker
                                                                for j in job
                                                                if value(vars[i][j]) == 1]) <= 80
    else:
        break

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Я понял это. Я должен был сосредоточиться только на двоичных значениях и ограничить ограничение до <= 1 </p>

 model += lpSum([assign[i, j] for i in worker for j in job if value(assign[i, j]) == 1]) <= 1
0 голосов
/ 30 октября 2019

vars[i][j] Я предполагаю, что это должно быть assign[i,j]

...