【发布时间】:2019-02-18 06:12:11
【问题描述】:
我想根据他的兴趣计算特定用户的最大化价值 |人气 |使用以下线性规划问题(LPP)方程同时获得兴趣和流行度
在python3.7中使用pull包。
我有 4 个列表
兴趣 = [5,10,15,20,25]
流行度 = [4,8,12,16,20]
用户 = [1,2,3,4,5]
成本 = [2,4,6,8,10]
和2个变量值作为
e=0.5 ; e 可能取(0 或 1 或 0.5)
预算=20
和
i=0 到 n ; n 是列表的长度
表示要对所有列表值进行求和。
这里,如果 e==0 表示利息将为 0 ;如果 e==1 表示人气为 0 ;如果 e==0.5 表示将考虑兴趣和人气作为最大值
xi 也取 0 或 1;如果 xi==1 则考虑用户,否则如果 xi==0 则不考虑用户。
我的纸浆代码如下
from pulp import *
INTEREST = [5,10,15,20,25]
POPULARITY = [4,8,12,16,20]
USER = [1,2,3,4,5]
cost = [2,4,6,8,10]
e=0.5
budget=10
#PROBLEM VARIABLE
prob = LpProblem("MaxValue", LpMaximize)
# DECISION VARIABLE
int_vars = LpVariable.dicts("Interest", INTEREST,0,4,LpContinuous)
pop_vars = LpVariable.dicts("Popularity",
POPULARITY,0,4,LpContinuous)
user_vars = LpVariable.dicts("User",
USER,0,4,LpBinary)
#OBJECTIVE fUNCTION
prob += lpSum(USER(i)((INTEREST[i]*e for i in INTEREST) +
(POPULARITY[i]*(1-e) for i in POPULARITY)))
# CONSTRAINTS
prob += USER(i)cost(i) <= budget
#SOLVE
prob.solve()
print("Status : ",LpStatus[prob.status])
# PRINT OPTIMAL SOLUTION
print("The Max Value = ",value(prob.objective))
现在我收到 2 个错误
1) 第 714 行,在 addInPlace for e in other 中:
2) 第 23 行,在 prob += lpSum(INTEREST[i]e for i in INTEREST) + lpSum(POPULARITY[i](1-e) for i in POPULARITY) IndexError: 列表索引超出范围
我在代码中做错了什么。指导我解决这个问题。提前致谢。
【问题讨论】:
-
您的决策变量是什么 - 即您要选择什么?目前,您的固定成本为 5,与任何决策变量无关 - 成本将始终为 5,并且始终小于始终为 10 的预算,因此似乎有些不对劲。
-
感谢您的回复。我对这个 LPP 编码概念很陌生。我使用一种在线材料编写了我的代码(我知道它可能是错误的)。我不知道如何按照我的公式构建纸浆(LPP)代码。根据公式兴趣和流行度是一个列表,而 e、成本、预算是一个正常变量。在我的问题中,我只给出了成本和预算的样本值。有时预算可能 >= 成本。 e 的值通常为 0,1,0.5。如果可能,请尝试根据我的公式更改我的代码。谢谢..
-
您的公式没有显示成本如何随决策变量而变化。如果您解释一下您的应用程序可能会有所帮助 - 您要解决什么问题?
-
根据您的说明,我修改了我的问题。请通过修改后的问题。希望现在您对我的申请有所了解。我知道我的代码可能是错误的。因此,如果可能的话,建议我为我的公式和问题描述提供纸浆(LPP)代码。谢谢。
-
让我的应用程序始终考虑 xi==1.. 谢谢..
标签: python-3.x pulp