我想根据他的兴趣计算特定用户的最大化值人气|使用以下线性规划问题(LPP)方程的兴趣和流行度
在python3.7中使用纸浆包。
我有4个清单
利息= [5,10,15,20,25]
人气= [4,8,12,16,20]
USER = [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中为e:
2)第23行,在prob + = lpSum(INTEREST [i] e for i in INTEREST)+ lpSum(POPULARITY [i](1-e)for i in popULARITY)IndexError:list index out of range
我在代码中做错了什么。指导我解决这个问题。提前致谢。
我想我终于明白了你想要实现的目标。我认为你的描述问题与术语有关。在线性程序中,我们为那些我们希望被选择或作为优化的一部分选择的变量保留术语变量。
如果我理解你的需要你的python变量e
和budget
将被视为线性程序的参数或常量。
我相信这可以做你想要的:
from pulp import *
import numpy as np
INTEREST = [5,10,15,20,25]
POPULARITY = [4,8,12,16,20]
COST = [2,4,6,8,10]
N = len(COST)
set_user = range(N)
e=0.5
budget=10
#PROBLEM VARIABLE
prob = LpProblem("MaxValue", LpMaximize)
# DECISION VARIABLE
x = LpVariable.dicts("user_selected", set_user, 0, 1, LpBinary)
# OBJECTIVE fUNCTION
prob += lpSum([x[i]*(INTEREST[i]*e + POPULARITY[i]*(1-e)) for i in set_user])
# CONSTRAINTS
prob += lpSum([x[i]*COST[i] for i in set_user]) <= budget
#SOLVE
prob.solve()
print("Status : ",LpStatus[prob.status])
# PRINT OPTIMAL SOLUTION
print("The Max Value = ",value(prob.objective))
# Show which users selected
x_soln = np.array([x[i].varValue for i in set_user])
print("user_vars: ")
print(x_soln)
哪个应返回以下内容,即使用这些特定参数仅选择包含最后一个用户 - 但此决定将更改 - 例如,如果您将预算增加到100,则将选择所有用户。
Status : Optimal
The Max Value = 22.5
user_vars:
[0. 0. 0. 0. 1.]