SolverStudio 如何在 for 循环 (PuLP) 中引用二维列表中的 1 列

SolverStudio how to reference 1 column in a 2D list in a for loop(PuLP)

我有 2 个数据集 x1 和 x2。我希望能够仅在 From 列中包含 Auckland 的行中获得 x1 和 x2 的所有乘积的总和。 see here

最终答案应该是 (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

打印到控制台的输出是

Auckland
('Auckland', 'Albany')

我意识到我的最终值为零,因为 Arcs[some number] 不等于 Nodes[some number]。无论如何要更改代码以便我的最终值为 14?

感谢任何帮助。

欢迎来到堆栈溢出!因为您只 post 编辑了部分代码,所以我必须猜测您使用的是什么数据类型。从输出来看,我猜你的 Nodes 是字符串,而你的 Arcs 是字符串元组。

您的尝试非常接近,您希望发件人列包含奥克兰。您可以像索引数组一样索引元组,因此您想这样做: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)

为了将来参考,如果您包含其他人可以尝试 运行(没有外部数据依赖性)的代码,那么很可能会得到答案,这样人们就可以尝试 运行 它,修复它,然后重新post它。