code: def gcp_fixed_k(V,E,K):
      
      model = Model("gcp - fixed k")
  
      x,z = {},{}
      for i in V:
          for k in range(K):
              x[i,k] = model.addVar(vtype="B", name="x(%s,%s)"%(i,k))
      for (i,j) in E:
          z[i,j] = model.addVar(vtype="B", name="z(%s,%s)"%(i,j))
  
      for i in V:
          model.addCons(quicksum(x[i,k] for k in range(K)) == 1, "AssignColor(%s)" % i)
  
      for (i,j) in E:
          for k in range(K):
              model.addCons(x[i,k] + x[j,k] <= 1 + z[i,j], "BadEdge(%s,%s,%s)"%(i,j,k))
  
      model.setObjective(quicksum(z[i,j] for (i,j) in E), "minimize")
  
      model.data = x,z
      return model
docs: gcp_fixed_k -- model for minimizing number of bad edges in coloring a graph
      Parameters:
          - V: set/list of nodes in the graph
          - E: set/list of edges in the graph
          - K: number of colors to be used
      Returns a model, ready to be solved.