首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >纸浆优化错误- LPVariable对象不支持索引

纸浆优化错误- LPVariable对象不支持索引
EN

Stack Overflow用户
提问于 2019-06-12 01:40:19
回答 1查看 302关注 0票数 0

在尝试添加位于第31行的模型小时([MAHLi (i,j) in <= += ])<= 40上的约束时,我始终收到错误

我不确定如何正确设置此约束。我试着说,在i和j的每个索引中,特定值需要小于40,并对所有i,j对都这样做。

我对纸浆非常陌生,正在尝试建立并运行一个基本的模型。输入数据只是一堆长365行、宽24列的随机值。

代码语言:javascript
复制
from pulp import *
import pandas as pd
import numpy as np
import xlrd

model = pulp.LpProblem("Basic Model", pulp.LpMaximize)

YPER = 365
HE = 24

yearlyhours = [(i,j) for i in range(YPER) for j in range(HE)]

xlsx = pd.ExcelFile('IvA.xlsx')
df1 = pd.read_excel(xlsx, 'Sheet5')
df2 = pd.read_excel(xlsx, 'Sheet3')
df3 = pd.read_excel(xlsx, 'Sheet2')

MAHL = pulp.LpVariable('MAHL', (YPER, HE), cat='Integer')
MALL = pulp.LpVariable('MALL', cat='Integer')
DAHL = pulp.LpVariable('DAHL', cat='Integer')
DALL = pulp.LpVariable('DALL', cat='Integer')

book = xlrd.open_workbook('IvA.xlsx')
sheet10 = book.sheet_by_name('Sheet10')
sheet11 = book.sheet_by_name('Sheet11')

DAPRICE = [[sheet10.cell_value(r, c) for c in range(sheet10.ncols)] for r in range(sheet10.nrows)]
LOAD = [[sheet11.cell_value(r, c) for c in range(sheet11.ncols)] for r in range(sheet11.nrows)]

#model += (MAHL[i][j] for i in range(YPER) for j in range(HE)) <= 40
model += ([MAHL[i][j] for (i,j) in yearlyhours]) <= 40

model += (pulp.lpSum([DAPRICE[i][j] * LOAD[i][j] for i in range(YPER) for j in range(HE)]))

model.solve()
pulp.LpStatus[model.status]
print("Status:", LpStatus[model.status])

obj = value(model.objective)
print(obj)

我尝试了几个解决方案,一个额外的被注释掉了。

代码语言:javascript
复制
Traceback (most recent call last):
  File "bs.py", line 31, in <module>
    model += ([MAHL[i][j] for (i,j) in yearlyhours]) <= 40
  File "bs.py", line 31, in <listcomp>
    model += ([MAHL[i][j] for (i,j) in yearlyhours]) <= 40
TypeError: 'LpVariable' object does not support indexing
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 01:52:56

您已经将MAHL定义为pulp.LpVariable,它(如错误所示)不支持索引,因为它对LP变量进行建模。

您可能希望使用pulp.LpVariable.dicts来定义它。

示例:

代码语言:javascript
复制
MAHL = pulp.LpVariable.dicts('MAHL', yearlyhours, cat=pulp.LpInteger)

并将其称为

代码语言:javascript
复制
model += pulp.lpSum([MAHL[(i,j)] for (i,j) in yearlyhours]) <= 40
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56549095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档