SolverStudio, как ссылаться на 1 столбец в 2D списке в цикле for (PuLP) - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть 2 набора данных x1 и x2. Я хочу иметь возможность получить общую сумму всех произведений x1 и x2 только в строках, в которых столбец From содержит Окленд. см. Здесь

Окончательный ответ должен быть (5 * 1) + (2 * 1) + (3 * 1) + (4 * 1) или 14. Код PuLP, который я написал для этого, приведен ниже

# Import PuLP modeller functions
from pulp import *

varFinal = sum([x1[a] * x2[a] for a in Arcs if a == Nodes[0]])

print Nodes[0]
print Arcs[0]

Final = varFinal

Вывод на консоль выводится

Окленд
(«Окленд», «Олбани»)

Я понимаю, что мое окончательное значение равно нулю, потому что дуги [некоторое число] не равны узлам [некоторое число]. Можно ли как-нибудь изменить код, чтобы мое окончательное значение было 14?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 ноября 2018

Добро пожаловать в переполнение стека!Поскольку вы разместили только часть своего кода, я должен догадаться, какие типы данных вы используете.Исходя из вывода, я предполагаю, что ваши Nodes - строки, а ваши Arcs - кортежи строк.

Ваша попытка очень близка, вы хотите, чтобы столбец from содержал в себе Окленд.Вы можете индексировать в кортеж так же, как и в массив, поэтому вам нужно сделать: a[0] == Nodes[0].

Ниже приведен автономный пример с первым битом ваших данных, в котором выводится следующее(обратите внимание, что я изменил на операторы печати python 3.x (с круглыми скобками)):

Вывод:

Auckland
('Auckland', 'Albany')
14

Код:

# Import PuLP modeller functions
from pulp import *

# Data
Nodes = ['Auckland',
        'Wellington',
        'Hamilton',
        'Kansas City',
        'Christchuch',
        'Albany',
        'Whangarei',
        'Rotorua',
        'New Plymouth']

Arcs = [('Auckland','Albany'),
        ('Auckland','Hamilton'),
        ('Auckland','Kansas City'),
        ('Auckland','Christchuch'),
        ('Wellington','Hamilton'),
        ('Hamilton','Albany'),
        ('Kansas City','Whangarei'),
        ('Christchuch','Rotorua')]

x1_vals = [1, 2, 3, 4, 5, 9, 11, 13]
x2_vals = [5, 1, 1, 1, 1, 1, 1, 1]

x1 = dict((Arcs[i], x1_vals[i]) for i in range(len(Arcs)))
x2 = dict((Arcs[i], x2_vals[i]) for i in range(len(Arcs)))

varFinal = sum([x1[a] * x2[a] for a in Arcs if a[0] == Nodes[0]])

print(Nodes[0])
print(Arcs[0])
print(varFinal)

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

...