[Python] TypeError: unsupported operand type(s) for *: 'int' and 'Var'

Discussão em 'Python' iniciado por Stack, Abril 16, 2025.

  1. Stack

    Stack Membro Participativo

    below is my gurobipy code

    from gurobipy import Model, GRB, quicksum
    import math

    # Parameters
    n = 314
    m = 2025

    # Pre-compute possible binomial coefficients
    bin_coeffs = {(m - k, n): math.comb(m - k, n)
    for k in range(m + 1) if m - k >= n}

    # Create model
    model = Model("binomial_minimization")

    # Add variables
    x = model.addVars(n, vtype=GRB.INTEGER, lb=1, ub=m, name="x")

    # Add constraint
    model.addConstr(quicksum(x for i in range(n)) == m, "sum_constraint")

    # Create binary variables for each possible value of (m-x_k)
    y = model.addVars(n, m + 1, vtype=GRB.BINARY, name="y")

    # Link x and y variables
    for i in range(n):
    model.addConstr(x == quicksum(k * y[i,k] for k in range(m + 1)))
    model.addConstr(quicksum(y[i,k] for k in range(m + 1)) == 1)

    # Set objective
    obj = quicksum(bin_coeffs.get((m - k, n), 0) * y[i,k]
    for i in range(n) for k in range(m + 1))
    model.setObjective(obj, GRB.MINIMIZE)

    # Optimize
    model.optimize()

    # Print results
    if model.status == GRB.OPTIMAL:
    print("\nOptimal solution found:")
    for i in range(n):
    print(f"x[{i}] = {x.X}")
    print(f"Objective value = {model.ObjVal}")


    There is an error TypeError: unsupported operand type(s) for *: 'int' and 'Var'

    for 'obj = quicksum(bin_coeffs.get((m - k, n), 0) * y[i,k] for i in range(n) for k in range(m + 1))'

    How to fix it? The code works correctly for n=30, m=2025

    Continue reading...

Compartilhe esta Página