1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| from pulp import *
users = ['User 1', 'User 2', 'User 3', 'User 4'] songs = ['Song 1', 'Song 2', 'Song 3', 'Song 4'] ratings = { ('User 1', 'Song 1'): 3, ('User 1', 'Song 2'): 4, ('User 1', 'Song 3'): 5, ('User 1', 'Song 4'): 2, ('User 2', 'Song 1'): 5, ('User 2', 'Song 2'): 4, ('User 2', 'Song 3'): 2, ('User 2', 'Song 4'): 3, ('User 3', 'Song 1'): 4, ('User 3', 'Song 2'): 5, ('User 3', 'Song 3'): 3, ('User 3', 'Song 4'): 4, ('User 4', 'Song 1'): 2, ('User 4', 'Song 2'): 3, ('User 4', 'Song 3'): 4, ('User 4', 'Song 4'): 5 } time_limits = { 'User 1': 60, 'User 2': 90, 'User 3': 120, 'User 4': 60 }
prob = LpProblem("Music Recommendation", LpMinimize)
x = LpVariable.dicts('x', [(u, s) for u in users for s in songs], cat='Binary')
prob += lpSum([x[(u, s)] * ratings[(u, s)] for u in users for s in songs])
for u in users: prob += lpSum([x[(u, s)] for s in songs]) <= len(songs) // 2, f"User {u} - Song count" prob += lpSum([x[(u, s)] * ratings[(u, s)] for s in songs]) >= 3, f"User {u} - Minimum rating" prob += lpSum([x[(u, s)] * ratings[(u, s)] for s in songs]) <= 5, f"User {u} - Maximum rating" prob += lpSum([x[(u, s)] * ratings[(u, s)] for s in songs]) * 5 <= time_limits[u], f"User
|