Skip to main content

Unsupported operand type(s) for *: 'float' and 'generator'

Answered

Comments

4 comments

  • Silke Horn
    Gurobi Staff Gurobi Staff

    Hi,

    Could you please clarify what type your variables have? For example, which ones are Gurobi model variables, and which are constants? Or, better yet, provide a self-contained code example so we can see what is what.

    Silke

    0
  • Nastaran Oladzadabbasabady
    Gurobi-versary
    First Comment
    First Question

    Hi,

    Please find the definition of the parameters and variables below:

    # Parameters

    num_region = 5 #number of regions, including depot
    num_period = 2 #number of planning periods

    regions = []
    for i in range(num_region):
      regions.append(i)

    periods = []
    for i in range(num_period):
      periods.append(i+1) # periods = [1, 2, ...]

    depot = regions[0]
    rate = 1 # detection rate of UAVs
    divisor = 10 # used to trun S to S_init; S = divisor*S_init
    minn = 0 # minimum search time/divisor    
    maxx = int(dur/divisor) # maximum search time/divisor

    people = {depot: 0} #number of people who need help in each region
    for i in [reg for reg in regions if reg != depot]:
      people[i] = random.randint(50, 100)

    weights = list(np.linspace(0,1, num_period+1))
    weights.sort(reverse=True)  # victims prefer to be visited during the earlier periods

    w = {} #periods' discount weights
    for i in periods:
      w[i] = weights[i]

    # additional linearization parameters

    Q_1 = []
    for i in range(minn, maxx+1):
      Q_1.append(divisor*i)

    Q_2 = {}
    for t in [per for per in periods if per != periods[0]]:
      Q_2[t] = []
      for i in range(minn, maxx*(t-1)+1):
          Q_2[t].append(divisor*i)

    Q_3 = {}
    for t in [per for per in periods if per != periods[0]]:
      Q_3[t] = []
      for i in range(minn, maxx*(t)+1):
          Q_3[t].append(divisor*i)

    # Create model
    model = Model("linear")

    # Create the variables
    # additional linearization variables

    gamma_1 = {}
    for i in [reg for reg in regions if reg != depot]:
      for q in Q_1:
            gamma_1[i, q] = model.addVar(vtype=GRB.BINARY, name="gamma_1_%s,%s" %(i,q))

    gamma_2 = {}
    for i in [reg for reg in regions if reg != depot]:
      for t in [per for per in periods if per != periods[0]]:
          for q in Q_2[t]:
                gamma_2[i, t, q] = model.addVar(vtype=GRB.BINARY, name="gamma_2_%s,%s,%s" %(i, t, q))

    gamma_3 = {}
    for i in [reg for reg in regions if reg != depot]:
      for t in [per for per in periods if per != periods[0]]:
          for q in Q_3[t]:
              gamma_3[i, t, q] = model.addVar(vtype=GRB.BINARY, name="gamma_3_%s,%s,%s" %(i, t, q))
    0
  • Silke Horn
    Gurobi Staff Gurobi Staff

    Hi,

    Thanks for posting your code. This looks as though some of the parentheses may be misplaced. Your objective expression is pretty long and convoluted. Maybe different formatting can help break this up a bit and make it easier to parse (and maintain). E.g.:

    obj = quicksum(
            people[i]*(1-
                quicksum(math.exp(-rate*q)*gamma_1[i,q] for q in Q_1)
            ) 
            for i in regions if i != depot
        ) + quicksum(
            w[t]*(
                quicksum(
                    people[i]*(
                        quicksum((-rate*q)*gamma_2[i,t,q] for q in Q_2[t])
                        - quicksum((-rate*q)*gamma_3[i,t,q] for q in Q_3[t])
                    ) 
                    for i in regions if i != depot
                )
            ) 
            for t in periods if t != periods[0]
        )

    In this code, I moved one of the closing parenthesis before "for i in regions if i != depot" behind this expression. Now I don't get the error.

    Silke

    0
  • Nastaran Oladzadabbasabady
    Gurobi-versary
    First Comment
    First Question

    Hi Silke,

    Thank you! My problem is resolved!

    0

Please sign in to leave a comment.