Skip to main content

An error from the dynamic set

Answered

Comments

3 comments

  • Ryuta Tamura
    Gurobi Staff Gurobi Staff

    Hi Nazmi,

    KeyError: (0, 1, 0, 0) comes from python dict. It seems that the key (0, 1, 0, 0) does not exist in z_dual. You can run print(z_dual.keys()) and check what the keys of this dict. I suspect that the place in which z_dual is defined is wrong.

    Thanks,
    Ryuta

    1
  • Nazmi Sener
    Conversationalist
    Gurobi-versary
    First Question

    Hi Ryuta,

    I don't understand but this problem is vanished after adding print(z_dual.keys()) command. However, after get rid of this warning from the first iteration it again appears in the second iteration. I do not think the error is caused by the placement. The end of the each iteration I remove this constraint set, and I define the beginning of the each iteration with new decision variables. I appreciate your helps. Thank you for your helps,

    Current form of error:
      0%|                                                       | 1/2000 [00:03<1:51:51,  3.36s/it] 
    Traceback (most recent call last):
      File "d:\Github\docentlik_jcp\lagr_cutgen_dual_v1.py", line 479, in <module>
        res,  soltime=lagrange(pval,prod,7200, S)
      File "d:\Github\docentlik_jcp\lagr_cutgen_dual_v1.py", line 357, in lagrange
        rmpd_iter1[i,t,s]=rmpd.addConstr(sum(z_dual[i,t,s,iters]  for iters in range(iter+1))==1, name=f"rmpd1_{s}_{i}_{t}")
      File "d:\Github\docentlik_jcp\lagr_cutgen_dual_v1.py", line 357, in <genexpr>
        rmpd_iter1[i,t,s]=rmpd.addConstr(sum(z_dual[i,t,s,iters]  for iters in range(iter+1))==1, name=f"rmpd1_{s}_{i}_{t}")
    KeyError: (0, 1, 0, 0)
     
    Source of error:
        for iter in tqdm(range(max_iter)):
          z_dual={}
          for s in range(S):
              for i in range(n):
                  for t in range(1,T):
                      z_dual[i,t,s,iter] = rmpd.addVar(vtype=GRB.CONTINUOUS, lb=0, name="z_dual%s.%s.%s.%s" % (i,t,s,iter))
          rmpd.update()

          rmpd_iter1={}
          #RMP constraints
          for s in range(S):
              for i in range(n):
                  for t in range(1,T):
                      rmpd_iter1[i,t,s]=rmpd.addConstr(sum(z_dual[i,t,s,iters]  for iters in range(iter+1))==1, name=f"rmpd1_{s}_{i}_{t}")
            rmpd_iter2={}

          #RMP constraints
          for i in range(n):
              for t in range(1,T):
                  rmpd_iter2[i,t]=rmpd.addConstr(gp.quicksum(z_dual[i,t,s,iters]*x_val[i,t,s,iter] for iters in range(iter+1) for s in range(S))==cg_bar[i,t], name=f"rmpd2_{i}_{t}")

          rmpd_obj=sum(objval[iters]*z_dual[i,t,s,iters] for i in range (n) for t in range(1,T) for s in range(S) for iters in range(iter+1))
            rmpd.setObjective(rmpd_obj, GRB.MINIMIZE)

     

    0
  • Ryuta Tamura
    Gurobi Staff Gurobi Staff

    Hi,

    If I understand correctly, "z_dual" is redefined each time inside the loop of "for iter in tqdm(range(max_iter)):". In that case, the fourth index of z_dual is only "iter" each time. However, the part of error refers as the following:

    rmpd_iter1[i,t,s]=rmpd.addConstr(sum(z_dual[i,t,s,iters]  for iters in range(iter+1))==1, name=f"rmpd1_{s}_{i}_{t}")

    In the second iteration,  the fourth index of z_dual is only "iter"=1, but "iters" will be 0 and 1. The key "iter"=0 doed not exist, therefore KeyError occurs.

    Thanks

    1

Please sign in to leave a comment.