I am trying to solve an optimization problem with cvxpy. When the problem is being compiled, I get a “negative dimension” error, which could be because of an integer overflow problem. See topic on https://github.com/cvxgrp/cvxpy/issues/826 for more details.
My question is if you have an idea on how I could reformulate the problem formulation, so that the problem construct becomes smaller. Do you see any ways, where I could maybe use other functions or another mathematical formulation to reduce the problem?
The problem formulation in cvxpy and python:
X_opt = cp.Constant(np.asarray(X.iloc[:,:500])) # the array size is (35136,500)
K_opt = cp.Constant(np.asarray(K.YearlyDemand)) # the vector size is 96
b = cp.Variable((500,96),boolean = True, value = np.zeros((500,96)))
Y_opt = cp.Constant(np.asarray(y)) # the vector size is 35136
constraints = 
constraints.append( cp.sum(b, axis = 0) == 1 ) # the sum of the elements of every column of b must be equal to 1
constraints.append( cp.sum(b, axis = 1) <= 1 ) # the sum of the elements of every row of b must be smaller or equal to 1
objective = cp.Minimize(cp.sum(cp.abs(Y_opt-cp.sum((cp.diag(K_opt)@((X_opt@b).T)).T, axis = 1))))
prob = cp.Problem(objective, constraints)
prob.solve(solver = cp.GLPK_MI, verbose = True)
Thanks in advance