es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

LP en pulpa – problema con la variable de decisión

Deseo que mi variable de decisión dependa de las variables iniciales del período anterior que cambia según otra variable de decisión. La línea en la que obtengo un error es:

my_problem += lineup_wk1[i] == starting_lineup[i] + trans_in[i] - trans_out[i] for i in players

donde dice:

“ninguno
Archivo ““, línea 4
my_problem += lineup_wk1[i] == starting_lineup[i] + trans_in[i] – trans_out[i] for i in players
^
SyntaxError: sintaxis inválida”

El código completo es:

players = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
points = [4.2, 5.3, 6.0, 5.5, 4.5, 5.7, 4.8, 6.9]
cost = [4.5, 5.0, 5.1, 4.9, 5.2, 5.7, 5.2, 6.0]
starting_team = [1,0,1,0,1,0,1,0]

player_points = dict(zip(players, points))
player_cost = dict(zip(players, cost))
starting_lineup = dict(zip(players, starting_team))

my_problem = pulp.LpProblem('LP_model', pulp.LpMaximize)
lineup_wk1 = pulp.LpVariable.dict('lineup_wk1_%s', players, lowBound=0, upBound=1, cat=pulp.LpBinary)
trans_in  = pulp.LpVariable.dict('trans_in_%s', players, lowBound=0, upBound=1, cat=pulp.LpBinary)
trans_out  = pulp.LpVariable.dict('trans_out_%s', players, lowBound=0, upBound=1, cat=pulp.LpBinary)

my_problem += sum([player_points[i] * (lineup_wk1[i]) for i in players])

my_problem += sum([lineup_wk1[i] for i in players]) <= 4
my_problem += sum(trans_in[i] for i in players) <= 2
my_problem += sum(trans_in[i] for i in players) == sum(trans_out[i] for i in players)
my_problem += lineup_wk1[i] == starting_lineup[i] + trans_in[i] - trans_out[i] for i in players

my_problem.solve()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    La línea que está causando el error es:

    my_problem += lineup_wk1[i] == starting_lineup[i] + trans_in[i] - trans_out[i] for i in players
    

    La razón del error de sintaxis es que el bucle for no está colocado correctamente dentro de la expresión. Debe estar separado de la expresión y utilizado para iterar sobre los jugadores:

    for i in players:
        my_problem += lineup_wk1[i] == starting_lineup[i] + trans_in[i] - trans_out[i]
    

    Esto asegurará que las variables de inicio del período anterior se utilicen correctamente para calcular la nueva variable de decisión.

Comments are closed.