Я хочу рассчитать максимальное значение конкретного пользователя на основе его интереса |Популярность |и интерес, и популярность, используя следующее уравнение задачи линейного программирования (LPP)
с использованием пакета целлюлозы в python3.7.
У меня есть4 списка
ИНТЕРЕС = = [5,10,15,20,25]
ПОПУЛЯРНОСТЬ = [4,8,12,16,20]
ПОЛЬЗОВАТЕЛЬ= [1,2,3,4,5]
стоимость = [2,4,6,8,10]
и 2 значения переменных как
е = 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 дляi in INTEREST) + lpSum (POPULARITY [i] (1-e) для i in POPULARITY) IndexError: список индексов вне диапазона
Что я сделал неправильно в своем коде.Направь меня, чтобы решить эту проблему.Заранее спасибо.