TypeError:列表索引必须是整数或切片,而不是LpVariab

2024-10-01 15:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python编码,也在使用pulp进行LP优化。 我有一个需要最大化的函数,但看起来python/pulp不允许我的变量浏览列表。在

turbiinit_lista = [0,1,2,3]

prob = LpProblem("Vesivoima", LpMaximize)
k = LpVariable("Test", 0, 3, LpInteger)

最大化此功能

^{pr2}$

这只是我混乱的代码的一个简化,但它给了你我的问题的想法。在

那么,是否可以浏览列表中的最佳变量值?在


Tags: 函数test功能编码列表pulplplista
1条回答
网友
1楼 · 发布于 2024-10-01 15:28:34

欢迎来到SO!正如@Erwin指出的那样,不能使用决策变量索引到python列表或数组中。在

但是,您可以通过pulp库使用MILP从可能的值列表中进行选择。在

有几种方法可以做到这一点——一种是引入一个二进制变量列表,以指示是否选择了每个选项(变量采用值1)或否(变量采用值0),并强制要求其中一个必须为真。在

使用这种方法,您的问题将变成以下问题。注意,choose_vars是一个二进制决策变量列表,它跟踪选择的选项列表中的哪个,而{}是一个被约束为所选值的连续变量。在

from pulp import *
turbiinit_lista = [1.1,2.2,3.3,4.4]
n = len(turbiinit_lista)
N = range(n)

prob = LpProblem("Vesivoima", LpMaximize)
choose_vars = LpVariable.dicts("choose_%s", N, 0, 1, cat="Integer")
choosen_value = LpVariable("choosen")

prob += (10*choosen_value-50-(350*choosen_value))
prob += choosen_value == lpSum([turbiinit_lista[i]*choose_vars[i] for i in N])
prob += lpSum([choose_vars[i] for i in N]) == 1

prob.writeLP("Vesivoima.lp")
prob.solve()

choose_vars_soln = [choose_vars[i].varValue for i in N]
print("choose_vars_soln: " + str(choose_vars_soln))
print("choosen_value: " + str(choosen_value.varValue))

哪些输出:

^{pr2}$

相关问题 更多 >

    热门问题